최근에 하드 드라이브(불량 블록 FTW)를 복제해야 했습니다. 당시 저는 Clonezilla를 사용하고 있었습니다.
하지만 Clonezilla는 HFS+ 파티션 복사를 거부했기 때문에 수동으로 복사했습니다. 문제는 UUID가 동기화되지 않았다는 것입니다.
HFS+에 대한 특정 UUID를 설정하는 명령은 무엇입니까?
답변1
먼저 500M 이미지 파일을 만듭니다.
$ cd /tmp
$ fallocate -l $((1024*1024*500)) ./disk
이제 GPT를 제공합니다.
$ gdisk ./disk
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
o
새 GPT를 만드는 데 사용됩니다.
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
n
새 파티션을 만드는 데 사용됩니다. 그런 다음 Enter 키를 눌러 모든 기본값을 선택합니다.
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-1023966, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1023966, default = 1023966) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
w
변경 사항을 디스크에 기록합니다.
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 ./disk.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
이제 이를 파티션 장치로 설정하고 파일 시스템을 사용하여 첫 번째 파티션을 포맷합니다.
$ sync; lp=$(sudo losetup --show -fP ./disk)
$ sudo mkfs.vfat -n SOMEDISK "${lp}p1"
결과:
$ lsblk -o NAME,FSTYPE,LABEL,PARTUUID "$lp"
NAME FSTYPE LABEL PARTUUID
loop0
└─loop0p1 vfat SOMEDISK f509e1d4-32bc-4a7d-9d47-b8ed0f280b36
이제 그것을 바꾸겠습니다. 먼저, 블록 개발을 파괴합니다:
$ sudo losetup -d "$lp"
이제 GPT를 편집합니다.
$ gdisk ./disk
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
i
단일 파티션에 대한 확장 정보를 제공합니다. 파티션이 여러 개인 경우 다음에는 해당 파티션 번호를 입력하라는 메시지가 표시됩니다. 후속 명령도 마찬가지입니다 c
.
Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: F509E1D4-32BC-4A7D-9D47-B8ED0F280B36
First sector: 2048 (at 1024.0 KiB)
Last sector: 1023966 (at 500.0 MiB)
Partition size: 1021919 sectors (499.0 MiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'
x
x
퍼츠메뉴 입니다 .
Command (? for help): x
c
PARTUUID를 변경하는 데 사용됩니다.
Expert command (? for help): c
Using 1
Enter the partition's new unique GUID ('R' to randomize): F509E1D4-32BC-4A7D-9D47-B00B135D15C5
New GUID is F509E1D4-32BC-4A7D-9D47-B00B135D15C5
w
디스크에 변경 사항 쓰기(또는 이 경우에는 내 이미지 파일로).
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 ./disk.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
$ sync; lp=$(sudo losetup --show -fP ./disk)
결과:
$ lsblk -o NAME,FSTYPE,LABEL,PARTUUID "$lp"
NAME FSTYPE LABEL PARTUUID
loop0
└─loop0p1 vfat SOMEDISK f509e1d4-32bc-4a7d-9d47-b00b135d15c5
답변2
gdisk는 파티션 UUID(GPT)만 변경할 수 있습니다. HFS+ 볼륨의 볼륨 ID는 다릅니다. FinderInfo의 64비트 VSDB 볼륨 ID에서 가져옵니다. macOS는 이를 버전 3 UUID로 변환하여 볼륨 UUID를 나타냅니다. FinderInfo는 HFS+의 볼륨 헤더 또는 HFS의 홈 디렉터리 블록에 있습니다. 이 bless --info
명령을 사용하여 FinderInfo를 볼 수 있습니다. 를 사용하는 것 외에 FinderInfo를 편집하는 방법을 모르겠습니다 dd
.
bless --info /Volumes/Apps | grep id
64-bit VSDB volume id: 0xB91C7A94DEF081CF
diskutil info /Volumes/Apps | grep "Volume UUID"
Volume UUID: A88791EF-94F3-3A71-95C4-4ECB25072EEA
vsdbtouuid () {
local theuuid=""
theuuid=$(printf "b3e20f39f29211d697a400306543ecac%s" "$1" | xxd -p -r | md5 | tr "a-f" "A-F" )
printf "%s" "${theuuid:0:8}-${theuuid:8:4}-3${theuuid:13:3}-$(printf "%X" $(((0x${theuuid:16:1} & 3) | 8)))${theuuid:17:3}-${theuuid:20:12}"
}
vsdbtouuid B91C7A94DEF081CF
A88791EF-94F3-3A71-95C4-4ECB25072EEA