Sichern Sie Raspberry Pi automatisch mit inkrementellen Sicherungen

14

Zu diesem Thema gibt es verschiedene Fragen und Antworten. Bei der Suche konnte ich jedoch keine Antwort finden, die als "kanonisch" angesehen werden könnte oder die die verschiedenen Optionen an einem Ort zusammenfasst.

Ich möchte den Inhalt meines Raspberry Pi sichern, um bei Bedarf eine vollständige Wiederherstellung zu ermöglichen, und zwar einfach und zuverlässig.

Diese Funktionen wären ideal:

  • Backups werden an einem externen Ort aufbewahrt (USB-Stick, DAS, NAS, Netzwerkcomputer usw.)
  • Automatisierung, entweder inkrementell oder über die Zeitplanung
  • Versionsnummerierung von Backups

Das Klonen der SD-Karte scheint eine beliebte Lösung zu sein, aber laut diesem Beitrag von Goldilocks ist dies nicht ratsam, da ein Klon Dateien enthält, die nur zur Laufzeit geladen werden usw.

Daher gehe ich davon aus, dass eine gute Lösung so etwas wie rsyncoder vielleicht robuster verwendet, ein Dienstprogramm, das die oben genannten Kriterien erfüllt.

Meine besondere Situation: Ich habe einen Raspberry Pi in einem LAN, über den ich auf einem Mac OS X-Computer, einer Synology DiskStation NAS oder einem an den Raspberry angeschlossenen USB-Speicherstick eine Sicherungskopie erstellen kann. Letzteres würde ich lieber nicht verwenden.

Winterflaggen
quelle

Antworten:

10

Rsnapshot erfüllt diese Kriterien: 1

  • Kann lokal oder remote verwendet werden.

  • Kann automatisiert / terminiert werden.

  • Verwendet nummerierte Teilsicherungen.

Ich habe nicht viel persönliche Erfahrung damit, abgesehen von der Tatsache, dass es auf Servern verwendet wird, auf denen ich arbeite, wo es gelegentlich den Tag gerettet hat, aber es scheint hier eine nette Einführung zu geben , das Arch-Linux-Wiki, das in der Regel großartig ist Dokumentation, hat eine Seite (ich bin sicher, das meiste davon trifft auch auf andere Distributionen zu), und die Homepage verweist auf ein HOWTO, das ich online nicht finden kann, bei dessen Suche jedoch zahlreiche Tutorials, Diskussionen usw. aufgetaucht sind. Zusätzlich zu diesen Links (das eigentliche How-to wird möglicherweise offline gehalten, damit die Benutzer nicht durch die Verwendung des falschen Links mit der falschen Version verwirrt werden).


  1. Obwohl anscheinend jetzt (2018), kann es zugunsten von BorgBackup nicht gewartet werden .
Goldlöckchen
quelle
Vielen Dank! Ich werde es dieses Wochenende testen und deine Antwort bestätigen, wenn es klappt.
Winterflags
1
Rsnapshot wird nicht mehr gepflegt. Der ursprüngliche Autor hat auf BorgBackup umgestellt
lightswitch05
@ lightswitch05 Gut zu wissen!
Goldlöckchen
2

Ich habe verschiedene Sicherungstechniken ausprobiert. Ich benutze 2 regelmäßig.

Ich klone die SD-Karte auf meinem Mac und komprimiere das Bild. Ich benutze dies als Sicherheitskopie oder um doppelte Karten zu erstellen. Ich stimme zu, dass dies kein Ideal ist. Mein Skript ist unten.

Häufig rsynckopiere ich auf eine Festplatte, die an den Pi angeschlossen ist. Weitere Informationen finden Sie unter /raspberrypi//a/28087/8697 .

Tatsächlich habe ich leicht unterschiedliche Versionen, um Wheezy-, Jessie- und MATE-Images zu sichern (in verschiedene Verzeichnisse).

Ich habe versucht, mit meinem Mac zu synchronisieren, aber dies funktionierte nur teilweise. Das grundlegende Problem ist, dass die Benutzer auf dem Mac und dem Pi nicht übereinstimmen, ganz zu schweigen von den Unterschieden zwischen rsyncden verschiedenen Plattformen. Mit den Änderungen an der Sicherheit in der neuesten OS X-Version hätte es wahrscheinlich noch mehr Probleme.

Ich habe erfolgreich einen Pi verwendet, um ein Backup eines anderen Pi über ein Netzwerk zu erstellen.

Ich weiß nicht, wie dies bei einem NAS funktionieren würde, vermute aber, dass es Probleme mit Hardlinks und Berechtigungen geben könnte.

#!/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
Milliways
quelle
Ihre DAS-Lösung sollte problemlos an einen am Pi angeschlossenen USB-Stick anpassbar sein, oder? Anstatt mir die Mühe zu machen, ein Netzwerk-Backup einzurichten, denke ich daran, einfach Rsync mit dem USB-Stick durchzuführen.
Winterflags
2

Wenn Sie diese beiden Fakten berücksichtigen, haben Sie andere Möglichkeiten:

  1. Sie können dasselbe Gerät gleichzeitig in mehreren Verzeichnissen bereitstellen.
  2. Sie können tmpfsBereitstellungen überall dort erstellen, wo Sie ein Verzeichnis maskieren möchten.

Ja, es gibt viele Pfade, die Sie nicht sichern möchten. Sie vermeiden die meisten davon, indem Sie Ihre primäre Partition in einem zweiten Verzeichnis mounten. Andere werden noch Daten , die Sie nicht wollen , zu sichern , wie /tmp, /devund /var/log.

Mein Prozess ging so ...

  1. SSH in den Raspberry Pi
  2. Mount genau das wollte ich sichern

    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. Verlasse die Maschine
  4. Kopieren Sie die Daten über ssh + tar

    ssh [email protected] '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. Entfernen Sie die temporären Halterungen

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

Sobald Sie mit den Ergebnissen zufrieden sind, können Sie alles in einer einzigen Datei wie ~/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

Und so geht das Telefonieren ...

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

TIPP: Wechseln Sie während des Experimentierens tar cf - *zu tar cf - etc, um bei jedem Testlauf Zeit zu sparen.

Bruno Bronosky
quelle
2

Ich hatte das gleiche Problem mit meinem Raspis @ home. Aus diesem Grund habe ich raspiBackup geschrieben , mit dem sich ohne die Erfindung des Benutzers regelmäßig dd- , tar- und rsync-Backups erstellen lassen. Probieren Sie es einfach aus.

framp
quelle