Hier ist eine Einführung in die Verwendung rsync
für die Sicherung auf dem Pi. Sobald das erste Backup erstellt wurde, ist es viel schneller, es auf dem neuesten Stand zu halten, als das gesamte Image ständig zu rippen. Sie können dies auf einer lokalen Festplatte oder über ein Netzwerk tun.
Sie möchten eigentlich keine vollständige Kopie eines laufenden Systems als Backup, da einige der angeblich im Dateisystem vorhandenen Daten nur zur Laufzeit vorhanden sind. Wenn Sie dies in ein Backup aufnehmen und später ein Image daraus erstellen, kann dies zu Problemen für Sie führen.
Es gibt auch einige andere Ausnahmen. rsync
kann eine Liste von ( Glob- ) Mustern akzeptieren , die ausgeschlossen werden sollen, und diese können aus einer Datei gelesen werden. Gehen wir also zunächst durch, was in einer solchen Datei enthalten sein soll. Beachten Sie, dass die Einträge von der Form sind /directory/*
und nicht /directory
. Das liegt daran, dass wir wollen, dass sie existieren, aber wir wollen nichts in sie kopieren.
/proc/*
/sys/*
Diese existieren nicht wirklich auf der Festplatte. Sie sind eine Schnittstelle zum Kernel, der sie im Speicher erstellt und verwaltet . Wenn Sie diese kopieren und dann wieder in ein System kopieren und es booten, ist dies (bestenfalls) bedeutungslos, da der Kernel diese als Mount-Punkte für die Schnittstellen verwendet Versuchen Sie es in einem Verzeichnis mit Daten. Es funktioniert und richtet keinen Schaden an, aber auf das Material, das sich im Verzeichnis befand, kann jetzt nicht mehr zugegriffen werden.]
Beachten Sie, dass der /sys
und der /proc
Einhängepunkt unbedingt vorhanden sein müssen. Sie sollten aber nichts enthalten. Nächster:
/dev/*
Das dev
Verzeichnis ist nicht ganz dasselbe wie proc
und sys
doch für unsere Zwecke. Wenn Sie der Meinung sind, dass Sie dies speichern sollten, damit Sie dieselben Geräteknoten in Ihrem Backup haben können, liegen Sie falsch . Mach dir keine Sorgen. Nicht kopieren dev
. Vor langer Zeit hat Linux so funktioniert, aber es funktioniert nicht mehr.
/boot/*
Dies ist eine Art Sonderfall bei den meisten (vielleicht allen) Pi-spezifischen Distributionen wie Raspbian. Es ist eigentlich ein Einhängepunkt für die erste vfat-Partition. Wir werden das separat behandeln. Was auch immer Sie tun, kümmern Sie sich nicht darum, es hier einzubeziehen, denn es ist wieder ein Mount Point.
/tmp/*
/run/*
/run
befindet sich im Allgemeinen auch nicht auf der Festplatte, sondern im Speicher. Vielleicht /tmp
könnte es auch so sein (dies würde ein bisschen SD-Karten-Action sparen), aber auf jeden Fall sind dies, wie die Namen andeuten, keine Orte zum Speichern persistenter Daten. Anwendungen, die sie verwenden, erwarten, dass sie bei jedem Start gelöscht werden.
/mnt/*
/media/*
Dies ist insbesondere dann wichtig, wenn Sie eine Sicherung auf einer Festplatte oder einem USB-Stick planen und das Gerät sich in /mnt
oder befindet /media
(bei der automatischen Bereitstellung wird normalerweise das letztere verwendet), da Sie den Speicherort dieser Geräte im Dateisystem nicht ausschließen Erstellen Sie eine Schleife, die den Inhalt des Laufwerks in sich selbst sichert, bis der Speicherplatz erschöpft ist. Ich denke, es rsync
könnte klug genug sein, etwas so Dummes zu entdecken, aber ich versuche zu vermeiden, die Prämisse zu testen.
Zur eigentlichen Sicherung: Erstellen Sie ein Verzeichnis, in das Sie auf der lokal gemounteten Festplatte, einem USB-Gerät usw. Sicherungskopien erstellen möchten - z. B. "pi_backup". Sie können alternativ über ssh
(siehe unten) oder über ein im Netzwerk eingehängtes Dateisystem an einen Remotestandort sichern. Dies wird jedoch wahrscheinlich beim ersten Mal eine Weile dauern.
Wenn die Datei, die die auszuschließende Liste enthält, /rsync-exclude.txt
1 ist und sich auf Ihrem Laufwerk befindet /mnt/usbhd
, führen Sie die eigentliche Sicherung durch:
rsync -aHv --delete --exclude-from=/rsync-exclude.txt / /mnt/usbhd/pi_backup/
Beachten Sie, dass ein abschließender Schrägstrich angezeigt wirdpi_backup/
.
Dies wird eine Weile dauern und eine Menge Ausgabe produzieren (wenn Sie dies stattdessen in einem Protokoll untersuchen möchten, fügen Sie es an > rsync.log
). --delete
ist beim ersten Mal bedeutungslos, aber um das Backup auf dem neuesten Stand zu halten, verwenden Sie es. Auf diese Weise wird sichergestellt, dass Inhalte, die Sie später auf dem Pi gelöscht haben, auch aus Ihrer Sicherung entfernt werden. Das a
setzt die Rekursion in Verzeichnisse und stellt sicher, dass alle Dateiattribute übereinstimmen. -H
ist, um harte Links 2 zu erhalten , v
ist für ausführliche, weshalb Sie eine Ausgabe erhalten (sonst rsync
ist ruhig). Sehen Sie man rsync
für mehr.
Es gibt eine Verknüpfung, mit der Sie die --exclude-from
Datei überspringen können . Wenn Sie sicher sind, dass sich alle Dinge, die Sie nicht kopieren möchten ( /tmp
usw.), auf separaten Dateisystemen befinden, können Sie einfach Folgendes verwenden:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-x
wurde eingefügt. Dies ist die Kurzform von --one-file-system
, die angibt, rsync
keine Dateisystemgrenzen zu überschreiten. Persönlich bevorzuge ich die --exclude-from
, aber auf zB Standard Raspbian, --one-file-system
wird gut funktionieren. Sie können beide verwenden, wenn Sie -x
vorsichtig sein möchten : D
Das ist kein vollständiges Backup. Es reicht aus, wenn Sie nichts eingegeben haben und das Backup in boot
Ordnung ist, um das System wiederherzustellen, indem Sie die Karte in einen Computer stecken und ausführen:
rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/
Sie können dies auch mit einer Karte tun, auf der sich ein neues Bild befindet (vorausgesetzt, es ist dasselbe wie Ihr Basisbild), obwohl dies ein wenig ineffizient ist, wenn Sie das Bild erstellen müssen (da Sie dann das meiste davon überschreiben). Sie können auch eine andere SD-Karte über einen USB-Adapter mit einem solchen Image anschließen und die oben beschriebene Methode verwenden, um eine doppelte Karte zu erhalten.
Wenn Sie Daten /boot
(z. B. einen benutzerdefinierten Kernel) /boot/config.txt
hinzugefügt haben, möchten Sie diese ebenfalls sichern (ziemlich einfach - da steckt nicht viel dahinter). Tun Sie es einfach separat und wenn Sie wiederherstellen, wird das Zeug in der ersten Partition gespeichert.
Sehen Sie hier, ob Sie ein leeres Bild im Raspbian-Stil erstellen möchten, in das Sie dann ein Backup erstellen können . Sie können eine ähnliche Methode verwenden, um eine leere Karte im Raspbian-Stil zu erstellen. Statt mit einer .img
Datei zu arbeiten, haben Sie es beispielsweise mit einem realen Gerät /dev/sdb
zu tun. Sie müssen also nur die Partitionstabelle mit fdisk
und dann erstellen Format /dev/sdb1
und sdb2
(oder was auch immer) mit mkfs
.
Das Kopieren des gesamten Bildes ist jedoch einfacher! Warum sich damit beschäftigen?
Es ist nicht so schwer; Ich habe in 10 Minuten eine leere Karte wiederhergestellt (formatiert nach dem letzten Link). Ja, es dd
ist einfacher , nur das Ganze zu verwenden (wenn Sie Dinge wie verwirrende Wörter finden ...), ABER es dauert jedes Mal eine Weile, wenn Sie Ihr Backup aktualisieren möchten, da Sie jedes Mal 100% davon ausführen müssen. Unter Verwendung rsync
, sobald eine Sicherung vorhanden ist , ist es die Aktualisierung viel viel schneller, so dass Sie dies einrichten können schmerzfrei jeden Tag über cron passieren. Auch über ein Netzwerk. Alle sechs Stunden. Je öfter Sie es tun, desto weniger Zeit wird es dauern.
rsync
über ssh
Hier ist ein Beispiel:
rsync [options] --rsh="ssh [ssh options]" root@[the pi ip]:/ /backup/rpi/
"Optionen" wäre z. B. -av --delete --exclude-from=/rsync-exclude.txt
und "ssh-Optionen" ist das, was Sie normalerweise verwenden (wenn überhaupt). Sie müssen Root - Zugriff haben über ssh
diese für die Zwecke einer Systemsicherung zu tun (festgelegt PermitRootLogin=yes
in /etc/ssh/sshd_config
und starten Sie den Server).
1 Sie sollten diese Datei behalten. Sie können Kommentare in Zeilen einfügen, die mit #
oder beginnen ;
. Dies kann den eigentlichen rsync
Befehl enthalten, der später kopiert werden kann, damit Sie sich nicht jedes Mal daran erinnern müssen.
2 Danke an Kris für den Hinweis, das rsync
geht nicht automatisch.
dd
, reinschauenrsync
.