Bagaimana saya bisa membagi gambar drive yang dibuat dengan 'dd' menjadi file terpisah untuk setiap partisi?

9

Saya membuat gambar drive yang gagal dengan:

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

Drive hanya memiliki dua partisi:

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

Bagaimana saya bisa membagi gambar (image001.dd) menjadi dua atau tiga file (1: MBR; 2: Partisi 1; 3: Partisi 2) sehingga saya bisa memasang sistem file di dalamnya?

Solusi yang saya temukan yang tidak akan berfungsi bagi saya adalah menggunakan splituntuk membuat banyak file 512K, kemudian catmereka kembali bersama menjadi tiga file (1: 512K, 2: 105M, 3: sisanya), tetapi saya tidak punya ruang disk untuk itu.

Sejarah:
Saya telah menyalin seluruh gambar ke drive baru, dan boot dan sebagian besar berfungsi. Tampaknya FS rusak pada drive lama yang gagal, dan ddmenyalin bagian yang rusak (sebagaimana mestinya), dan saya menulisnya ke drive baru. Solusi saya adalah me-mount FS yang saya salin dan salin hanya file (menggunakan rsyncatau sesuatu) sehingga mudah - mudahan saya tidak akan menyalin bit yang buruk.

UPDATE 1 : Saya sudah mencoba dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1tetapi mountmengeluh itu NTFS signature is missing, jadi saya pikir saya tidak melakukannya dengan benar.

Joe A
sumber

Jawaban:

17

Anda tidak perlu membaginya sama sekali.

Gunakan parteduntuk mendapatkan detail tentang tabel partisi:

parted image001.dd

Di parted, beralih ke unit byte dengan perintah u, lalu B. Setelah itu, keluarkan perintahnya print.

Anda akan mendapatkan output yang terlihat seperti ini (output berasal dari sistem yang sebenarnya, bukan gambar):

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)

Anda dapat menggunakan Startnomor tersebut sebagai offset untuk pemasangan loopback:

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

akan me-mount partisi ketiga di /mnt/rescue.

Sven
sumber
Baik ini dan kpartxmenyelesaikan masalah saya. Saya memilih jawaban ini karena saya membayangkan itu partedlebih umum daripada kpartx, namun kpartxsedikit lebih mudah.
Joe A
16

Jauh lebih baik menggunakan kpartxalat.

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
    ...

Contoh:

# 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)

Pada titik ini saya bisa me-mount /dev/mapper/loop0p2.

Setelah melepas panggilan kpartx -d whole_diskuntuk membersihkan.

kupson
sumber
1
+1 Ini bagus, tidak pernah mendengar alat itu.
Sven
Kedua ini jawaban SvenW di bawah ini bekerja dengan sangat baik! Keduanya membiarkan saya memasang partisi di dalam image drive.
Joe A