Ecco un'introduzione all'utilizzo rsync
per il backup sul Pi. Una volta creato il backup iniziale, tenerlo aggiornato in questo modo è molto più veloce che strappare costantemente l'intera immagine. Puoi farlo su un disco rigido locale o su una rete.
In realtà non si desidera una copia completa di un sistema in esecuzione come backup, poiché alcune delle cose apparentemente nel file system esistono solo in fase di esecuzione. Includere quello in un backup e poi usarlo per ricreare un'immagine in un secondo momento può creare problemi per te.
Ci sono anche altre eccezioni. rsync
può accettare un elenco di modelli ( glob ) da escludere, e quelli possono essere letti da un file, quindi passiamo prima a quello che dovrebbe essere in tale file. Si noti che le voci sono nel modulo /directory/*
e non /directory
. Questo perché vogliamo che esistano, ma non vogliamo copiare nulla al loro interno.
/proc/*
/sys/*
Questi non esistono davvero sul disco. Sono un'interfaccia per il kernel, che li crea e li mantiene in memoria . Se li copi e poi li copi di nuovo in un sistema e lo avvii, sarà (nella migliore delle ipotesi) insignificante, dal momento che il kernel li usa come punti di mount per le interfacce [Se vuoi vedere cosa succede quando monti una partizione di filesystem su una directory con dati al suo interno, provare. Funziona e non farà alcun danno, ma le cose che erano nella directory ora sono inaccessibili.]
Si noti che è fondamentale che esistano i punti di mount /sys
e /proc
. Ma non dovrebbero contenere nulla. Il prossimo:
/dev/*
La dev
directory non è esattamente la stessa cosa di proc
e, sys
ma per i nostri scopi lo è. Se ritieni che dovresti salvarlo in modo da poter avere gli stessi nodi del dispositivo nel tuo backup o qualcosa del genere, ti sbagli . Non preoccuparti. Non copiare dev
. Tanto tempo fa Linux funzionava in quel modo, ma non funziona più.
/boot/*
Questo è una specie di caso speciale con la maggior parte (forse tutte) delle distro specifiche di Pi come Raspbian. In realtà è un mount point per la prima partizione vfat. Ci occuperemo di questo separatamente. Qualunque cosa tu faccia, non preoccuparti di includerlo qui, perché di nuovo, è un punto di montaggio.
/tmp/*
/run/*
/run
generalmente non è nemmeno su disco, è in memoria. Forse /tmp
potrebbe essere troppo (questo risparmierebbe un po 'di azione sulla scheda SD), ma in ogni caso, come suggeriscono i nomi, questi non sono luoghi per la memorizzazione di dati persistenti. Le applicazioni che li utilizzano si aspettano che possano essere eliminate ad ogni avvio.
/mnt/*
/media/*
Questi sono importanti in particolare se si prevede di eseguire il backup su un disco rigido o una chiavetta USB e il dispositivo è in /mnt
o /media
(il montaggio automatico tende a utilizzare quest'ultimo), perché se non si esclude la posizione di tali dispositivi nel filesystem si creare un loop che esegue il backup del contenuto dell'unità su se stesso, fino a quando non si esaurisce lo spazio. Penso che rsync
potrebbe essere abbastanza intelligente da individuare qualcosa di così stupido, ma cerca di evitare di testare la premessa.
Attivo al backup effettivo: crea una directory di cui eseguire il backup sul disco rigido montato localmente, sull'unità USB, ecc., Ad esempio "pi_backup". Puoi alternativamente fare il backup su una posizione remota tramite ssh
(vedi sotto) o usando un filesystem montato in rete, ma probabilmente ci vorrà del tempo per la prima volta.
Se il file contenente l'elenco da escludere è /rsync-exclude.txt
1 e l'unità è /mnt/usbhd
, per eseguire il backup effettivo:
rsync -aHv --delete --exclude-from=/rsync-exclude.txt / /mnt/usbhd/pi_backup/
Si noti che è presente una barra finalepi_backup/
.
Questo richiederà un po 'di tempo e produrrà un sacco di output (se invece vuoi esaminarlo in un registro, aggiungi > rsync.log
). --delete
non ha senso la prima volta, ma per mantenere aggiornato il backup utilizzarlo. Questo assicura che anche le cose che hai cancellato in seguito sul Pi vengano rimosse dal tuo backup. Il a
set di ricorsione in directory e si assicura che tutti gli attributi del file partita. -H
è preservare i collegamenti reali 2 , v
è prolisso, motivo per cui si ottiene un output (altrimenti rsync
è silenzioso). Vedi man rsync
di più.
C'è un collegamento per cui è possibile saltare il --exclude-from
file. Se sei sicuro che tutte le cose che non vuoi copiare ( /tmp
ecc.) Siano su filesystem separati, puoi semplicemente usare:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-x
è stato inserito. Questa è la forma abbreviata di --one-file-system
, che dice di rsync
non oltrepassare i confini del filesystem. Personalmente preferisco il --exclude-from
Raspbian, ma ad esempio, predefinito Raspbian, --one-file-system
funzionerà bene. Puoi usare entrambi se vuoi stare -x
attento: D
Non è un backup completo. È sufficiente se non hai inserito nulla boot
e stai bene usando il backup per ripristinare il sistema semplicemente attaccando la scheda in un computer ed eseguendo:
rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/
Potresti anche farlo con una scheda con una nuova immagine (presumendo che sia la stessa della tua immagine di base) anche se è un po 'inefficiente se devi creare l'immagine (perché poi ne sovrascriverai la maggior parte). È inoltre possibile collegare un'altra scheda SD tramite un adattatore USB con tale immagine su di essa e utilizzare il metodo sopra per mantenere una scheda duplicata.
Se hai inserito elementi /boot
(ad esempio un kernel personalizzato), incluso /boot/config.txt
, ti consigliamo di eseguire il backup anche di questo (piuttosto semplice - non c'è molto da fare). Fallo separatamente e, quando ripristini, quella roba va nella prima partizione.
Vedere qui se si desidera creare un'immagine vuota in stile Raspbian in cui è possibile eseguire il backup. Puoi usare una metodologia simile per creare una scheda di stile Raspbian vuota - invece di occuparti di un .img
file, avresti a che fare con un dispositivo reale (ad esempio /dev/sdb
), il che significa che tutto ciò che devi fare è creare la tabella delle partizioni con fdisk
e poi formato /dev/sdb1
e sdb2
(o qualsiasi altra cosa) con mkfs
.
Ma copiare l'intera immagine è più semplice! Perché preoccuparsi di questo?
Non è così difficile; Ho ripristinato una scheda vuota (formattata secondo l'ultimo link) in 10 minuti. Sì, l'utilizzo dd
del tutto è più semplice (se trovi cose come parole confuse ...), MA poi ci vuole un bel po 'ogni volta che vuoi aggiornare il tuo backup perché devi fare il 100% ogni volta. Usando rsync
, una volta che esiste un backup, aggiornarlo è molto più veloce, quindi puoi impostarlo per farlo in modo indolore ogni giorno tramite cron. Su una rete anche. Ogni sei ore. Più spesso lo fai, meno tempo ci vorrà.
rsync
attraverso ssh
Ecco un esempio:
rsync [options] --rsh="ssh [ssh options]" root@[the pi ip]:/ /backup/rpi/
"Opzioni" sarebbe, ad esempio, -av --delete --exclude-from=/rsync-exclude.txt
e "opzioni ssh" è qualunque cosa tu usi normalmente (se non altro). È necessario avere accesso root tramite ssh
per fare questo ai fini di un backup di sistema (set PermitRootLogin=yes
in /etc/ssh/sshd_config
e riavviare il server).
1 Dovresti conservare questo file. Puoi inserire commenti al suo interno su righe che iniziano con #
o ;
. Ciò potrebbe includere il rsync
comando effettivo , che può essere copiato e incollato in un secondo momento in modo da non doverlo ricordare ogni volta.
2 Grazie a Kris per la segnalazione rsync
non lo fa automaticamente.
dd
, guarda dentrorsync
.