How to create Recovery Partition for new SSD after restore via SuperDuper

Solution 1:

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
  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. 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.