Как я могу изменить размер изображения, созданного с помощью dd, который содержит блочную копию моего Mac-диска?

0

Я создал копию работающего (но получающего несколько ошибок диска) 1TB вращающегося диска, используя dd. Я могу смонтировать образ ( hdiutil attachили просто дважды щелкнуть в Finder) без проблем и увидеть файлы на основном томе HFS +. Тем не менее, я не вижу других разделов, которые я знаю, там (EFI, Recovery HD). Я знаю, что они есть, потому что, если я восстановлю образ непосредственно на физический диск, они будут там.

Однако я хотел бы восстановить этот образ на 480 ГБ SSD (меньше), поэтому мне нужно уменьшить основной / большой раздел HFS + образа. В разделе достаточно свободного места (700 ГБ), так что это должно быть выполнимо.

Я попытался преобразовать изображение в изображение для чтения-записи ( hdiutil convert -format UDRW) или разреженный пакет ( hdiutil convert -format UDSB- приводит к файлу 200 ГБ).

Изображение для чтения и записи не изменится:
hdiutil: resize request is below minimum size allowed.

Работа hdiutil compactс редким пучком не уменьшит его:
Reclaimed 0 bytes out of 796.9 GB possible.

Как правильно изменить размер основного / большого раздела HFS + в полном образе диска?

Нейт Пинчот
источник

Ответы:

1

По моему мнению, это может быть возможно, но это не эффективно, потому что для этого вам нужно будет извлечь и уменьшить одну часть исходного изображения dd, а затем собрать все три части. Кроме того, вы должны манипулировать таблицей разделов gpt внутри заново собранного необработанного образа dd, редактируя его в шестнадцатеричном виде. Тогда вы должны ddподдержать изображение.

Вместо этого сделайте следующее, что значительно меньше времени и, вероятно, менее подвержено ошибкам:

  • Разделите новый диск на 3 раздела: EFI, основной системный том и раздел Recovery HD
  • Поскольку EFI и раздел восстановления имеют фиксированные размеры и определенные стартовые блоки, вы можете просто ddвставить EFI и Recovery HD в вашем dd raw образе в соответствующие разделы вашего нового SSD
  • Чтобы скопировать содержимое старого основного тома, подключите необработанный образ dd и rsyncсодержимое к новому основному тому.

Здесь я предполагаю, что у вас есть внешний диск с полной OS X (El Capitan) для подготовки SSD. Все имена / идентификаторы или размеры устройств являются лишь примерами и могут отличаться от вашей реальной среды / результатов.

Подготовка вашего нового SSD:

  • Откройте Дисковую утилиту и сотрите новый диск (Имя: SSD / Формат: OS X Extended (В журнале) / Схема: таблица разделов GUID)
  • Откройте терминал и войдите diskutil list. Результат должен быть (размеры могут немного отличаться от ваших):

    /dev/disk0 (internal, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *480.0 GB   disk0
       1:                        EFI EFI                     209.7 MB   disk0s1
       2:                  Apple_HFS SSD                     479.6 GB   disk0s2
    /dev/disk1...
    
  • В Терминал войти sudo gpt -r show disk0. Результат должен быть (размеры могут немного отличаться от ваших):

          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  936755120      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
      937164760     262151         
      937426911         32         Sec GPT table
      937426943          1         Sec GPT header
    
  • Теперь размонтируйте disk0 и удалите второй раздел:

    diskutil umountDisk disk0
    sudo gpt remove -i 2 disk0
    
  • Добавьте раздел восстановления. Раздел восстановления всегда имеет размер 1269536 блоков и начинается с общего размера диска в блоках - 1269576 блоков (в моем примере это: 937426944 - 1269576 = 936157368)

    sudo gpt add -i 3 -b 936157368 -s 1269536 -t 426F6F74-0000-11AA-AA11-00306543ECAC disk0
    
  • Введите еще sudo gpt -r show disk0раз, чтобы показать новый раздел:

          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  935747728         
      936157368    1269536      3  GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
      937426904          7         
      937426911         32         Sec GPT table
      937426943          1         Sec GPT header
    
  • В пустое пространство между разделами i = 1 и i = 3 добавьте новый раздел. Стартовый блок и размер определяются данными, указанными выше:

    sudo gpt add -i 2 -b 409640 -s 935747728 -t 48465300-0000-11AA-AA11-00306543ECAC disk0
    
  • Размонтируйте disk0 и отформатируйте новый том:

    diskutil umountDisk disk0
    sudo newfs_hfs -J -v "SSD" /dev/disk0s2
    

Восстановление ваших данных:

  • Смонтируйте ваш необработанный образ диска, дважды щелкнув по нему.
  • Введите diskutil list. Вы должны увидеть новую запись, похожую на эту:

    /dev/disk0 (internal, physical):
    ...
    /dev/disk3 (disk image):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        +1.0 TB     disk3
       1:                        EFI EFI                     209.7 MB   disk3s1
       2:                  Apple_HFS Macintosh HD            1.0 TB     disk3s2
       3:                 Apple_Boot Recovery HD             650.0 MB   disk3s3
    
  • dd EFI и Recovery HD с образа на SSD:

    sudo dd if=/dev/disk3s1 of=/dev/disk0s1 bs=4096
    diskutil umountDisk disk0
    sudo dd if=/dev/disk3s3 of=/dev/disk0s3 bs=4096
    
  • Смонтируем основной том SSD:

    diskutil mount disk0s2
    
  • rsync содержимое основного тома образа диска (который должен быть виден на вашем рабочем столе в отличие от разделов EFI / Recovery HD) с основным томом SSD:

    sudo rsync -a /Volumes/Volume_name_of_Diskimage/ /Volumes/SSD
    

Это очень простой пример команды rsync. Вы можете уточнить команду rsync (опции / исключения) в соответствии с тем или иным связанным сценарием.


Пожалуйста, проверьте все имена устройств в различных командах, содержащих ddили gptтщательно, или вы удалите или перезапишите важные разделы / данные нежелательно.

klanomath
источник
Я ценю все мысли, которые вошли в этот пост. В конце мы сделали блочную копию (с dd) на хорошо работающий вращающийся диск объемом 1 ТБ и изменили его размер.
Нейт Пинчот,
Круто, сработало для меня. Я следовал инструкциям, чтобы скопировать только раздел восстановления с одного жесткого диска на пустой. Я не восстановил данные, просто добавил раздел восстановления. Расчеты по магическим числам немного страшны (проверьте числа), но, к моему удивлению, это действительно сработало! Кроме того, когда вы переделываете раздел восстановления, UUID важен, вам нужно использовать тот же, который есть в ответе.