Назад | Перейти на главную страницу

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

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

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: 512K, 2: 105M, 3: остальные), но у меня нет места на диске для этого.

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

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

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

Использовать 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 инструмент.

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 очистить.