Как извлечь только раздел .hfs из файла dmg

У меня есть файл dmg macOS... BaseSystem.dmg. Он сжат и содержит различные разделы hfs...

# file BaseSystem.dmg 
BaseSystem.dmg: zlib compressed data

Что я хочу сделать
Я хочу извлечь только файл раздела 4.hfs. Но я не могу.
Это возможно в Windows с помощью инструмента Boot Disk Utility, как показано здесь.

Вот что я попробовал
Если я использую dmg2img вот так...

flex@flex-ubuntu:~/Documents/MacOS$ dmg2img BaseSystem.dmg 

dmg2img v1.6.7 (c) vu1tur (to@vu1tur.eu.org)

BaseSystem.dmg --> BaseSystem.img


decompressing:
opening partition 0 ...             100.00%  ok
opening partition 1 ...             100.00%  ok
opening partition 2 ...             100.00%  ok
opening partition 3 ...             100.00%  ok
opening partition 4 ...             100.00%  ok
opening partition 5 ...             100.00%  ok
opening partition 6 ...             100.00%  ok
opening partition 7 ...             100.00%  ok

Archive successfully decompressed as BaseSystem.img

Если я попытаюсь смонтировать BaseSystem.img...

$ sudo mount -o loop -t hfsplus BaseSystem.img /mnt/macimage
mount: /mnt/macimage: wrong fs type, bad option, bad superblock on /dev/loop7, missing codepage or helper program, or other error.

То эта команда не смонтирует его. Эта команда возвращает одно устройство loopback:
# sudo losetup -P -f --show BaseSystem.img
Которое я могу смонтировать следующим образом:
# sudo mount /dev/loop8p1 /mnt/macimage/

Но что я хочу - просто извлечь файл раздела 4.hfs?!

Если я посмотрю на свойства BaseSystem.img...

# file BaseSystem.img
BaseSystem.img: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 1, 4176871 sectors, extended partition table (last)

Из терминала Ubuntu: # 7z l BaseSystem.dmg я получаю...

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_GB.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM)

Scanning the drive for archives:
1 file, 498625205 bytes (476 MiB)

Listing archive: BaseSystem.dmg

--
Path = BaseSystem.dmg
Type = Dmg
Physical Size = 498625205
Method = Copy Zero2 ZLIB CRC
Blocks = 594
----
Path = 4.hfs
Size = 2004299776
Packed Size = 498579443
Comment = disk image (Apple_HFS : 4)
Method = Copy Zero2 ZLIB CRC
--
Path = 4.hfs
Type = HFS
Physical Size = 2004299776
Method = HFS+
Cluster Size = 4096
Free Space = 678445056
Created = 2020-10-30 08:13:26
Modified = 2020-10-30 16:31:38

Как я могу извлечь только файл 4.hfs?

Когда я выполняю эту команду: # 7z x BaseSystem.dmg она извлекает весь файл dmg, чтобы получить дерево каталогов всех файлов в файле dmg. Но я хочу извлечь из dmg-файла только один файл: 4.hfs.

Если я выполню эту команду: 7z x BaseSystem.dmg 4.hfs я получаю...

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_GB.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM)

Scanning the drive for archives:
1 file, 498625205 bytes (476 MiB)

Extracting archive: BaseSystem.dmg
--            
Path = BaseSystem.dmg
Type = Dmg
Physical Size = 498625205
Method = Copy Zero2 ZLIB CRC
Blocks = 594
----
Path = 4.hfs
Size = 2004299776
Packed Size = 498579443
Comment = disk image (Apple_HFS : 4)
Method = Copy Zero2 ZLIB CRC
--
Path = 4.hfs
Type = HFS
Physical Size = 2004299776
Method = HFS+
Cluster Size = 4096
Free Space = 678445056
Created = 2020-10-30 08:13:26
Modified = 2020-10-30 16:31:38


No files to process
Everything is Ok

Files: 0
Size:       0
Compressed: 498625205

Но тогда ничего не выводится в папке, где я ожидаю появления 4.hfs.

Что я делаю не так? Может быть, это невозможно в Linux?

0
задан 4 June 2021 в 19:46

1 ответ

Я обнаружил, что dmg2img и 7z могут извлечь только раздел из dmg файла.

Используя dmg2img мы можем увидеть содержимое файла dmg:

# dmg2img -l BaseSystem.dmg 

dmg2img v1.6.7 (c) vu1tur (to@vu1tur.eu.org)

BaseSystem.dmg --> (partition list)

partition 0: Protective Master Boot Record (MBR : 0)
partition 1: GPT Header (Primary GPT Header : 1)
partition 2: GPT Partition Data (Primary GPT Table : 2)
partition 3:  (Apple_Free : 3)
partition 4: disk image (Apple_HFS : 4)
partition 5:  (Apple_Free : 5)
partition 6: GPT Partition Data (Backup GPT Table : 6)
partition 7: GPT Header (Backup GPT Header : 7)

Используя dmg2img v1.6.7

Эта команда извлекает раздел 4.hfs:

# dmg2img -p 4 -i BaseSystem.dmg -o 4.hfs

Используя 7z

В 7-Zip [64] 9.20 вы можете использовать эту команду:

7z e BaseSystem.dmg 4.hfs

В 7-Zip [64] 16. 02 вы должны использовать эту команду:

7z e -t* BaseSystem.dmg 4.hfs

Необходимо -t*, иначе в этой версии 7z он не будет извлекать только на один уровень в глубину, а вместо этого он будет извлекать все вплоть до файлов и папок.

0
ответ дан 28 July 2021 в 11:36

Другие вопросы по тегам:

Похожие вопросы: