Làm cách nào tôi có thể chia hình ảnh ổ đĩa được tạo bằng 'dd' thành các tệp riêng biệt cho mỗi phân vùng?


9

Tôi đã tạo một hình ảnh của một ổ đĩa bị lỗi với:

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

Ổ đĩa chỉ có hai phân vùng:

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

Làm cách nào tôi có thể chia hình ảnh (image001.dd) thành hai hoặc ba tệp (1: MBR; 2: Phân vùng 1; 3: Phân vùng 2) để tôi có thể gắn kết các hệ thống tệp trong đó?

Một giải pháp tôi thấy rằng sẽ không hiệu quả với tôi là sử dụng splitđể tạo nhiều tệp 512K, sau đó catchúng quay lại thành ba tệp (1: 512K, 2: 105M, 3: phần còn lại), nhưng tôi không có không gian đĩa cho điều đó.

Lịch sử:
Tôi đã sao chép toàn bộ hình ảnh vào một ổ đĩa mới, và nó khởi động và chủ yếu hoạt động. Có vẻ như FS đã bị hỏng trên ổ đĩa cũ bị hỏng và ddsao chép các phần bị hỏng (như vậy) và tôi đã viết chúng vào ổ đĩa mới. Giải pháp của tôi là gắn kết FS mà tôi đã sao chép và chỉ sao chép các tệp (sử dụng rsynchoặc một cái gì đó) để hy vọng tôi sẽ không sao chép các bit xấu.

CẬP NHẬT 1 : Tôi đã thử dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1nhưng mountphàn nàn điều đó NTFS signature is missing, vì vậy tôi nghĩ rằng tôi đã không làm đúng.

Câu trả lời:


17

Bạn không cần phải phân chia điều này cả.

Sử dụng partedđể có được thông tin chi tiết về bảng phân vùng:

parted image001.dd

Trong parted, chuyển sang đơn vị byte bằng lệnh u, sau đó B. Sau đó, ban hành lệnh print.

Bạn sẽ nhận được một đầu ra trông như thế này (đầu ra là từ một hệ thống thực tế chứ không phải hình ảnh):

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)

Bạn có thể sử dụng Startsố này làm phần bù cho giá treo loopback:

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

sẽ gắn kết phân vùng thứ ba tại /mnt/rescue.


Cả hai điều này và kpartxgiải quyết vấn đề của tôi. Tôi đã chọn câu trả lời này bởi vì tôi tưởng tượng nó partedphổ biến hơn kpartx, tuy nhiên kpartxthì dễ hơn một chút.
Joe A

16

Sử dụng kpartxcông cụ tốt hơn nhiều .

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

Thí dụ:

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

Tại thời điểm này tôi có thể gắn kết /dev/mapper/loop0p2.

Sau khi ngắt cuộc gọi kpartx -d whole_diskđể dọn dẹp.


1
+1 Điều này thật tuyệt, chưa bao giờ nghe nói về công cụ đó.
Sven

Cả hai câu trả lời dưới đây của SvenW đều hoạt động rất tốt! Cả hai cho phép tôi gắn một phân vùng trong hình ảnh ổ đĩa.
Joe A
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.