Làm thế nào để sử dụng DD để sao chép một phân vùng ra khỏi một hình ảnh đĩa?


9

Tôi có một hình ảnh đĩa, đó là hình ảnh đĩa "toàn bộ", ví dụ, chứa nhiều phân vùng và tôi muốn sao chép chỉ một trong số chúng (không phải cái đầu tiên ..) vào một phân vùng trên ổ đĩa ngoài có nhiều phân vùng trên đó ( Tôi cũng không sao chép nó vào phân vùng đầu tiên của đĩa ...)

Hình ảnh của FDisk mang lại điều này:

# fdisk -l 2013 / 02-09-wheezy-raspbian.img 

Đĩa 2013 / 02-09-wheezy-raspbian.img: 1939 MB, 1939865600 byte
255 đầu, 63 ngành / đường đua, 235 xi lanh, tổng số 3788800 ngành
Đơn vị = các lĩnh vực 1 * 512 = 512 byte
Kích thước ngành (logic / vật lý): 512 byte / 512 byte
Kích thước I / O (tối thiểu / tối ưu): 512 byte / 512 byte
Định danh đĩa: 0x00014d34

                         Khởi động thiết bị Hệ thống Id khối khởi động
2013 / 02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013 / 02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

và thiết bị khối trông như thế này:

# fdisk -l / dev / sdc

Đĩa / dev / sdc: 8014 MB, 8014266368 byte
247 đầu, 62 ngành / đường đua, 1022 xi lanh, tổng số 15652864 ngành
Đơn vị = các lĩnh vực 1 * 512 = 512 byte
Kích thước ngành (logic / vật lý): 512 byte / 512 byte
Kích thước I / O (tối thiểu / tối ưu): 512 byte / 512 byte
Định danh đĩa: 0x00000000

   Khởi động thiết bị Hệ thống Id khối khởi động
/ dev / sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/ dev / sdc2 131072 15652863 7760896 83 Linux
#

Tôi muốn phân vùng thứ hai của hình ảnh thay thế phân vùng thứ hai của thiết bị khối. Đừng lo lắng về không gian trống bị hỏng, tôi sẽ sử dụng GParted để dọn sạch nó và dù sao tôi cũng cần nó cho thứ khác.


xác định chính xác nơi bạn muốn phân vùng của bạn được nhân bản và nơi tập tin hình ảnh của bạn!
từnaboo

Câu trả lời:


8
# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

Nếu --partscankhông hoạt động, bạn cũng có thể sử dụng một trong:

# partx -a /dev/loop7
# kpartx /dev/loop7

hoặc các giải pháp ánh xạ phân vùng tương tự.

Bạn có lẽ nên gắn nó đầu tiên chỉ để xem đó là điều đúng hay không.

Tất nhiên bạn cũng có thể đọc ra fdisk và cung cấp cho ddcác skip=131072hoặc bất cứ điều gì trực tiếp, tức là làm cho nó bỏ qua mà nhiều khối đầu vào nên nó bắt đầu đọc tại nơi phân vùng nằm; nhưng sẽ tốt hơn khi thấy các phân vùng thực tế với một thiết bị lặp.


losetupLệnh của bạn không hoạt động - nó cho biết tùy chọn không được nhận dạng --find. Tôi loại bỏ nó, nó nói nó không nhận ra --show. Việc tắt nó khiến nó phàn nàn --partscan, lúc đó tôi nhận ra rằng lệnh sẽ không làm gì cho tôi bất cứ lúc nào sớm. Tôi quyết định thử những cái khác, nhưng cả hai partxkpartxtrả về "lệnh không tìm thấy".
JamesTheAwgieDude

Tôi sẽ chỉ chạy dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880, nhưng điều đó trở lại dd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument.
JamesTheAwgieDude

1
skipphụ thuộc vào bs, vì vậy nếu bạn đã sử dụng bs=1M(hoặc có một bí danh thực hiện điều này), điều đó sẽ giải thích tại sao nó không hoạt động. thử với bs=512. Ngoài ra, tại sao 122880 khi fdisk nói 131072? Ngoài ra losetup của tôi là losetup from util-linux 2.22.2. tương tự cho partx. kpartx là từ đa công cụ (trình ánh xạ thiết bị đã sử dụng).
frostschutz

kpartxdành cho LVM. partprobecũng sẽ thực hiện công việc, từ gói chia tay.
psusi

@frostschutz Đó là 12280 byte từ khi bắt đầu tập tin hình ảnh.
JamesTheAwgieDude

0

Một cái gì đó như thế này sẽ hoạt động:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

if = đặt hình ảnh bạn muốn sao chép

of = đặt phân vùng đích nơi bạn muốn sao chép hình ảnh


1
Tôi đã nhận được lỗi mong đợi:dd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory
JamesTheAwgieDude

bạn đã thay thế /path/to/2013-02-09-wheezy-raspbian.img2 bằng đường dẫn thực sự của bạn đến tệp hình ảnh? : |
từnaboo

1
**** facepalm **** Vâng, tôi chỉ nối 2 đến cuối, như bạn đã nói .
JamesTheAwgieDude

điều này không hoạt động, dd không thấy các phân vùng trên một tệp hình ảnh như thế
Michal Artazov

0
  1. Gắn hình ảnh như một thiết bị loopback: losetup -fP yourImage.img
  2. Bây giờ bạn có thể truy cập từng phân vùng của hình ảnh trực tiếp. Nếu bạn phải sử dụng dd, bạn có thể làm dd if=/dev/loop0p1 of=image.img, nhưng tôi nghĩ rằng bạn muốn cattốt hơn. Trong một vỏ gốc, chỉ cần làm cat /dev/loop0p1 > image.img. Cả hai ví dụ đều cho rằng bạn muốn phân vùng đầu tiên và thiết bị loopback mà bạn được chỉ định là/dev/loop0
  3. Khi bạn đã hoàn thành với thiết bị loopback, bạn có thể tháo rời nó với losetup -d /dev/loop0. Một lần nữa, điều này giả định rằng đó /dev/loop0là thiết bị loopback của bạn.

0

Bạn có thể làm:

sudo partx --add -v 2013-02-09-wheezy-raspbian.img 
# time sudo dd if=/dev/loop0p1 |pv -s 80M |sudo dd of=/dev/sdc1
time sudo dd if=/dev/loop0p2 |pv -s 4G |sudo dd of=/dev/sdc2
sudo partx --delete -v /dev/loop0

0

Bạn chỉ có thể sao chép phân vùng thứ hai sang một hình ảnh riêng biệt với điều này

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

và sau đó bạn có thể sao chép nó vào vị trí của phân vùng trên đĩa

dd if=second.img of=/dev/sdc2 bs=512

hoặc thậm chí bạn có thể làm điều đó trong một lệnh

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

Chỉ cần đảm bảo rằng bạn ngắt kết nối / dev / sdc2 trước khi bạn viết thư cho nó.

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.