ฉันจะแบ่งภาพไดรฟ์ที่สร้างด้วย '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: Partition 1; 3: Partition 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 หลังจากที่ออกคำสั่งBprint

คุณจะได้รับผลลัพธ์ที่มีลักษณะเช่นนี้ (ผลลัพธ์มาจากระบบจริงไม่ใช่ภาพ):

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ต่อเชื่อมเพื่อล้างข้อมูล


1
+1 นี่เป็นสิ่งที่ดีไม่เคยได้ยินเกี่ยวกับเครื่องมือนี้
สเวน

ทั้งคำตอบของ SvenW ด้านล่างนี้ใช้ได้ดีมาก! ทั้งสองให้ฉันติดพาร์ติชันภายในรูปไดรฟ์
โจ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.