Come posso eseguire il backup di Raspberry Pi?


296

Sto scrivendo programmi per il mio Raspberry Pi (con Raspbian) ormai da alcune settimane e vorrei assicurarmi di proteggere il lavoro svolto.

Come posso eseguire il backup dei file che ho creato?

Posso semplicemente collegare la scheda SD al mio PC Windows (XP o 7) e copiarla sul disco rigido o su un'altra scheda SD?


6
Ho un PC con Ubuntu e Windows (XP e 7), ma mi aspetto che molte persone siano interessate alla risposta di Windows. Modificherò la domanda per chiarirlo.
Steve Robillard,

7
rsync da Raspi sul tuo pc?
Alex L

41
Per il codice, potresti anche prendere in considerazione l'utilizzo di software di controllo della versione distribuito come gito hg, in questo modo non solo hai copie del codice in più punti, ma hai anche la cronologia completa di come è cambiato quel codice.
Mark Booth,

4
@MarkBooth Non vedo perché sia ​​necessario un DVCS su un VCS se stiamo solo considerando di poter recuperare il codice in un secondo momento. Diamine, è ancora più semplice poiché si utilizzano i numeri di revisione e non si commettono hash per identificare uno stato particolare. Imparare un CVCS come Subversion non è molto un investimento di tempo (come ricordo ... anche se è stato molto, molto tempo fa). Sì, il passaggio a Git era un po 'snervante al momento, ma non ho mai guardato indietro.
Steven Lu,

1
I commenti non sono un buon posto per questo tipo di discussione @StevenLu, dovremmo portarlo su Raspberry Pi Chat .
Mark Booth,

Risposte:


293

Se vuoi conservare tutti i dati, probabilmente dovrai creare un'immagine del disco. Inoltre, Windows non è in grado di riconoscere i tipici filesystem Linux, quindi probabilmente non sarai nemmeno in grado di vedere i tuoi file quando colleghi la tua scheda SD.

La creazione di un'immagine del disco conserverà non solo i file ma anche la struttura del filesystem e quando deciderai di eseguire il flash della tua nuova scheda SD, sarai in grado di collegarla e funzionerà.

Linux

Su Linux, è possibile utilizzare lo ddstrumento standard :

dd if=/dev/sdx of=/path/to/image bs=1M

Dov'è la /dev/sdxtua scheda SD.

Mac

Su Mac, puoi anche usare lo ddstrumento standard con una sintassi leggermente diversa:

dd if=/dev/rdiskx of=/path/to/image bs=1m

Dov'è la /dev/rdiskxtua scheda SD.

(usare rdisk è preferibile perché è il dispositivo raw - più veloce)

Per scoprire quale disco è il tuo dispositivo digita diskutil listal prompt dei comandi - potrebbe essere necessario essere root; per fare questo tipo sudo -se inserire la password quando richiesto.

finestre

opzione 1

Su Windows, è possibile utilizzare il processo inverso utilizzato durante il flashing della scheda SD.

È possibile utilizzare Win32 Disk Imager , che è lo strumento preferito per il flashing di una scheda SD della Foundation. Basta inserire il nome file (la posizione e il nome del file immagine di backup da salvare), selezionare il dispositivo (la scheda SD) e premere leggi:

Win32 Disk Imager

Naturalmente, puoi anche usare RawWrite , ddper Windows o strumenti simili, il processo è abbastanza simile.

opzione 2

Se non desideri eseguire il backup dell'intero sistema, ma solo di file specifici, ti suggerisco di collegarti a Raspberry Pi tramite SFTP e di copiarli sul computer locale (puoi utilizzare il client WinScp ). Se hai abilitato SSH, SFTP di solito non richiede alcuna configurazione speciale sul lato Raspberry Pi.

Un'altra opzione è quella di copiare i file su un sistema remoto usando rsync .

Puoi anche installare driver speciali in modo che Windows possa leggere i extfilesystem (e sarà quindi in grado di leggere l'intera scheda SD), come ext2fsdma probabilmente non vale la pena.


Poiché l'immagine avrà le stesse dimensioni della scheda SD, è possibile comprimerla. Ciò può essere ottenuto semplicemente utilizzando il tuo strumento di compressione preferito, come gzip7zip, WinZip, WinRar ...


1
+1 in generale, anche se rsyncvia sshsarebbe probabilmente più facile. Inoltre, per il codice sorgente - come già affermato da Mark Booth - dovresti assolutamente usare un DVCS
Tobias Kienzler il

1
Se la mia scheda SD si danneggiasse, come installerei questa immagine su una nuova scheda SD?
Flipper

2
Il collegamento a Win32 Disk Imager non presenta download disponibili. Presumo sia lo stesso di sourceforge.net/projects/win32diskimager ?
Yamikuronue,

2
oh mio Dio, non riesco a distinguere se "leggere" in quell'immagine significa "leggere il file immagine" o "leggere la PARTITION E SCRIVERLO nel file immagine" .... lo stesso per "scrivere" ... essere disinfettato. Qualcosa come "Immagine -> Dispositivo" e "Dispositivo -> Immagine" (o un'alternativa migliore)
Olivier Dulac il

