Backup your original Hard Drive
This how-to is based on the assumption that you have removed the AppleTV's harddisk and connected it to your desktop computer.
I also did my tests logged as
root in order to have all necessary permissions...
It is assumed that the drive shows up as
It could have another drive number on your Mac.
It could read
/dev/sdb or something similar on a Linux PC.
So be sure to replace the
/dev/disk4 in the following code by the proper device name.
The partitions will also change from e.g.
/dev/disk4s3 to something like
/dev/sdc3 on Linux.
Device mount point
It is assumed that the partitions are mounted on
This will be different on a Linux PC.
So again replace the mount point names with the proper ones.
Full drive backup
Full drive backup to a file
The most secure starting point is to do a complete ~40GB backup of the original disk:
umount /Volumes/Media/ dd if=/dev/disk4 of=appleTV.img bs=1024
The only good backup is the tested one:
dd if=appleTV.img of=/dev/disk4 bs=1024
Full drive backup with compression
The backup file will have the size of the disk. If you want to save space, you can compress it on the fly.
Before doing so, you might want to fill the
Media partition with zeroes.
On a Mac:
dd if=/dev/zero of=/Volumes/Media/big_file_full_of_zeros bs=1024 rm /Volumes/Media/big_file_full_of_zeros
Compress it with
gzip (will take a couple of hours):
umount /Volumes/Media/ dd if=/dev/disk4 bs=1024 | gzip > appleTV.img.gz
Compress it more (will take about twice the time):
umount /Volumes/Media/ dd if=/dev/disk4 bs=1024 | bzip2 -9 > appleTV.img.bz2
Partitionwise backup (OS X)
This has only been tested on Mac OS X.
Phoem's fast method
Phoem suggests a fast method to backup each partition to a different file, except for
dd if=/dev/disk4 of=partition.img bs=1024k count=100 dd if=/dev/disk4s1 of=EFI.img dd if=/dev/disk4s2 of=os.img dd if=/dev/disk4s3 of=OSBoot.img
The restoring process is similar:
dd if=partition.img of=/dev/disk4 bs=1024k count=100 dd if=EFI.img of=/dev/disk4s1 dd if=OS.img of=/dev/disk4s2 dd if=OSBoot.img of=/dev/disk4s3
OS X command line method
This method has been tested under Mac OS X Leopard and AppleTV_OS_2.1. It allows to
- change the partition sizes,
- keep a smaller backup set,
- make faster backups after changes such as installing ssh.
As the recovery partition is not mountable in Mac OS X, we'll copy it using Phoem's method:
diskutil eject /dev/disk4 dd if=/dev/disk4s2 of=recovery.img
The next partitions in turn will be saved as Mac OS disk images:
hdiutil create -srcdevice /dev/disk4s3 osBoot.dmg hdiutil create -srcdevice /dev/disk4s4 media.dmg asr -imagescan osBoot.dmg asr -imagescan media.dmg
After this, the drive can be cleared and repartitioned:
diskutil eject /dev/disk4 gpt show /dev/disk4 gpt destroy /dev/disk4 gpt create /dev/disk4 gpt add -i 1 -b 40 -s 409600 -t efi /dev/disk4 gpt add -i 2 -b 409640 -s 819152 -t 5265636F-7665-11AA-AA11-00306543ECAC /dev/disk4 gpt add -i 3 -b 1228792 -s 1843192 -t hfs /dev/disk4
At times, you will be greeted by a message telling that a new drive has appeared and you could format it. Click on ignore.
- With Leopard I had to create a larger EFI partition than the original one because it growed and moved after I attempted to format and restore the HFS partitions.
- The largest partition I was able to create for
/dev/disk4s3was 2097152 in size.
- Leopard created a secondary GPT at the end of the disk.
Before adding the last partition, see how much place is left:
diskutil eject /dev/disk4 gpt show /dev/disk4
Then add the last partition (here for a 40GB drive):
gpt add -i 4 -b 3071984 -s 75170959 -t hfs /dev/disk4
Format the partitions:
diskutil list diskutil eraseVolume "Journaled HFS+" OSBoot /dev/disk4s3 diskutil eraseVolume "Journaled HFS+" Media /dev/disk4s4
Restore the partitions:
dd if=recovery.img of=/dev/disk4s2 asr restore -s osBoot.dmg -t /dev/disk4s3 --erase --noprompt asr restore -s media.dmg -t /dev/disk4s4 --erase --noprompt
Eject the disk:
diskutil eject /dev/disk4
Place it back in the AppleTV and let it boot.
Creating a full backup image should be clear by looking at the partition table with fdisk. The minor partitions are wrapped in one large meta-partition!
Disk /dev/hdc: 40.0 GB, 40007761920 bytes 255 heads, 63 sectors/track, 4864 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device | Boot | Start | End | Blocks | Id | System /dev/hdc1 1 4864 39070076 ee EFI GPT
Linux can see the partitions and can mount them (although journaling is not supported), if the following options are compiled in the kernel. (not sure if you need all of them)
Filesystems -> Partition Types -> Advanced partition selection (CONFIG_PARTITION_ADVANCED=y) Filesystems -> Partition Types -> Macintosh partition map support (CONFIG_MAC_PARTITION=y) Filesystems -> Partition Types -> EFI GUID Partition support (CONFIG_EFI_PARTITION=y) Filesystems -> Miscanelous filesystems ->Apple Extended HFS file system support (CONFIG_HFSPLUS_FS=m or y)
Partitions can be mounted forcefully. Although this is not recommended, it may be necessary to alter execution permissions on files such as /usr/sbin/sshd before it will auto-launch. Forceful mounts can be done with:
mount -t hfsplus -o force /dev/sdc3 /mnt/appletv