Bagaimana cara menggunakan DD untuk mengkloning partisi dari image disk?

9

Saya memiliki gambar disk, ini adalah disk image "keseluruhan", mis., Berisi banyak partisi, dan saya ingin mengkloning salah satunya (bukan yang pertama ..) ke sebuah partisi di drive eksternal dengan banyak partisi di atasnya ( Saya juga tidak mengkloningnya ke partisi pertama disk ...)

FDisk'ing gambar memberikan ini:

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

Disk 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 byte
255 kepala, 63 sektor / jalur, 235 silinder, total 3.788.800 sektor
Unit = sektor 1 * 512 = 512 byte
Ukuran sektor (logis / fisik): 512 byte / 512 byte
Ukuran I / O (minimum / optimal): 512 byte / 512 byte
Pengidentifikasi disk: 0x00014d34

                         Perangkat Booting Mulai Akhir Blok Sistem Id
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

dan perangkat blok terlihat seperti ini:

# fdisk -l / dev / sdc

Disk / dev / sdc: 8014 MB, 8014266368 byte
247 kepala, 62 sektor / jalur, 1022 silinder, total sektor 15652864
Unit = sektor 1 * 512 = 512 byte
Ukuran sektor (logis / fisik): 512 byte / 512 byte
Ukuran I / O (minimum / optimal): 512 byte / 512 byte
Pengidentifikasi disk: 0x00000000

   Perangkat Booting Mulai Akhir Blok Sistem Id
/ dev / sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/ dev / sdc2 131072 15652863 7760896 83 Linux
#

Saya ingin partisi kedua dari gambar untuk menggantikan partisi kedua dari perangkat blok. Jangan khawatir tentang trailing free space yang rusak, saya akan menggunakan GParted untuk membersihkannya, dan saya tetap membutuhkannya untuk hal lain.

JamesTheAwesome Bung
sumber
tentukan dengan tepat di mana Anda ingin partisi Anda dikloning dan di mana file gambar Anda berada!
fromnaboo

Jawaban:

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

Jika --partscantidak berhasil, Anda juga dapat menggunakan salah satu dari:

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

atau solusi pemetaan partisi serupa.

Anda mungkin harus memasangnya terlebih dahulu hanya untuk melihat apakah itu hal yang benar atau apa.

Tentu saja Anda juga dapat membaca output fdisk dan memberikan ddyang skip=131072atau apa pun secara langsung, yaitu membuatnya melewatkan banyak blok masukan sehingga mulai membaca di mana partisi terletak; tetapi lebih baik untuk melihat partisi aktual dengan perangkat loop.

frostschutz
sumber
losetupPerintah Anda tidak berfungsi - katanya opsi tidak dikenal --find. Saya menghapusnya, katanya tidak mengenali --show. Melepaskannya menyebabkannya mengeluh --partscan, pada titik mana saya menyadari bahwa perintah tidak akan melakukan apa pun untuk saya dalam waktu dekat. Saya memutuskan untuk mencoba yang lain, tetapi keduanya partxdan kpartxkembali "perintah tidak ditemukan".
JamesTheAwesomeDude
Saya hanya akan lari dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880, tetapi itu kembali dd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument.
JamesTheAwesomeDude
1
skiptergantung pada bs, jadi jika Anda menggunakan bs=1M(atau memiliki alias yang melakukan ini), itu akan menjelaskan mengapa itu tidak berhasil. coba dengan bs=512. Juga, mengapa 122880 ketika fdisk mengatakan 131072? Kerugian saya juga losetup from util-linux 2.22.2. sama untuk partx. kpartx berasal dari multipath-tools (device mapper bekas).
frostschutz
kpartxadalah untuk LVM. partprobejuga akan melakukan pekerjaan itu, dari paket yang dibelah.
psusi
@ frostschutz Itu adalah 12280 byte dari awal file gambar.
JamesTheAwesomeDude
0

Sesuatu seperti ini seharusnya bekerja:

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

if = mengatur gambar yang ingin Anda tiru

of = mengatur partisi target tempat Anda ingin mengkloning gambar

fromnaboo
sumber
1
Saya mendapatkan kesalahan yang diharapkan:dd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory
JamesTheAwesomeDude
apakah Anda mengganti /path/to/2013-02-09-wheezy-raspbian.img2 dengan jalur asli Anda ke file gambar? : |
fromnaboo
1
**** facepalm **** Ya, saya hanya menambahkan 2 sampai akhir, seperti yang Anda katakan .
JamesTheAwesomeDude
ini tidak berfungsi, dd tidak melihat partisi pada file gambar seperti itu
Michal Artazov
0
  1. Pasang gambar sebagai perangkat loopback: losetup -fP yourImage.img
  2. Anda sekarang dapat mengakses setiap partisi gambar secara langsung. Jika Anda harus menggunakan dd, Anda bisa melakukannya dd if=/dev/loop0p1 of=image.img, tetapi saya pikir Anda ingin yang catlebih baik. Dalam shell root, cukup lakukan cat /dev/loop0p1 > image.img. Kedua contoh mengasumsikan bahwa Anda menginginkan partisi pertama, dan perangkat loopback yang ditugaskan kepada Anda/dev/loop0
  3. Setelah selesai dengan perangkat loopback, Anda dapat melepaskannya dengan losetup -d /dev/loop0. Sekali lagi, ini mengasumsikan bahwa itu /dev/loop0adalah perangkat loopback Anda.
John Leuenhagen
sumber
0

Anda bisa melakukannya:

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
Frank Breitling
sumber
0

Anda dapat menyalin hanya partisi kedua ke gambar terpisah dengan ini

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

dan setelah itu Anda dapat menyalinnya di tempat partisi pada disk

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

atau Anda bahkan dapat melakukannya dalam satu perintah

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

Pastikan bahwa Anda melepas / dev / sdc2 sebelum Anda menulisnya.

Michal Artazov
sumber