4
Win32DiskImager sembra essere in grado di gestire solo le partizioni riconosciute da Windows. Ho avuto poca o nessuna fortuna con la clonazione di schede SD Noobs / Raspbian. Trovato questo programma freeware: hddguru.com/software/HDD-Raw-Copy-Tool . Funziona come un incantesimo fare un clone byte per byte della scheda SD in Windows (l'ho usato con Win7 64-bit), indipendentemente dallo schema di partizionamento e dai contenuti.
techie007,

156

Se stai usando Linux, puoi usare il ddcomando per fare un backup completo dell'immagine:

dd if=/dev/sdx of=/path/to/image

o per compressione:

dd if=/dev/sdx | gzip > /path/to/image.gz

Dov'è la sdxtua scheda SD.

Per ripristinare il backup, invertire i comandi:

dd if=/path/to/image of=/dev/sdx

o quando compresso:

gzip -dc /path/to/image.gz | dd of=/dev/sdx

3
Consiglio vivamente di usare gzip: oggi ho eseguito il backup di alcune partizioni desktop e una partizione da 20Gb è stata salvata in 8.9Gb.
Alex Chamberlain,

2
bzip2 dovrebbe comprimersi ancora meglio ed è disponibile su tutti i sistemi Linux. Sui nuovi sistemi Linux xz dovrebbe comprimersi ancora meglio. I decompressori per questi sono rispettivamente bunzip2 e unxz.
Arne,

4
@Arne Non mi aspetto una tale differenza! Tuttavia, sembra essere molto al di sotto delle mie preoccupazioni. (A proposito, è bello quando rispondi a un commento di quasi 1 anno di età e ricevi una risposta in 2 minuti :))
yo '

5
Non commettere l'errore (come ho appena fatto) di lasciare bs=1Mfuori il parametro o qualche parametro simile. La dimensione di blocco predefinita di 512 byte annulla le prestazioni di copia.
Steven Lu,

1
@Arne Ho provato a usare bzip2 ora, e forse sarebbe appropriato se eseguissi il backup dalla mia scheda SD di Classe 4, ma su questa scheda UHS 1 SanDisk da 8 GB di classe 10 (che era $ 12 la scorsa settimana) si sta esaurendo un Ivy Bridge Thread della CPU e limitazione della velocità di lettura dalla scheda a 6 MB / s (gg con Ctrl + T riporta 4,2 MB / s). Questo non è l'ideale perché posso usare gzip con questa scheda e leggerla ad un ritmo molto più veloce (dd riportando 18 MB / s). Concesso, se la maggior parte del disco è spazio libero, la lettura durante questi tratti vuoti accelera. Ma dovrò vedere qual è la differenza nella dimensione del file risultante.
Steven Lu,

31

Oltre ai backup a livello di blocco, esistono due approcci comuni per gestire le fonti: archiviarlo continuamente (1) o utilizzare il sistema di controllo delle revisioni (2).

Useremo la riga di comando (qualsiasi terminale locale o connessione SSH a una macchina Raspberry Pi), giusto?

1. Archivio

cd ~/projects
tar czvf your-raspberry-project-top-level-dir-v1.0.tgz \
         ./your-raspberry-project-top-level-dir 
scp your-raspberry-project-top-level-dir-v1.0.tgz \
         user@backup-host:/home/user/backups/

2. RCS (Git per esempio)

cd ~/projects/your-raspberry-project-top-level-dir
make clean                          # Or clean it manually using rm (rm ./*.o ./*.pyc)
git init                            # Create new repo here
git add .                           # Add source files to the staging index
git status                          # Verify if it's OK
git commit -a -m "Initial import"   # Fix application's source changes
git add remote https://github.com/user/your-raspberry-project.git
git push -u origin master           # Sends the sources to your github repo
git pull && git push && git status  # Now origin/master is your tracking branch

2
Potrebbe anche valere la pena notare che le persone possono impostare repository nudi su altre macchine sulla propria rete e spingere dal loro Raspberry Pi a lì, piuttosto che dover impostare un account Github, chiavi SSH ecc. E spingere lì.
Mark Booth,

