Cloning MacOS X from Linux
I just finished to work out a way to clone a MacOS X installation from Linux (for automatic installation of MacOS X with fai – fully automatic installation). All tools discussed in the article are available in Debian 7.x (wheezy).
Backup
First we save the GUID (Globally Unique Identifier) Partition Table
(GPT), so that we can restore the same partition table on the target
machine. We use the commandline version of gdisk for this, named
sgdisk
sgdisk --backup=/srv/macos/parttable.gpt.sgdisk /dev/sda
The content of the partitions can be cloned using the partclone tool. A default MacOS X installation has three partitions:
- EFI system partiton
- MacOS X (named "Customer")
- Recovery partition
Model: ATA APPLE HDD HTS547 (scsi) Disk /dev/sda: 976773168s Sector size (logical/physical): 512B/4096B Partition Table: gpt Number Start End Size File system Name Flags 1 40s 409639s 409600s fat32 EFI system partition boot 2 409640s 975503591s 975093952s hfs+ Customer 3 975503592s 976773127s 1269536s hfs+ Recovery HD
First we create backup images of all partitions:
partclone.vfat -I -c -s /dev/sda1 | gzip > /srv/macos/sda1.partclone.gz partclone.hfsplus -I -c -s /dev/sda2 | gzip > /srv/macos/sda2.partclone.gz partclone.hfsplus -I -c -s /dev/sda3 | gzip > /srv/macos/sda3.partclone.gz
Restore
To restore the saved MacOS X installation, boot another Mac using Linux (a Knoppix live Linux DVD will work).
Next we restore the partition table (GPT) using sgdisk
(/dev/sda
is
the target disk, all data on that disk will be erased, be warned!):
sgdisk --load-backup=/srv/macos/parttable.gpt.sgdisk /dev/sda partprobe
as an alternative, the partitions can be created using parted
and the
GUID type codes set by sgdisk (important!):
sgdisk --zap /dev/sda parted -s /dev/sda mklabel gpt parted -s /dev/sda mkpart primary 40s 409639s parted -s /dev/sda name 1 "'EFI system partition'" parted -s /dev/sda set 1 boot on parted -s /dev/sda mkpart primary 409640s 975503591s parted -s /dev/sda name 2 "'MacOS X System'" parted -s /dev/sda mkpart primary 975503592s 976773127s parted -s /dev/sda name 3 "'Recovery HD'" sgdisk -t 1:C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/sda sgdisk -t 2:48465300-0000-11AA-AA11-00306543ECAC /dev/sda sgdisk -t 3:48465300-0000-11AA-AA11-00306543ECAC /dev/sda partprobe
Restore the partition content:
zcat /srv/macos/sda1.partclone.gz | partclone.vfat -r -o /dev/sda1 zcat /srv/macos/sda2.partclone.gz | partclone.hfsplus -r -o /dev/sda2 zcat /srv/macos/sda3.partclone.gz | partclone.hfsplus -r -o /dev/sda3
If all went well, the new disk is ready to boot MacOS X.
For reference, here are the GUID details of a default MacOS X 10.8 MacBook Pro install:
root@(none):~# sgdisk -p /dev/sda Disk /dev/sda: 976773168 sectors, 465.8 GiB Logical sector size: 512 bytes Disk identifier (GUID): 497736B0-7EA0-4C45-AB5F-8841CD773D24 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 976773134 Partitions will be aligned on 8-sector boundaries Total free space is 262157 sectors (128.0 MiB) root@(none):~# sgdisk -i1 /dev/sda Partition GUID code: C12A7328-F81F-11D2-BA4B-00A0C93EC93B (EFI System) Partition unique GUID: 6749C82F-02C9-4FF5-A889-F31A21726F8E First sector: 40 (at 20.0 KiB) Last sector: 409639 (at 200.0 MiB) Partition size: 409600 sectors (200.0 MiB) Attribute flags: 0000000000000000 Partition name: 'EFI system partition' root@(none):~# sgdisk -i2 /dev/sda Partition GUID code: 48465300-0000-11AA-AA11-00306543ECAC (Apple HFS/HFS+) Partition unique GUID: 60F7A3AA-69B3-4E59-87A0-3A47BB659255 First sector: 409640 (at 200.0 MiB) Last sector: 975241447 (at 465.0 GiB) Partition size: 974831808 sectors (464.8 GiB) Attribute flags: 0000000000000000 Partition name: 'MacOS X System' root@(none):~# sgdisk -i3 /dev/sda Partition GUID code: 48465300-0000-11AA-AA11-00306543ECAC (Apple HFS/HFS+) Partition unique GUID: FD007AA4-CF3A-42F6-BFC6-B3BC25521FC2 First sector: 975503592 (at 465.2 GiB) Last sector: 976773127 (at 465.8 GiB) Partition size: 1269536 sectors (619.9 MiB) Attribute flags: 0000000000000000 Partition name: 'Recovery HD'