SFONDO
Una scheda SD è stata configurata per un Raspberry pi. L'obiettivo è replicare esattamente la scheda SD (sistema operativo, app, dati) in modo che la replica funzioni in un rPi esattamente come la scheda SD principale originale.
AGGIORNAMENTO:Supponiamo:
- La replica verrà eseguita su un laptop configurato con un sistema operativo simile a UNIX
- La replica non deve essere eseguita da rPi
- la scheda SD di destinazione è della stessa marca/modello
- la scheda SD di origine è partizionata con diversi file system:
Domande
Quali opzioni di clonazione UNIX sono disponibili per un laptop Ubuntu HP con uno slot per schede SD e un lettore/scrittore di schede SD USB.
Fa differenza se la scheda SD USB RW è il lettore o lo scrittore?
Un obiettivo (vincolo) è evitare di acquistare hardware aggiuntivo.
Osservazioni sulla soluzione
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
Mon Jun 3 17:53:18 EDT 2019
[sudo] password per utente:
Mon Jun 3 23:42:17 EDT 2019
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date
mar 4 giu 00:33:50 EDT 2019
[sudo] password per utente:
119GiB 6:06:12 [5.56MiB/s] [================================>] 100%
mar 4 giu 06:43:05 EDT 2019
L'analisi parziale della scheda SD flash mostra un partizionamento identico:
Risposta accettata:
I sistemi Unix rendono disponibili i dispositivi di archiviazione tramite un file di dispositivo. I file del dispositivo si comportano come file ordinari in molti modi. In particolare, per eseguire una copia esatta del dispositivo di archiviazione, è sufficiente copiare il contenuto del dispositivo di origine nel dispositivo di destinazione.
Innanzitutto è necessario determinare il file del dispositivo di origine e il file del dispositivo di destinazione. Il nome dipende dalla tua variante Unix e da come è configurato, ma in pratica i file del dispositivo sono sempre sotto /dev
directory. Se hai la scheda SD montata, puoi trovare con cosa si trova il file del dispositivo
df /media/sdcard1/some/file/on/the/sdcard
Il file del dispositivo si trova nella prima colonna. Altri strumenti possono fornire le stesse informazioni, ad esempio i messaggi di registro del kernel quando si inserisce la scheda SD o il lsblk
comando su Linux.
Potrebbero esserci partizioni sulla scheda. In tal caso, copia l'intera scheda, anche se è presente una singola partizione, poiché alcune informazioni sull'avvio potrebbero trovarsi al di fuori della partizione. Ad esempio, se df
mostra /dev/sdb1
su Linux, copia /dev/sdb
e non solo /dev/sdb1
.
Se estrai la scheda SD e la reinserisci, di solito avrà lo stesso nome file del dispositivo di prima, ma questo non è garantito.
Prima di copiare, assicurati che:
- Il dispositivo sorgente non è montato o è montato solo in sola lettura.
- Il dispositivo di destinazione non è affatto montato.
- Il dispositivo di destinazione è grande almeno quanto l'origine. Su Linux,
lsblk
visualizza le dimensioni del dispositivo. - Hai il dispositivo di destinazione corretto. Nota che il comando seguente sovrascriverà il suo contenuto senza chiedere conferma!
Supponi di aver identificato che il dispositivo di origine è /dev/sdb
e il dispositivo di destinazione è /dev/sdc
. Per copiare il contenuto, esegui il seguente comando come root:
cat /dev/sdb >/dev/sdc
Se usi sudo, il reindirizzamento >
deve essere eseguito come root, quindi devi scrivere qualcosa come
sudo sh -c 'cat /dev/sdb >/dev/sdc'
In alternativa, per essere sicuro di non sovrascrivere accidentalmente il dispositivo sbagliato, puoi procedere in due passaggi:
- Dare all'utente (
gatorback
nel mio esempio) il permesso di leggere dal dispositivo sorgente (dev/sdb
nel mio esempio) e per scrivere sul dispositivo sorgente (/dev/sdc
nel mio esempio).sudo setfacl -m user:gatorback:r /dev/sdb sudo setfacl -m user:gatorback:w /dev/sdc
- Esegui la copia senza sudo.
cat /dev/sdb >/dev/sdc
È possibile copiare l'immagine del disco su un file, quindi copiare il file immagine sul dispositivo di destinazione. Questo è utile se devi fare più copie, o se hai un solo lettore di schede SD, o per ridurre il rischio di copiare nella direzione sbagliata.
sudo cat /dev/sdb >sdcard.image
- Estrarre la scheda di origine e inserire la scheda di destinazione.
- Facoltativamente, verifica il contenuto montando l'immagine, ad es.
sudo mount -o loop -r sdcard.image /mnt
. sudo sh -c 'cat sdcard.image >/dev/sdb'
Se vuoi vedere comodamente le informazioni sui progressi, usa pv
invece di cat
(pv
è raramente installato per impostazione predefinita, ma è disponibile come pacchetto sulla maggior parte delle distribuzioni).