2
È un buon inizio per la vera risposta. Il codice deve essere gestito sotto il controllo della versione se si vuole essere in grado di mantenerlo. Il controllo della versione consente di tenere traccia delle modifiche, comprendere la cronologia delle modifiche, gestire diversi rami (ad esempio stable vs dev) e unire tra loro. Ma non è di per sé un backup. Tuttavia, è sufficiente eseguire il backup del repository (ad esempio la cartella .git per Git). Controlla forum Linux / Unix, wiki, scambi di stack, ecc. Per i modi per eseguire il backup delle cartelle sotto Linux. Nota: non considero github come backup. E non vuoi pubblicare tutto su github!
Huygens,

29

Sul Mac che non desideri utilizzare /dev/diskn. Dovresti /dev/rdiskninvece usare , dove n è il numero utilizzato dal sistema operativo per identificare la tua scheda SD. Ciò riduce di molto il tempo necessario per la copia.

Quindi per il processo di backup ottimale su un Mac, consiglierei di fare quanto segue:

Esegui diskutil liste trova il disco corrispondente alla scheda SD del tuo Raspberry Pi:

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            499.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk1
   1:             Windows_FAT_32                         58.7 MB    disk1s1
   2:                      Linux                         7.9 GB     disk1s2

Chiaramente /dev/disk1è la mia scheda SD da 8 GB, anche il nome della partizione Linux è un po 'un indizio.

Tuttavia, anziché utilizzare /dev/disk1con dd, è necessario utilizzare /dev/rdisk1, in questo modo:

sudo dd if=/dev/rdisk1 of=/path/to/backup.img bs=1m

E per ripristinarlo, basta scambiare i parametri if(file di input) e of(file di output):

sudo dd if=/path/to/backup.img of=/dev/rdisk1 bs=1m

O, con gzip, per risparmiare una notevole quantità di spazio:

sudo dd if=/dev/rdisk1 bs=1m | gzip > /path/to/backup.gz

E, per copiare l'immagine sulla SD:

gzip -dc /path/to/backup.gz | sudo dd of=/dev/rdisk1 bs=1m

Per ulteriori informazioni, consultare questa pagina wiki .


1
Trovo che questa sia la risposta più efficiente e ho votato a favore, grazie @Alex Coplan.
bosch,

Tuttavia, stavo cercando uno strumento GUI a prova di errore per MacOS (come hanno gli utenti Windows) e senza i rischi di dd e ho trovato "SD Clone" da Two Canoes (di cui mi fido perché sono un utente di WinClone). È piuttosto nuovo -2016- e costoso (100 $ con una prova di 2 settimane) ma sembra essere orientato verso RasPi, quindi ci proverò subito e ti farò sapere in un nuovo commento.
bosch,

3
Quando copi indietro, smonta la tua scheda SD se ricevi il seguente messaggio: "Risorsa occupata"
Spipau

26

Puoi eseguire questo comando dal tuo PC Linux con molto spazio:

ssh root@raspberrypi gzip -c /dev/mmcblk0 > img.gz

Come prerequisito è necessario aver generato le chiavi .ssh e copiato il file id_XXX.pubover /root/.ssh/authorized_keys.

È possibile avere problemi con il file system poiché si tratta di un backup live, ma se il tuo Raspberry Pi non è molto occupato, di solito andrà bene.

Probabilmente è più veloce eseguire la compressione sul PC in questo modo:

ssh root@raspberrypi dd if=/dev/mmcblk0 | gzip -c > img.gz

1
o con sudo 'ssh pi @ raspberry sudo dd if = / dev / mmcblk0 | gzip -c> raspberry.img.gz '
cupakob

e come riferimento per l'accesso senza password, raspberrypi.stackexchange.com/a/1687/22603
Paolo

2
Ho anche trovato utile aggiungere la dimensione del blocco e, dato che era disponibile, usare pv per controllare i progressi. ssh root@raspberry dd if=/dev/mmcblk0 bs=1M | pv | gzip -c > img.gz
Paolo,

Questa è un'ottima risposta se non si desidera smontare la scheda SD e funziona anche per macOS. Ecco la riga di comando che sto usando: ssh pi @ raspberrypi sudo dd if = / dev / mmcblk0 | xz -9 -e --threads = 4> sd.img.xz. Non richiede la generazione di chiavi SSH in questo modo. Ctrl-T può essere premuto per vedere l'avanzamento.
Impara OpenGL ES il

Perché gzip è preferibile al comando dd ?
IgorGanapolsky,

18

