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.