Mac 드라이브의 블록 단위 사본이 포함 된 dd를 사용하여 생성 된 이미지의 크기를 조정하려면 어떻게해야합니까?


0

을 사용하여 작동하는 1TB 회전 디스크 드라이브의 사본을 만들었지 만 디스크 오류가 약간 발생합니다 dd. hdiutil attach아무 문제없이 이미지를 마운트 하거나 Finder에서 두 번 클릭하면 기본 HFS + 볼륨의 파일을 볼 수 있습니다. 그러나 내가 알고있는 다른 파티션 (EFI, Recovery HD)은 보이지 않습니다. 이미지가 실제 드라이브로 직접 복원되면 이미지가 있기 때문에 이것이 있다는 것을 알고 있습니다.

그러나이 이미지를 480GB SSD (더 작은)로 복원하고 싶습니다. 따라서 이미지의 주 / 대형 HFS + 파티션을 축소해야합니다. 파티션 (700GB)에 충분한 여유 공간이 있으므로 이것이 가능해야합니다.

이미지를 읽기-쓰기 이미지 ( hdiutil convert -format UDRW) 또는 희소 번들 ( hdiutil convert -format UDSB-200GB 파일 로 변환)로 변환하려고했습니다 .

읽기-쓰기 이미지는 크기가 조정되지 않습니다 :
hdiutil: resize request is below minimum size allowed.

hdiutil compact스파 스 번들에서 실행 해도 축소되지 않습니다.
Reclaimed 0 bytes out of 796.9 GB possible.

전체 디스크 이미지에서 주 / 대형 HFS + 파티션의 크기를 조정하는 올바른 방법은 무엇입니까?

답변:


1

제 생각에는 이것이 가능할 수도 있지만 이것을 달성하기 위해서는 효과적이지 않습니다. 왜냐하면 dd raw 이미지의 한 부분을 추출하고 축소 한 다음 세 부분을 모두 다시 조립해야하기 때문입니다. 또한 16 진 편집하여 재 조립 된 원시 dd 이미지 내에서 gpt 파티션 테이블을 조작해야합니다. 그런 다음 dd이미지 를 백업해야합니다.

대신 시간이 많이 걸리고 오류가 발생하기 쉬운 다음을 수행하십시오.

  • EFI, 기본 시스템 볼륨 및 Recovery HD 파티션의 3 가지 파티션으로 새 디스크를 파티션하십시오.
  • EFI 및 복구 파티션의 크기는 고정되어 있고 시작 블록이 정의되어 있기 때문에 dddd raw 이미지의 EFI 및 복구 HD를 새로운 SSD의 각 파티션에 간단히 추가 할 수 있습니다.
  • 이전 주 볼륨의 내용을 복사하려면 dd raw 이미지와 rsync내용을 새 주 볼륨에 마운트하십시오 .

여기에서는 SSD를 준비하기 위해 전체 OS X (El Capitan)가있는 외장 디스크가 있다고 가정합니다. 모든 장치 이름 / 식별자 또는 크기는 단지 예일 뿐이며 실제 환경 / 결과와 다를 수 있습니다.

새 SSD 준비 :

  • 디스크 유틸리티를 열고 새 디스크를 지 웁니다 (이름 : SSD / 포맷 : OS X 확장 (저널링) / 스키마 : 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
    
  • 이미지에서 SSD로 EFI 및 복구 HD를 추가하십시오.

    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
    
  • 디스크 이미지의 메인 볼륨 (EFI / Recovery HD 파티션과 달리 데스크탑에 표시)의 메인 볼륨의 내용을 메인 SSD 볼륨에 동기화합니다.

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

이것은 매우 기본적인 rsync 명령 예입니다. 당신은에 따라 rsync를 명령 (옵션 / 제외) 검색 할 수 있습니다 또는 링크 된 스크립트를.


포함 dd또는 전체를 포함하는 다양한 명령에서 모든 장치 이름을 확인하십시오. gpt그렇지 않으면 중요한 파티션 / 데이터를 원하지 않게 삭제하거나 덮어 씁니다.


이 게시물에 들어간 모든 생각에 감사드립니다. 결국 우리는 dd잘 알려진 1TB 회전 디스크에 블록 복사 ( )를 수행하고 크기를 조정했습니다.
Nate Pinchot

대단 했어 지시 사항에 따라 복구 파티션 만 하나의 하드 드라이브에서 빈 하드 드라이브로 복사했습니다. 데이터를 복원하지 않고 복구 파티션을 추가했습니다. 마법의 숫자 계산은 약간 무섭지 만 (숫자를 확인하십시오), 놀랍게도 실제로 작동했습니다! 또한 복구 파티션을 다시 만들 때 UUID가 중요하므로 답에있는 것과 동일한 것을 사용해야합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.