Se stai usando Windows:

  1. Scarica Win32 Disk Imager.

  2. Crea il percorso del file che desideri utilizzare per salvare l'immagine. (Uso C: \ RasPi_Bkp)

  3. Eseguire Win32 Disk Imager

  4. Passare al punto del percorso del file di backup e digitare un nome file.

  5. Fai clic su Salva

  6. Assicurarsi che il dispositivo mostrato nell'elenco a discesa a destra del percorso del file sia quello di cui si desidera eseguire il backup.

Win32 Disk imager in azione

  1. Fai clic su "Leggi"

  2. Aspettare.


1
Grazie - solo il lavoro. (Stranamente, quando collego la mia scheda SD al mio PC principale, Windows 7 va su BSOD! Fortunatamente va bene su un'altra macchina.)
Jon Egerton,

Per chiunque abbia problemi con Win32 Disk Imager come ho fatto io, prova Rufus.
David B

9

Se i tuoi programmi sono tutti nel pi userid, non c'è davvero alcun motivo per eseguire il backup dell'intero filesystem, come viene suggerito. quello che faccio è solo il backup del singolo ID. Eseguo il comando:

tar -czf pi.tgz *

dalla home directory di pi, che crea il file pi.tgz, contenente tutti i file e le directory in esso contenuti (esclusi i file nascosti). Poi scp questo file su un altro computer linux, ma potresti ftp o inviarlo via e-mail da qualche parte per tenerlo al sicuro ... tutto ciò che lo ha portato su un altro computer.

Questo crea un file molto più piccolo per il tuo backup.

Sei preoccupato per tutti i pacchetti aggiuntivi che hai installato lungo la strada? Crea uno script che eseguirà di nuovo quelle installazioni per te se dovessi ricreare la tua scheda SD e conservala nella home directory di pi da qualche parte. (Ho una directory ~ / bin per queste cose). Disponi di tutti i comandi necessari per eseguire l'installazione per riportarti nella posizione in cui desideri trovarti. Documenta le tue modifiche e ti consente di creare rapidamente una nuova scheda SD. Conterrebbe i comandi sotto forma di:

apt-get --assume-yes install apache2 mysqld mysql php5 php-pear

Inizia con

apt-get update
apt-get --assume-yes upgrade

in modo che anche il tuo sistema sia portato al livello attuale prima di iniziare ad aggiungere i tuoi pacchetti.

Poiché questo sarà nel tuo file pi.tgz, lo avrai quando ne avrai bisogno.


Si noti che per lo spin-off di Raspbmc, è noto che l' aggiornamento apt-get causi problemi. Lo ha fatto per me, e apparentemente è un problema noto .
Cristi Diaconescu,

Questo può essere fatto anche in remoto, ovvero: ssh pi@raspberrypi.local "sudo tar -cvp ~ / *" | xz -9 -e --threads = 4> raspbian.home.tar.xz
Impara OpenGL ES

8

Eseguo Raspbian e utilizzo dd e cron per eseguire backup automatici della mia scheda SD sull'unità USB esterna.

È una soluzione davvero semplice. Viene eseguito una volta alla settimana alle 2 del mattino di un lunedì mattina e crea un'immagine della scheda SD.

Ho scritto uno script che arresta i servizi come lighttpd e cron, per ridurre al minimo il rischio che la scheda SD venga scritta nel mezzo del backup, quindi chiama dd, prima di riavviare i servizi al termine del backup.

Ho messo la sceneggiatura e alcune istruzioni sul mio blog, http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html


1
Questa potrebbe essere una soluzione ragionevole se non è possibile scollegare la scheda. Tuttavia, ddl' sd?installazione di un dispositivo con partizioni montate non sembra abbastanza sicura.
yo '

Probabilmente hai ragione, ma non ho avuto problemi.
Martin O'Hanlon,

4

Per Debian puoi usare dd e tar. Ciò farebbe una copia completa della scheda SD e richiederebbe una memoria esterna (su scheda SD), probabilmente USB o unità di rete montati.

dd if=/dev/sdd of=yourbackupfilenamehere.dd
tar zcvf yourbackupfilenamehere.dd.tar.gz

Con / dev / sdd come posizione della scheda SD e ofcome nome del file di output.


Questo ha il limite di aver bisogno di un posto in cui scrivere l'immagine (che è anche abbastanza grande da prendere l'immagine (e). Presumibilmente significa anche che un grande dato io attraverso l'hub USB - richiederebbe un po 'di tempo?
Jon Egerton,

Vero, ma è un po 'richiesto nella domanda: "Voglio un'immagine completa della scheda SD".
Forkrul Assail,

1
Perché crei un .tar.gzfile del file dd? Non sarebbe meglio semplicemente eseguire gzipo bzip2sul file dd direttamente?
Anders,

Cosa significa / dev / sdd ? Ho /dev/mmcblk0p1ed /dev/mmcblk0p2elencato ...
IgorGanapolsky il

4

Fortunatamente Raspberry Pi può creare un backup di se stesso che è indipendente dal sistema operativo primario utilizzato per accedere a Raspberry (Windows, Linux, Mac). dd, tar e rsync sono strumenti diversi per creare backup su Linux. Tutti questi tipi di backup possono essere creati dal Pi in esecuzione purché interrompa tutte le attività impegnate come mysql, smb, dlna, owncloud, seafile, apache et al. Prima di creare il backup. C'è una domanda diversa in cui l'approccio è spiegato in modo più dettagliato e una possibile soluzione è spiegata qui


3

Se il tuo Raspberry Pi è collegato a una rete e desideri backup automatici al volo, probabilmente il modo più semplice è Bittorent Sync: installazione e funzionamento molto semplici e stabili sul Pi e su molte altre piattaforme.


Vorrei solo annunciare che la sincronizzazione e il backup sono due cose diverse
Pitto

3

Niente più spaventoso dd, sync, tar, ..., copiatrice SD Card per principianti

La nuova versione di Raspbian chiamata stretch ha un'app molto intuitiva chiamata SD Card Copier. Non è necessario utilizzare gli strumenti Linux come dd ecc. Può persino copiare grandi carte su piccole carte.

Come farlo

Si inizia con l'icona del menu dell'app GUI RPi nell'angolo in alto a sinistra, vai su Accessori, quindi fai clic su Copiatrice di schede SD.

Tutto quello che devi fare è un paio di clic all'interno della GUI!

Dopo aver creato la scheda SD di backup, è possibile utilizzare Gestione disco di Windows per leggere l'immagine della scheda in un file Windows e archiviarla in qualsiasi directory di Windows. In questo modo è necessaria solo una scheda SD fisica e memorizzare molte versioni di immagini nel PC Windows.

Ovviamente puoi semplicemente usare la scheda di backup come copia funzionante, per sostituire la tua carta originale, che ora diventa la tua carta principale e bloccarla in un luogo sicuro.


1

Durante la ricerca per creare un'immagine della mia scheda SD personalizzata ho trovato questo post. La migliore risposta qui discute l'imaging della scheda SD, ma quello che stavo cercando ha richiesto una riduzione del filesystem per rendere l'immagine più piccola possibile. Ho finito per creare il mio strumento per farlo e delineare il processo su: https://raspberrypi.stackexchange.com/a/37899/32585


1

Ecco 3 opzioni:

  1. Nell'ultima versione di Raspbian, esiste uno strumento che converte il sistema operativo e i file in un file .img che è possibile posizionare su una USB o sul PC.

  2. Collega la tua scheda SD a un PC Windows e avvia Win32 Disk Imager (installa qui se non l'hai già fatto).

    In (1) digitare un nome file e un percorso per il file immagine. In (2), selezionare la lettera dell'unità della scheda SD. Quindi premere 3. Ciò equivale all'opzione 1.

  3. Collega una chiavetta USB al tuo Pi e copia tutti i file importanti.



0

Ho creato un'utilità per eseguire il backup di Raspberry Pi se sei Linux. Questo ridurrà anche l'immagine del tuo Raspberry Pi, quindi puoi mettere il .iso su una scheda SD più piccola: RaspberryPiShrink

Questo eseguirà uno script Python che ti guiderà attraverso il processo. Basta collegare la scheda microSD al computer Ubuntu, Linux Mint o Debain e seguire le istruzioni del terminale.


-2

Sto usando Usbit per Windows. È l'unico strumento che riesco a trovare che ti permetterà di passare da una scheda SD più grande a una più piccola. Tutto quello che ho fatto è stato spuntare quanto segue nella pagina delle opzioni; Ignora i controlli delle dimensioni e tronca le immagini di grandi dimensioni .

Ciò mi ha permesso di scambiare le mie immagini OpenELEC e Xbian da una scheda SD di classe 4 da 16 GB a una scheda di classe 10 da 8 GB.

È MOLTO più semplice del ridimensionamento delle tabelle delle partizioni, ecc.


2
Hai mai verificato i file? Intendo con find -type f -exec md5sum {} \; > filelist.txt?
Avio,

2
Questo non è garantito per funzionare, poiché i dati memorizzati nella seconda metà del disco vengono eliminati. Inoltre, la tabella delle partizioni è danneggiata.
Alex Chamberlain,
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.