Posso usare dd per clonare una scheda SD più grande su una scheda SD più piccola se le partizioni effettive si adattano?


9

Ho una scheda SD da 16 GB che ha alcune partizioni (in realtà è la scheda per un Raspberry Pi). Ho diverse altre schede da 4 GB a cui voglio clonare la scheda principale. Le 3 partizioni sulla carta principale sono:

  • Partizione di avvio raspa, FAT, 60 MB
  • Partizione Linux, ext2, 1 GB
  • Partizione "archiviazione" aggiuntiva, FAT, 1 GB

Se uso ddper creare un'immagine della carta tramite:

dd if=/dev/sdb of=~/sd-card.bin

quindi il .bin risultante ha una dimensione di 16 GB. Esiste un modo per utilizzare ddper copiare solo ciò che viene effettivamente utilizzato, ad esempio <4 GB in modo che io possa farlo ddsu una nuova scheda da 4 GB? O c'è una soluzione migliore che dovrei usare?


Ho finito per creare i contenuti esatti su una nuova scheda da 4 GB e clonarli insieme dda una quantità di altre carte. Tuttavia, vorrei sapere se è possibile risolvere il problema iniziale.

Risposte:


9

Presumo che tu stia usando un PC Linux o Mac per eseguire la copia, non il raspberry pi stesso. Probabilmente dovrai aggiungere una dimensione di blocco.

Ho visto uno e quattro megabyte utilizzati per i dischi Raspberry pi specificando bs = 1M o bs = 4M. Penso che la dimensione del blocco sia più importante quando si scrive il disco poiché i trasferimenti di grandi dimensioni sono più veloci di quelli più piccoli. Questo non imposta la dimensione del blocco per il disco, ma influenza solo la dimensione dei trasferimenti che usa dd. Uno dei motivi per impostare una dimensione di blocco grande è la necessità di cancellare il flash prima di scriverlo. Questo viene fatto automaticamente ma più velocemente per i trasferimenti che sono più grandi della dimensione minima di cancellazione.

Puoi limitare la quantità totale di dati copiati da dd usando "count". "count" è in unità di blocchi. Se la fine dell'ultima partizione sul disco di origine è precedente alla dimensione della destinazione, puoi fare ciò che desideri.

Qualcosa del genere dd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000creerà un'immagine di dimensioni pari a 4000 MB.

Vedi http://en.wikipedia.org/wiki/Dd_(Unix) e http://elinux.org/RPi_Easy_SD_Card_Setup per ulteriori informazioni. Non sei sicuro di come trovare la fine dell'ultima partizione o la dimensione totale delle carte. Tuttavia, se hai formattato i dischi, probabilmente saprai come farlo.


Grazie per le informazioni. Non ero a conoscenza dell'opzione di conteggio. Ci proverò.

@charlie sarebbe affascinante se puoi provarlo con e senza l'opzione di conteggio e riferire indietro. assicurati di controllare come viene riportata la dimensione del disco e se puoi aggiungere file ad esso e le dimensioni cambiano. quindi quando dd fallisce in relazione a dischi di dimensioni diverse, si ottiene quel tipo di problemi. Ecco un esempio in cui ho sbagliato con dd con due unità di dimensioni diverse. superuser.com/questions/538583/difficulty-resizing-a-partition Alla fine non ho usato dd per fare il clone.
barlop

3

Espandendo la risposta di William , si potrebbe calcolare la fine dell'ultima partizione usando fdiske una calcolatrice:

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

Spazio totale utilizzato in byte = settore finale dell'ultima dimensione del settore X della partizione (qui 3667967 x 512).

Spazio totale utilizzato in GB = spazio totale utilizzato in byte / 1024 3 (qui 1,7749023 GB).

Di solito, non è vitale creare un'immagine ridotta fino all'ultimo utile bit di dati, quindi nell'esempio sopra vorrei creare un'immagine di 2 GB usando il metodo descritto da William nella stessa risposta precedente :

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

Alla fine dell'immagine verrà inclusa una piccola parte della guff inutile dopo i tuoi ultimi dati utili, ma questo non è diverso in linea di principio della guff inutile che verrà sovrascritta quando riscrivi l'immagine sul tuo supporto.

Questo metodo ha funzionato per me su una dozzina di cloni. Se ci sono difetti fatali in questo metodo, non sono ancora emersi.

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.