Backup Raspberry Pi automaticamente, con backup incrementali


15

Ci sono alcune domande e risposte diverse su questo argomento. Tuttavia, durante la ricerca non sono stato in grado di trovare una risposta che potesse essere considerata "canonica" o che raccolga le varie opzioni in un unico posto.

Vorrei eseguire il backup dei contenuti del mio Raspberry Pi per consentire un ripristino completo, se necessario, in modo semplice e affidabile.

Queste caratteristiche sarebbero ideali:

  • Backup conservati su una posizione esterna (chiavetta USB, DAS, NAS, computer di rete, ecc.)
  • Automatizzazione, sia incrementale che tramite programmazione
  • Numerazione delle versioni dei backup

La clonazione della scheda SD sembra essere una soluzione popolare, ma secondo questo post di Goldilocks questo non è consigliabile perché un clone contiene file che vengono caricati solo in fase di esecuzione, ecc.

Quindi presumo che una buona soluzione utilizzi qualcosa di simile rsynco forse più robusto, un'utilità in grado di gestire i criteri sopra.

La mia situazione particolare: ho un Raspberry Pi su una LAN in cui posso eseguire il backup su un computer Mac OS X, un Synology DiskStation NAS o su una memory stick USB collegata al Raspberry. Preferirei non usare quest'ultimo.


C'è un lungo elenco di opzioni di backup sul sito di Ubuntu (per lo più non specifico di Ubuntu) askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Risposte:


10

Rsnapshot soddisfa questi criteri: 1

  • Può essere usato localmente o da remoto.

  • Può essere automatizzato / pianificato.

  • Utilizza backup incrementali numerati.

