This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

rsync-backup-script für inkrementelle backups
#1
Hallo Zusammen,

hier zur Anregung ein kleines Rsync-Backup-Skript. Das erste Backup wird als vollständiges Backup ausgeführt, alle folgenden werden mit Hilfe von Linux-Hardlinks als inkrementelle Backups ausgeführt. Auf das letzte Backup verweist am Ende der Ordner "last". Das Skript stammt nicht vollständig aus meiner Feder. Ich benutze es schon länger,  daher habe ich leider keine originale Quelle mehr.

Code:
#!/bin/bash

QUELLE=/home/user/
ZIEL=/home/user/NAS/linux-mint-pc/
IGNORE1=/home/user/NAS/
IGNORE2=/home/user/.cache/
HEUTE=$(date +%Y-%m-%d)

rsync -vrR --exclude="${IGNORE1}" --exclude="${IGNORE2}" --delete "${QUELLE}" "${ZIEL}${HEUTE}/" --link-dest="${ZIEL}last/"
ln -nsf "${ZIEL}${HEUTE}" "${ZIEL}last"

exit 0
Mein Heimatgrid: https://swissgrid.opensim.ch
Zitieren
#2
Hallo Jules,

denke ein Backup ist so ziemlich das wichtigste was man haben sollte. Ein halbes Jahr Arbeit kann so leicht in Sekunden zerstört sein.

Möglichwerweise könntest diesen Betrag um einige Zeilen bezüglich Anpassung der Pfade und Benutzung erweitern.

Denke das wäre besonders für Einsteiger besonders hilfreich, insofern es deine Zeit erlaubt.

Cool

Vielen Dank Jules
All done!
Zitieren
#3
Hallo Lukas,

ja, das kann ich machen. Es wird aber wahrscheinlich erst am Wochenende etwas, ich muß schauen wann es reinpasst.

Ciao Jules.
Mein Heimatgrid: https://swissgrid.opensim.ch
Zitieren
#4
Hallo Zusammen,

auf die Bitte von Lukas hin, versuche ich mein Backupskript etwas detailierter zu beschreiben.

1) Mounten des NAS:
=================
Sollte man ein NAS als Backupziel benutzten, gehört dieser Schritt zur Vorbereitung.  Man sollte für sein NAS eine Zeile wie die folgende in die Datei /etc/fstab hinzufügen. Dafür sind Admin-Rechte notwendig. Daher lautet der Aufruf des Editors Nano: "sudo nano /etc/fstab".

nas.fritz.box:volume1/daten    /home/user/NAS    nfs     users,rw,_netdev,noauto,nofail    0    0

nas.fritz.box:volume1/daten:
--------------------------------------
Der erste Eintrag ist der Pfad auf dem NAS, und ist abhängig von der Einrichtung des NAS. Da es unheimliche viele NAS Hersteller gibt möchte ich auf diesen Punkt nicht genauer eingehen.

/home/user/NAS:
-----------------------
Das ist der Mountpunkt im eigenen Homeverzeichnis. Also das Verzeichnis wo der Pfad des NAS eingebunden wird. Vergesst nicht das Verzeichnis NAS in eurem Homeverzeichnis anzulegen.
$ mkdir /home/user/NAS

nfs (Network filesystem):
---------------------------------
Um Zugriff auf das Filesystem über das Netzwerk zu erlangen wird das Protokoll Nfs benutzt. In Netzwerken mit Windowsrechnern wäre noch Samba denkbar, das macht aber in einem reinen Linux-Netzwerk keinen Sinn.

Die Optionen:
------------------
noauto - Das Medium wird nicht automatisch gemountet
nofail   - Das Medium ist nicht unbedingt notwendig. Der Bootvorgang kann auch ohne dieses Medium fortgesetzt werden.
rw        - Schreib- und Leserechte für das Medium.
user    - Normale User können das Mounten dieses Mediums auslösen.
_netdev - Für den Zugriff auf das Medium ist Netzwerkzugriff notwendig. Das System versucht erst das Medium zu mounten, wenn Netzzugriff besteht.


Ist dieser Eintrag erstellt worden, und der Rechner fehlerlos wieder gestartet. Erscheint ein Eintrag NAS im Dateimanager. Das NAS kann im einfachsten Fall mit einem Klick auf diesen Eintrag im Dateimanager gemountet werden. Ein Mounten per Skript ist natürlich auch möglich, das handhabe ich aber nicht so. Das kann jeder machen wie er möchte. Mehr Infos zum mount-Befehl erhaltet ihr mit dem Befehl: "man mount". Zu dem Thema Linux mount nfs werdet ihr über google garantiert fündig. Das ist aber wie gesagt nicht unbedingt notwendig.


Code:
#!/bin/bash

QUELLE=/home/user/
ZIEL=/home/user/NAS/linux-mint-pc/
IGNORE1=/home/user/NAS/
IGNORE2=/home/user/.cache/
IGNORE3=/home/user/.cert/
IGNORE4=/home/user/.ssh/
HEUTE=$(date +%Y-%m-%d)

rsync -vrR --exclude="${IGNORE1}" --exclude="${IGNORE2}" --exclude="${IGNORE3}" --exclude="${IGNORE4}" --delete "${QUELLE}" "${ZIEL}${HEUTE}/" --link-dest="${ZIEL}last/"
ln -nsf "${ZIEL}${HEUTE}" "${ZIEL}last"

exit 0


2) Das Skript:
===========

