If you still have the Recovery partition, you can transfer the partition manually.
The example given below was generated using two sparse disk images and Yosemite (OS X 10.10.5). You may have to jump though hoops that I did not have too. Some of these hoops are:
- El Capitan and later users may need to disable System Integrity
Protection (SIP).
- To enter some of the commands, you may need to boot from a USB device
(flash drive, HDD or SSD) or use Internet Recovery.
- Add or remove the command prefix
sudo
.
- Use the
cd
command to navigate to the proper directory (folder).
- Precede a command or file with the proper path.
- Make the proper adjustments if the sector size is not 512 bytes.
- Deal with addition complexities, if employing Core Storage.
Below is the procedure for copying a Recovery partition from /dev/disk1
to /dev/disk2
. This procedure requires the use of a third party command called gdisk
. More information about this command can be found at the site "GPT fdisk Tutorial".
The initial contents of /dev/disk1
and /dev/disk2
are given below.
Steelhead:recover davidanderson$ sudo gpt -r show /dev/disk1
Password:
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
409640 197892752 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
198302392 1697608 3 GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
200000000 7
200000007 32 Sec GPT table
200000039 1 Sec GPT header
Steelhead:recover davidanderson$ sudo gpt -r show /dev/disk2
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
409640 99328216 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
99737856 262151
100000007 32 Sec GPT table
100000039 1 Sec GPT header
Image the entire source partition. This partition is very small and
normally is not mounted. Simply copy the partition to a file.
Steelhead:recover davidanderson$ sudo dd if=/dev/disk1s3 of=recovery.binary bs=40960
21220+1 records in
21220+1 records out
869175296 bytes transferred in 44.563133 secs (19504358 bytes/sec)
Steelhead:recover davidanderson$ ls -l
total 1697608
-rw-r--r-- 1 root staff 869175296 Jul 20 11:53 recovery.binary
Make room of for the new Recovery partition.
Steelhead:recover davidanderson$ diskutil resizevolume /dev/disk2s2 limits
For device disk2s2 MacintoshHD:
Current size: 50.9 GB (50856046592 Bytes)
Minimum size: 5.5 GB (5524418560 Bytes)
Maximum size: 50.9 GB (50856046592 Bytes)
Steelhead:recover davidanderson$ diskutil resizevolume /dev/disk2s2 45G
Started partitioning on disk2s2 MacintoshHD
Verifying the disk
Verifying file system
Checking Journaled HFS Plus volume
Checking extents overflow file
Checking catalog file
Checking multi-linked files
Checking catalog hierarchy
Checking extended attributes file
Checking volume bitmap
Checking volume information
The volume MacintoshHD appears to be OK
File system check exit code is 0
Resizing
Finished partitioning on disk2s2 MacintoshHD
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *51.2 GB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS MacintoshHD 45.0 GB disk2s2
Create the new Recovery partition on /dev/disk2
. The new
partition has to be exactly the same size as the existing Recover
partition.
Steelhead:recover davidanderson$ sudo gdisk /dev/disk2
Password:
GPT fdisk (gdisk) version 1.0.1
Warning: Devices opened with shared lock will not have their
partition table automatically reloaded!
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (3-128, default 3):
First sector (34-100000006, default = 88300264) or {+-}size{KMGTP}:
Last sector (88300264-100000006, default = 100000006) or {+-}size{KMGTP}: +1697608
Current type is 'Apple HFS/HFS+'
Hex code or GUID (L to show codes, Enter = AF00): AB00
Changed type of partition to 'Recovery HD'
Command (? for help): x
Expert command (? for help): a
Partition number (1-3): 3
Known attributes are:
0: system partition
1: hide from EFI
2: legacy BIOS bootable
60: read-only
62: hidden
63: do not automount
Attribute value is 0000000000000000. Set fields are:
No fields set
Toggle which attribute field (0-63, 64 or <Enter> to exit): 49
Have enabled the 'Undefined bit #49' attribute.
Attribute value is 0002000000000000. Set fields are:
49 (Undefined bit #49)
Toggle which attribute field (0-63, 64 or <Enter> to exit):
Expert command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/disk2.
Warning: Devices opened with shared lock will not have their
partition table automatically reloaded!
Warning: The kernel may continue to use old or deleted partitions.
You should reboot or remove the drive.
The operation has completed successfully.
Steelhead:recover davidanderson$ sudo gpt -r show /dev/disk2
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
409640 87890624 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
88300264 1697608 3 GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
89997872 10002135
100000007 32 Sec GPT table
100000039 1 Sec GPT header
Eject and reattach /dev/disk2
. If you can not do this, then
restart the Mac.
Steelhead:recover davidanderson$ diskutil eject /dev/disk2
Disk /dev/disk2 ejected
Copy the saved image to the new Recovery partition. Since this is an
exact copy, use the hfs.util
command to generate a new UUID key
for the HFS file system.
When using El Capitan (OS X 10.11), the full path to the hfs.util
command is
System/Library/Filesystems/hfs.fs/Contents/Resources/hfs.util
.
Steelhead:recover davidanderson$ sudo dd if=recovery.binary of=/dev/disk2s3 bs=40960
Password:
21220+1 records in
21220+1 records out
869175296 bytes transferred in 52.127608 secs (16673992 bytes/sec)
Steelhead:recover davidanderson$ /System/Library/Filesystems/hfs.fs/hfs.util -k disk2s3; echo
78A8438E-2299-3AF0-AD9E-3AC225B0554A
Steelhead:recover davidanderson$ /System/Library/Filesystems/hfs.fs/hfs.util -s disk2s3
Steelhead:recover davidanderson$ /System/Library/Filesystems/hfs.fs/hfs.util -k disk2s3; echo
0F4F5893-D9E1-3512-9B2B-2AEA0DE9FDE3
Eject and reattach /dev/disk2
. If you can not do this, then
restart the Mac.
Steelhead:recover davidanderson$ diskutil eject /dev/disk2
Disk /dev/disk2 ejected
Attempt to recover any leftover free space.
Below a is first attempt. The diskutil resizevolume /dev/disk2s2 R
command fails.
Note also that diskutil resizevolume /dev/disk2s2 limits
command
reports the wrong maximum size.
Steelhead:recover davidanderson$ diskutil resizevolume /dev/disk2s2 R
Started partitioning on disk2s2 MacintoshHD
Verifying the disk
Verifying file system
Checking Journaled HFS Plus volume
Checking extents overflow file
Checking catalog file
Checking multi-linked files
Checking catalog hierarchy
Checking extended attributes file
Checking volume bitmap
Checking volume information
The volume MacintoshHD appears to be OK
File system check exit code is 0
Resizing
Error: -69742: The requested size change for the target disk or a related disk is too small;
please try a different disk or partition, or make a larger change
Steelhead:recover davidanderson$ diskutil resizevolume /dev/disk2s2 limits
For device disk2s2 MacintoshHD:
Current size: 45.0 GB (44999999488 Bytes)
Minimum size: 5.5 GB (5524459520 Bytes)
Maximum size: 45.0 GB (44999999488 Bytes)
Try again, but this time compute how large partition /dev/disk2s2
should be.
Steelhead:recover davidanderson$ sudo gpt -r show /dev/disk2
Password:
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
409640 87890624 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
88300264 1697608 3 GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
89997872 10002135
100000007 32 Sec GPT table
100000039 1 Sec GPT header
Steelhead:recover davidanderson$ expr 10002135 \* 512 / 100000000 + 450
501
Steelhead:recover davidanderson$ diskutil resizevolume /dev/disk2s2 50.1G
Started partitioning on disk2s2 MacintoshHD
Verifying the disk
Verifying file system
Checking Journaled HFS Plus volume
Checking extents overflow file
Checking catalog file
Checking multi-linked files
Checking catalog hierarchy
Checking extended attributes file
Checking volume bitmap
Checking volume information
The volume MacintoshHD appears to be OK
File system check exit code is 0
Resizing
Waiting for the disks to reappear
Finished partitioning on disk2s2 MacintoshHD
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *51.2 GB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS MacintoshHD 50.1 GB disk2s2
3: Apple_Boot recovery 869.2 MB disk2s3
Steelhead:recover davidanderson$ sudo gpt -r show /dev/disk2
Password:
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 6
40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
409640 97851560 2 GPT part - 48465300-0000-11AA-AA11-00306543ECAC
98261200 1697608 3 GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
99958808 41199
100000007 32 Sec GPT table
100000039 1 Sec GPT header
This attempt succeeded. In practice, you never recover all the free
space. Note that the new Recovery partition /dev/disk2s3
was
relocated automatically.
diskutil list
will give you false output. You will need to restart the computer before running the command. Just to let you know, I did test using the Disk Utility application to copy (clone) a HFS+ formatted partition (48465300-0000-11AA-AA11-00306543ECAC) to a new drive. The following Recovery Partition (426F6F74-0000-11AA-AA11-00306543ECAC) is also copied automatically.