Non ho molta esperienza personale con esso oltre al fatto che viene utilizzato su server su cui lavoro, dove ha salvato la giornata di tanto in tanto, ma sembra che ci sia una buona introduzione qui , il wiki di Arch Linux, che tende ad avere grandi documentazione, ha una pagina (sono sicuro che la maggior parte di questo si applica ugualmente bene ad altre distro), e la home page fa riferimento a un HOWTO che non riesco a trovare online, ma cercandolo ha prodotto numerosi tutorial, discussioni, ecc. oltre a questi collegamenti (l'effettivo how-to può essere tenuto offline in modo che le persone non vengano confuse usando quella sbagliata con la versione sbagliata).


  1. Anche se apparentemente ora (2018) potrebbe non essere mantenuto a favore di BorgBackup .

Grazie! Lo testerò questo fine settimana e confermerò la tua risposta se funzionerà.
Winterflags

1
Rsnapshot non è più mantenuto. L' autore originale è passato all'utilizzo di BorgBackup
lightswitch05

@ lightswitch05 Buono a sapersi!
riccioli d'oro

2

Ho provato diverse tecniche di backup. Uso 2 su base regolare.

Clono la scheda SD sul mio Mac e comprimo l'immagine. Lo uso come backup di sicurezza o per creare schede duplicate. Sono d'accordo che questo non è un ideale. La mia sceneggiatura è sotto.

Più frequentemente, utilizzo rsyncper copiare su un HD collegato al Pi. Vedi /raspberrypi//a/28087/8697 per i dettagli.

In effetti ho versioni leggermente diverse per il backup delle immagini di Wheezy, Jessie e MATE (in diverse directory).

Ho provato a risincronizzarmi con il mio Mac, ma questo ha funzionato solo in parte. Il problema fondamentale è che gli utenti su Mac e Pi non corrispondono, per non parlare delle differenze tra rsyncle diverse piattaforme. Con le modifiche alla sicurezza nell'ultimo OS X probabilmente avrebbe avuto ancora più problemi.

Ho usato con successo un Pi per fare un backup di un altro su una rete.

Non so come funzionerebbe su un NAS, ma sospetto che potrebbero esserci problemi con hardlink e permessi.

#!/bin/bash
# script to backup Pi SD card
# 2017-06-05
# DSK='disk4'   # manual set disk
OUTDIR=~/temp/Pi
# Find disk with Linux partition (works for Raspbian)
# Modified for PINN/NOOBS
export DSK=`diskutil list | grep "Linux" | sed 's/.*\(disk[0-9]\).*/\1/' | uniq`
if [ $DSK ]; then
    echo $DSK
    echo $OUTDIR
else
    echo "Disk not found"
    exit
fi

diskutil unmountDisk /dev/$DSK
echo please wait - This takes some time
echo Ctl+T to show progress!
time sudo dd if=/dev/r$DSK bs=4m | gzip -9 > $OUTDIR/Piback.img.gz

#rename to current date
echo compressing completed - now renaming
mv -n $OUTDIR/Piback.img.gz $OUTDIR/Piback`date +%Y%m%d`.img.gz

La tua soluzione DAS dovrebbe essere facilmente adattabile a una chiavetta USB collegata al Pi, giusto? Invece di preoccuparmi di impostare un backup in rete, sto pensando di eseguire semplicemente rsync sull'USB.
Winterflags,

2

Se consideri questi 2 fatti ti aprirà ad altre opzioni:

  1. È possibile montare lo stesso dispositivo in più directory contemporaneamente.
  2. È possibile creare tmpfsmontaggi ovunque si desideri mascherare una directory.

Quindi, sì, ci sono molti percorsi che non si desidera eseguire il backup. Ne eviti la maggior parte montando la tua partizione primaria in una seconda directory. Altri avranno ancora i dati che non si desidera effettuare il backup come /tmp, /deve /var/log.

Il mio processo è andato così ...

  1. SSH nel Raspberry Pi
  2. Montare esattamente voglio che volessi fare il backup

    sudo mount                     /dev/mmcblk0p2    /tmp/root/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/var/log/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/tmp/
    sudo mount                     /dev/mmcblk0p1    /tmp/root/boot/
    
  3. Esci dalla macchina
  4. Copia i dati tramite ssh + tar

    ssh pi@raspberry.local 'cd /tmp/root; sudo tar cf - * | gzip;' | pv > rpi.tgz
    # NOTE: The `pv` command gives you a progress meter but can be left out.
    
  5. Rimuovere i supporti temporanei

    for m in /var/log/ /dev/ /boot/ /; do sudo umount /tmp/root${m}; done
    

Una volta che sei soddisfatto dei risultati, puoi mettere tutto in un unico file come ~/backup.sh

#!/bin/bash -eu

dir=$(mktemp -d)

cleanup(){
    cd /tmp/ # You can't umount or rm a directory while you are in it.
    for m in /dev/ /tmp/ /var/log/ /boot/ /; do
        sudo umount ${dir}${m}
    done
    rm -rf ${dir}
}

do_mounts(){
    sudo mount                     /dev/mmcblk0p2    ${dir}/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/tmp/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/var/log/
    sudo mount                     /dev/mmcblk0p1    ${dir}/boot/
}

send_data(){
    cd ${dir}; sudo tar cf - * | gzip | tee >(md5sum > /tmp/backup.md5);
}

give_feedback(){
    awk '{print "MD5:", $1}' < /tmp/backup.md5 >&2
}

trap cleanup EXIT INT TERM
do_mounts
send_data
give_feedback

E la chiamata va così ...

$ ssh pi@raspberry.local ./backup.sh | pv | tee rpi.tgz | md5sum | awk '{print "MD5:", $1}'
MD5: d3d9181374f3ec8e4e721c786eca9f71
 348MB 0:04:50 [ 1.2MB/s] [                 <=>                                ]
MD5: d3d9181374f3ec8e4e721c786eca9f71

SUGGERIMENTO: mentre stai sperimentando, cambia tar cf - *in tar cf - etcper risparmiare un sacco di tempo ad ogni prova.


2

Ho avuto lo stesso problema con il mio Raspis @ home. Ecco perché ho scritto raspiBackup che consente di creare backup dd, tar e rsync su base regolare senza l'invenzione dell'utente. Basta fare un tentativo.

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.