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

9

Я создал образ неисправного диска с:

dd if=/dev/sde of=/mnt/image001.dd

На диске было только два раздела:

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *           1          13      102400    7  HPFS/NTFS
/dev/sde2              13       60802   488282112    7  HPFS/NTFS

Как разделить образ (image001.dd) на два или три файла (1: MBR; 2: Раздел 1; 3: Раздел 2), чтобы я мог смонтировать в нем файловые системы?

Решение, которое я нашел, которое не сработало бы для меня, - это использовать splitдля создания многих файлов по 512 КБ, а затем catобъединить их в три файла (1: 512 КБ, 2: 105 МБ, 3: остальные), но у меня нет дисковое пространство для этого.

История:
я уже скопировал весь образ на новый диск, и он загружается и в основном работает. Кажется, что ФС была повреждена на старом неисправном диске, и ddскопировала поврежденные части (как и положено), и я записал их на новый диск. Мое решение состоит в том, чтобы смонтировать FS, которую я скопировал, и скопировать только файлы (используя rsyncили что-то), так что, надеюсь, я не буду копировать плохие биты.

ОБНОВЛЕНИЕ 1 : Я пытался, dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1но mountжалуется на это NTFS signature is missing, поэтому я думаю, что я не сделал это правильно.

Джо А
источник

Ответы:

17

Вам не нужно разделять это вообще.

Используйте partedдля получения подробной информации о таблице разделов:

parted image001.dd

В parted, переключитесь на байтовые единицы с помощью команды u, затем B. После этого выполните команду print.

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

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 25165824000B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type     File system     Flags
 2      1048576B      400556031B    399507456B    primary  ext4            boot
 3      400556032B    21165506559B  20764950528B  primary  ext4
 1      21165506560B  25164775423B  3999268864B   primary  linux-swap(v1)

Вы можете использовать Startчисло в качестве смещения для петлевого монтирования:

mount -o loop,ro,offset=400556032 image001.dd /mnt/rescue

установил бы третий раздел в /mnt/rescue.

Свен
источник
И это и kpartxрешит мою проблему. Я выбрал этот ответ, потому что я думаю, что partedэто более распространенный, чем kpartx, однако, kpartxнемного проще.
Джо
16

Гораздо лучше просто использовать kpartxинструмент.

usage : kpartx [-a|-d|-l] [-v] wholedisk
    -a add partition devmappings
    -d del partition devmappings
    -l list partitions devmappings that would be added by -a
    ...

Пример:

# kpartx -l whole_disk # only listing
loop0p1 : 0 518144 /dev/loop0 2048
loop0p2 : 0 3674112 /dev/loop0 520192
# kpartx -a whole_disk 
# file -sL /dev/mapper/loop0p*
/dev/mapper/loop0p1: Linux/i386 swap file (new style), version 1 (4K pages), size 64767 pages, no label, UUID=e4990860-c87d-4850-9e8d-ecb0a0506516
/dev/mapper/loop0p2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

На данный момент я могу смонтировать /dev/mapper/loop0p2.

После размонтирования звоните kpartx -d whole_diskна уборку.

kupson
источник
1
+1 Это хорошо, никогда не слышал об этом инструменте.
Свен
Оба эти ответа SvenW ниже работают очень хорошо! Оба позволяют мне смонтировать раздел в образе диска.
Джо