Come usare DD per clonare una partizione da un'immagine del disco?


9

Ho un'immagine del disco, è un'immagine del disco "intera", ad esempio, contiene più partizioni e voglio clonarne solo una (non la prima ..) su una partizione su un'unità esterna con più partizioni su di essa ( Inoltre non lo sto clonando sulla prima partizione del disco ...)

Scorrendo l'immagine si ottiene questo:

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

Disco 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 byte
255 teste, 63 settori / binario, 235 cilindri, totale 3788800 settori
Unità = settori di 1 * 512 = 512 byte
Dimensione del settore (logico / fisico): 512 byte / 512 byte
Dimensione I / O (minimo / ottimale): 512 byte / 512 byte
Identificatore del disco: 0x00014d34

                         Sistema ID blocchi inizio avvio dispositivo
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

e il dispositivo a blocchi si presenta così:

# fdisk -l / dev / sdc

Disco / dev / sdc: 8014 MB, 8014266368 byte
247 teste, 62 settori / binario, 1022 cilindri, totale 15652864 settori
Unità = settori di 1 * 512 = 512 byte
Dimensione del settore (logico / fisico): 512 byte / 512 byte
Dimensione I / O (minimo / ottimale): 512 byte / 512 byte
Identificatore del disco: 0x00000000

   Sistema ID blocchi inizio avvio dispositivo
/ dev / sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/ dev / sdc2 131072 15652863 7760896 83 Linux
#

Voglio che la seconda partizione dell'immagine sostituisca la seconda partizione del dispositivo a blocchi. Non preoccuparti per lo spazio libero danneggiato in coda, userò GParted per ripulirlo e ne ho bisogno per qualcos'altro.


specifica esattamente dove vuoi che la tua partizione venga clonata e dove siano i tuoi file immagine!
dal

Risposte:


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

Se --partscannon funziona, puoi anche usare uno di:

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

o simili soluzioni di mappatura delle partizioni.

Probabilmente dovresti montarlo prima solo per vedere se è la cosa giusta o cosa.

Naturalmente si può anche leggere l'output di fdisk e dare ddla skip=131072o qualsiasi altra cosa direttamente, cioè fanno saltare quel molti blocchi di ingresso in modo che inizia la lettura in cui si trova la partizione; ma è più bello vedere partizioni effettive con un dispositivo loop.


Il tuo losetupcomando non ha funzionato - ha detto un'opzione non riconosciuta --find. L'ho rimosso, ha detto che non lo riconosce --show. Decollare lo ha fatto lamentare --partscan, a quel punto ho capito che il comando non avrebbe fatto nulla per me in qualunque momento presto. Ho deciso di provare gli altri, ma entrambi partxe kpartxrestituire "comando non trovato".
JamesTheAwesomeDude,

Vorrei solo correre dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880, ma questo ritorna dd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument.
JamesTheAwesomeDude,

1
skipdipende da bs, quindi se hai usato bs=1M(o hai un alias che lo fa), questo spiegherebbe perché non funziona. prova con bs=512. Inoltre, perché 122880 quando fdisk dice 131072? Anche il mio losetup è losetup from util-linux 2.22.2. lo stesso per partx. kpartx proviene da multipath-tools (mappatore di dispositivo usato).
frostschutz,

kpartxè per LVM. partprobefarà anche il lavoro, dal pacchetto parted.
psusi

@frostschutz Quello era 12280 byte dall'inizio del file immagine.
JamesTheAwesomeDude,

0

Qualcosa del genere dovrebbe funzionare:

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

if = imposta l'immagine che vuoi clonare

of = imposta la partizione di destinazione in cui si desidera clonare l'immagine


1
Ho ricevuto l'errore previsto:dd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory
JamesTheAwesomeDude

hai sostituito /path/to/2013-02-09-wheezy-raspbian.img2 con il tuo vero percorso al file di immagine? : |
daabu il

1
**** facepalm **** Sì, ho appena aggiunto il 2 alla fine, come hai detto tu .
JamesTheAwesomeDude,

questo non funziona, dd non vede le partizioni in un file di immagine del genere
Michal Artazov,

0
  1. Montare l'immagine come dispositivo di loopback: losetup -fP yourImage.img
  2. Ora puoi accedere direttamente a ciascuna partizione dell'immagine. Se devi usare dd, puoi farlo dd if=/dev/loop0p1 of=image.img, ma penso che ti piacerebbe di catpiù. In una shell di root, semplicemente cat /dev/loop0p1 > image.img. Entrambi gli esempi presuppongono che tu voglia la prima partizione e che il dispositivo di loopback che ti è stato assegnato fosse/dev/loop0
  3. Una volta terminato con il dispositivo di loopback, è possibile staccarlo con losetup -d /dev/loop0. Ancora una volta, questo presuppone che /dev/loop0sia il dispositivo di loopback.

0

Potresti fare:

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

È possibile copiare solo la seconda partizione in un'immagine separata con questo

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

e successivamente puoi copiarlo al posto della partizione sul disco

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

o puoi anche farlo in un solo comando

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

Assicurati di aver smontato / dev / sdc2 prima di scrivergli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.