Am Anfang des Skriptes im ersten Abschnitt seht ihr die Vereinbarungen von einigen Variablen.
QUELLE = Die kompletten relativen Pfade unterhalb diesen Pfades sollen gesichert werden.
ZIEL = Die kompletten relativen Pfade unterhalb der QUELLE werden hier vollständig gesichert.
IGNOREX = Pfade die durch rsync beim Backup ignoriert werden sollen.
HEUTE = Hier wird das aktuelle Datum ermittelt und in dieser Variable gespeichert. Diese Variable wird als Pfadname für das aktuelle Backup benutzt.

Was sind nun absolute und relative Pfade?
/home/user/Dokumente/Notizen - Das ist der absolute Pfad zum Ordner "Notizen". Dieser absolute Pfad ist immer gültig.
./Dokumente/Notizen - Der Punkt steht für das aktuelle Verzeichnis(Ordner). Der Rest ist der relative Pfad zum Verzeichnis "Notizen" vom aktuellen Verzeichnis aus. Dieser relative Pfad ist nur ausgehend vom Verzeichnis /home/user gültig.

Noch ein Wort zu der folgenden Zeile:
"IGNORE1=/home/user/NAS/"
Das Verzeichnis NAS liegt unterhalb der QUELLE. Würde man das Verzeichnis NAS beim Backup nicht ignorieren, würde sich so etwas wie eine Endlosschleife ergeben. Das dürfte zum Absturz Skriptes führen.

Der zweite Befehl:
-------------------------
Betrachten wir uns als erstes den zweiten Befehl: ln -nsf "${ZIEL}${HEUTE}" "${ZIEL}last"
Hier wird ein symbolischer Link "last" auf das aktuelle/letzte Backup erzeugt. Auf das letzte Backup kann man also immer über ein und den selben Namen zugreifen. Das wird für den Rsync Befehl und den inkrementellen Backups wichtig.

-s einen symbolischen Link anlegen
-f Hardlinks zu Dateien anlegen, wenn sie nicht geändert wurden.
-n (no-dereference)behandeln Sie LINK_NAME als normale Datei, wenn es sich um einen symbolischen Link zu einem Verzeichnis handelt (etwas unverständlich)

Die letzte Option könnte man eventuell so erklären: "Über Pointer greift man in der Programmierung auf den Inhalt von Objekten im Speicher zu. Das nennt man Dereferenzierung. Ein Ordner selbst hat keinen Inhalt, daher soll hier keine Dereferenzierung erfolgen."

Ein symbolischer Link ist eine Verbindung zu einem Verzeichnis oder einer Datei die in einem anderen Verzeichnis liegt.
Es können mehrere Hardlinks auf ein Verzeichnis oder einer Datei verweisen. Das jeweilige Verzeichnis oder die jeweilige Datei wird erst gelöscht, wenn der letzte Hardlink auf diese(m) gelöscht wird.

Der rsync Befehl:
-----------------------

-v    Erhöht die Informationen die man während des Backups zu sehen bekommt. Ein einzelnes -v wird geben Ihnen Informationen darüber, welche Dateien übertragen werden, und eine kurze Zusammenfassung am Ende.
-r    Kopiert die Verzeichnisse rekursive
-R   Verwendet relative Pfade. Damit ist gemeint, das unter dem Zielpfad der vollständige Pfad ausgehend vom Quellpfad erhalten bleibt.
--delete    Dateien die in der Quelle nicht mehr vorhanden sind, werden im Ziel gelöscht. (Kann für mehr Sicherheit weggelassen werden.)
--link-dest    Hardlink auf Dateien anlegen, wenn sie nicht verändert wurden.

v: Die erste Option sorgt nur für mehr Informationen die während des Backups auf der Kommandozeile angezeigt werden.
r: Rekursive ein Verzeichnis kopieren heisst, ein Verzeichnis mit der kompletten Verzeichnisstruktur darunter zu kopieren.
R: Bewirkt das unterhalb von QUELLE und ZIEL mit relativen Pfaden mit QUELLE und ZIEL als Ursprung gearbeitet wird.


Ist das Verzeichnis "last" nicht vorhanden wird ein vollständiges Backup erzeugt. Ist das Verzeichnis "last" vorhanden, werden auf nicht geänderte Dateien in "last" nur Hardlinks erzeugt.
Das heisst, nach einem vollständigen ersten Backup werden nur noch inkrementelle Backups angelegt.
Mein Heimatgrid: https://swissgrid.opensim.ch
Zitieren
#5
Danke Jules,

wer das Script verstanden hat und sich etwas weiter für Network Attached Storage als NAS interessiert,

kann sicher heute auch auf TrueNAS zurückgreifen und etwas eigenes basteln.

Damals war mir diese Software noch unter FreeNAS bekannt. Was sich genau geändert hat, kann ich aber nicht sagen.

Wir sich da einlesen möchte: Link

oder auch: Link
All done!
Zitieren
#6
Ich habe gerade meine originale Quelle wiedergefunden, das ist unter dem folgenden Link der Abschnitt "Beispiel Minimal Variante".
https://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC/

Ich habe oben die Möglichkeit des Backups über NFS (Network file system) gewählt, weil man das NAS so nahtlos in den eigenen Verzeichnisbaum einbinden kann, und mein NAS lokal verfügbar ist. Solltet ihr auf einen Internetserver eure Daten sichern wollen, wählt besser die Variante über SSH.
Mein Heimatgrid: https://swissgrid.opensim.ch
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste