Як я можу розділити зображення диска, створене за допомогою "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створити багато файлів 512K, потім catповернути їх у три файли (1: 512K, 2: 105M, 3: решта), але у мене немає дисковий простір для цього.

Історія:
я вже скопіював усе зображення на новий диск, і він завантажується і здебільшого працює. Здається, що FS був зіпсований на старому несправному диску і 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, трохи простіше.
Джо A

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щоб прибрати.


1
+1 Це добре, ніколи не чув про цей інструмент.
Свен

І це, і відповідь SvenW нижче працює дуже добре! Обидва дозволили мені змонтувати розділ у зображенні диска.
Джо A
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.