Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen.
Danke wenn Sie uns unterstützen. Diese Seite verwendet hierzu Cookies & Tracking-Cookies. Wenn Sie diese Seite weiterhin besuchen, erklären Sie sich damit einverstanden. (Danke!)

Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen. Danke wenn Sie uns unterstützen.
Diese Seite verwendet hierzu Cookies & Tracking-Cookies. Wenn Sie diese Seite weiterhin besuchen, erklären Sie sich damit einverstanden.

rsync linux backup script

rsync Datensicherung einfach & sicher.

2017-03-14 © ctaas.de, A. Schröder [Impressum]


rsync kann Dateien von einem Quellverzeichnis zu einem Zielverzeichnis synchronisieren.
Bei der Synchronisation werden in der Regel nur veränderte Dateien übertragen, so das eine Sicherung relativ schnell abgeschlossen ist.
Daher ist rsync hervorragend geeignet, um größere bzw. regelmäßige automatisierte Sicherungen durchzuführen.

Das hier vorgestellte Sicherungsscript ist nur für Daten vorgesehen. Es geht hier also nur um typische NAS-Sicherungen. Hardlinks und Softlinks auf Systemebene werden hier ausdrücklich nicht berücksichtigt.
Das Backup soll immer als Vollbackup durchgeführt werden. Weiterhin sollen verschieden alte Sicherungen (nach dem Großvater-Vater-Sohn Generationenprinzip) gespeichert werden.
Das Script wurde bewusst einfach gehalten, so dass man es leicht an eigene Ansprüche anpassen kann.

1. rsync Sicherungsbeispiel (mirroring):



Zuerst ein Beispiel zur Erklärung:
rsync -rtpgov --delete -hh --checksum --stats --exclude=.~* --link-dest=/quelle/ /quelle/ /ziel/

Parametererklärung:
[-r] = (recursive) Unterverzeichnisse mit kopieren.
[-t] = (time) Zeitstempel beibehalten.
[-p] = (preserve permission) Dateirechte beibehalten.
[-g] = (group) Gruppenrechte beibehalten.
[-o] = (owner) Besitzrechte beibehalten.
[-v] = (verbose) ausführliche Anzeige (sollte man nicht unbedingt im crontab angeben).

[--delete] = Dateien die nicht mehr im Quellverzeichnis vorhanden sind, werden im Zielverzeichnis gelöscht.

[-hh] = (human readable) Ausgaben besser lesbar ausgeben (Umrechnungsfaktor 1024) in kilobyte, megabyte usw.

[--checksum] = vergleicht Dateien nicht nur anhand der Größe und Uhrzeit, sondern auch nach dem Inhalt - das verlangsamt das synchronisieren ungemein.
Der Vergleich kann aber trotzdem sehr wichtig sein, um z. B. Dateien zu erkennen die Inhaltlich verändert wurden (z. B.  durch Hardwaredefekte, oder durch Viren & Trojaner).

[--stats] = einen ausführlichen Report am Ende ausgeben (sollte man eventuell nicht im crontab angeben).

[--exclude=.~*] = entsprechende Dateien/Verzeichnisse werden nicht gesichert. Hinweis: Es kann hier immer nur ein Eintrag angegeben werden.
[--exclude-from=Datei] = hat man mehrere auszuschließende Einträge (wie z. B. .~* *.tmp desktop.ini Thumbs.db .recycle ...), so werden diese in einer extra Datei, zeilenweise angegeben.

[--link-dest=/quelle/] = sorgt dafür, das nur veränderte Dateien kopiert werden.
Von allen anderen Dateien werden nur Hardlinks auf die angegebene Quelle erstellt (nur wenn die Sicherung auf demselben Laufwerk liegt). Das spart Speicherplatz und beschleunigt das sichern enorm.
Wichtig: Man sollte beachten, dass jede Datei nur einmal physisch existiert wenn man Hardlinks verwendet. Ein defekt der Originaldatei macht alle Verlinkungen ebenso unbrauchbar. Daher sollte man [--checksum] immer mit verwenden.

[/quelle/] = bestimmt das Quellverzeichnis (die Angabe erfolgt mit dem kompletten Pfad). Dieses Verzeichnis wird nur gelesen und nicht verändert.
[/ziel/] = bestimmt das Zielverzeichnis (mit Pfad) wohin die Dateien kopiert/synchronisiert werden. Wichtig: Man darf das Quell und Zielverzeichnis niemals verwechseln.

2. rsync Sicherung (lokal NAS snapshot):



 A. Ziel: Auf einem NAS-Server sind Daten für Anwender im Netzwerk freigegeben.
Diese sollen nun regelmäßig automatisiert gesichert werden, um diese im Bedarfsfall wieder herstellen zu können.

Die Sicherung soll dabei wie folgt durchgeführt werden:

So das sich folgende Sicherungsmatrix ergibt (Übersicht an welchen Tagen gesichert wird):
Sicherungsrhythmus\Tag 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Sicherungsordner
täglich x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Mo, Di, Mi, Do, Fr, Sa, So
Wochen x x x 09, 16, 24
gerade & ungerade Monate x Mg, Mu

Tabellenerklärung:

Oben sind die Kalendertage von 1-31 eingetragen. Ein [x] kennzeichnet den Tag, an dem gesichert wird - doppelte Sicherungen [x] werden dabei ausgelassen.
Die Spalte [Sicherungsordner] gibt an, in welchem Ordner die Sicherung an dem Tag gespeichert wird.

 B. Zur Sicherung wird wie eben rsync verwendet.
Man legt folgendes Sicherungsscript an (die Pfade entsprechend anpassen):
nano cron_back.sh

#!/bin/bash
# Den Pfad zum Quell- und Backupverzeichnis ohne abschließenden '/' angeben.
quelle=/pfad/quelle      
# Welches Verzeichnis soll gesichert werden?
backup=/pfad/backup      
# Wo sollen die Sicherungen gespeichert werden?
nosave=/pfad/exclude.txt
# Ausschlüsse werden in dieser Datei zeilenweise eingetragen.
# Ab hier muss man eigentlich nichts mehr ändern.

# Ausschlussdatei neu anlegen, nur falls noch keine existiert:
touch $nosave

# Datum ermitteln:
wochentag=$(date +"%a")
# %a = Wochentag als Text.
tag=$(date +"%d")      
# %d = Tagdatum als zweistellige Zahl.
monat=$(date +"%m")    
# %m = Monatsdatum als zweistellige Zahl.

# Backup Funktion definieren:
function backup ()
{
 rsync -rtpgov --delete --checksum -hh --stats --exclude-from="$nosave" --link-dest="$quelle/" "$quelle/" "$backup/$1/" >"$backup/_letzte_Sicherung.txt" 2>&1
 # alle protokollierende Standardausgaben und ggf. auftretende Fehlerausgaben (2>&1) werden in der Datei "_letzte_Sicherung.txt" gespeichert.
 echo -e '\n'-- '\n'letzte Sicherung: $(date "+%Y-%m-%d %H:%M:%S") >> "$backup/_letzte_Sicherung.txt"
 # Das Logfile kann während der Sicherung nicht direkt im Sicherungsordner liegen, so das dieses im Anschluss dorthin verschoben wird.
 mv $backup/_letzte_Sicherung.txt $backup/$1/_letzte_Sicherung_$(date "+%Y-%m-%d").txt
 # Optional: Sicherungsprotokoll per E-Mail versenden (ein eingerichteter MTA (mail transfer agent siehe Punkte A-I) ist Voraussetzung):
 # mail -s "Protokoll" backup@ctaas.com <$backup/$1/_letzte_Sicherung*.txt
}

## tägliche Sicherung (Montag - Sonntag):
# Nur wenn der Tag nicht der 01, 09, 16 oder 24 ist wird hier gesichert - sonst wird eine Wochen- oder Monatssicherung durchgeführt:
if [[ $tag != 01 && $tag != 09 && $tag != 16 && $tag != 24 ]]; then
 # und wenn Wochentag = ... dann Sicherung im Unterordner vom Wochentag:
 case "$wochentag" in Mo|Di|Mi|Do|Fr|Sa|So) backup $wochentag ;; esac
fi

## Wochensicherungen:
# Hinweis:
# 1. Woche ist die Monatssicherung.

# 2. Woche (9. Tag):
case "$tag" in 09) backup 09 ;; esac

# 3. Woche (16. Tag):
case "$tag" in 16) backup 16 ;; esac

# 4. Woche (24. Tag):
case "$tag" in 24) backup 24 ;; esac

## Monatssicherungen:
# wenn gerader Monat (Mg):
case "$monat" in 02|04|06|08|10|12)
 # und wenn 1.ter im Monat:
 case "$tag" in 01)
 backup Mg
 ;; esac
;; esac

# wenn ungerader Monat (Mu):
case "$monat" in 01|03|05|07|09|11)
 # und wenn 1.ter im Monat:
 case "$tag" in 01)
 backup Mu
 ;; esac
;; esac

# Alternativ: Jeden Monat ein Backup am 1. des Monats:
# case "$tag" in 01) backup Monat_$monat ;; esac

# Alternativ: Jahressicherung am 1.1. des Jahres:
# case "$tag" in 01) case "$monat" in 01) backup Jahr_$(date +"%Y") ;; esac ;; esac

# rsync script: 2017 © Computertechnik Schröder, Arno Schröder, Kahla

 C. Das Script ausführbar machen und starten:
chmod +x cron_back.sh
./cron_back.sh

 D. Will man von der Sicherung noch verschiedene Daten ausschließen, so füllt man nun noch die entsprechende Datei:
nano exclude.txt

; Folgende Dateien und Ordner werden von der Sicherung ausgenommen:
.~*
*.tmp
?esktop.ini
Thumbs.db
.recycle

 E. Wenn alles läuft, so kann man das Script als geplanten Task (cronjob) regelmäßig ausführen:
crontab -e
# Hinweis: Es gibt getrennte crontab's für User und root.
# Soll das Script als root gestartet werden, so muss crontab auch mit dem root-User eingerichtet werden.

Hier dann die Zahl X die vor [/bin/nano   <---- easiest] steht eingeben und mit Enter bestätigen.
Hat man einen falschen Editor gewählt, so kann man mittels [export EDITOR=nano] oder über [select-editor] einen anderen bevorzugten Editor einstellen.

Man sieht nun einen Editor, mit mehreren Zeilen und ggf. Sternchen, letztere haben je nach Stelle folgende Bedeutung:
# m h dom mon dow command
# m = Minuten (*/10=bedeutet alle 10 Minuten, 0 bedeutet volle Stunde, 0-59 Minuten).
# h = Stunden (*/3=bedeutet alle 3 Stunden, 12 bedeutet 12 Uhr, 0-23 Uhr).
# dom = Tag (1-31 Tag).
# mon = Monat (1-12 Monat).
# dow = Wochentag (0-7 Wochentag, Sonntag ist 0 und 7).
# command = Der auszuführende Befehl.

Diese vorhandenen Zeilen lässt man unverändert stehen. Am Ende fügt man in einer neuen Zeile folgendes ein:
0 1 * * * /pfad_zum_Sicherungsscript/cron_back.sh
# Das Script wird hier täglich um 01:00 Uhr gestartet.
# Wichtig: Am Ende bitte ein bis zwei Leerzeilen eingeben (diese kennzeichnen das Ende).

Das Script über die Eingabe Strg + O und Enter speichern und über Strg + x beenden.

Die Sicherung sollte nun ab sofort automatisch ablaufen.

Wiederherstellen kann man eine Sicherung sehr einfach. Man kopiert einfach die benötigten Dateien aus dem entsprechenden Sicherungsordner zurück.
Anhand der Logdatei "_letzte_Sicherung_JAHR-MONAT-TAG.txt" im jeweiligen Sicherungsordner, kann man auch leicht feststellen wann zuletzt gesichert wurde.

❑  Abschließende Hinweise:


IP-Adressen, E-Mailadressen, Namen u. ä. wurden für die Dokumentation geändert, hacken ist also zwecklos.
Die Nutzung der Anleitung erfolgt auf eigene Gefahr, für jegliche Schäden wird keine Garantie/Haftung übernommen!
Die Dokumentation entstand aus verschiedenen Tests unter Ubuntu 14.04 sowie 16.04, sowie produktiven Installationen. Diese Anleitung stellt somit eine Zusammenfassung wichtiger und empfohlener Schritte dar.
Bevor Sie eventuell Fragen stellen bitte ich sie die Dokumentation komplett zu lesen.
Hinweise auf Fehler, Anregungen, Danksagungen oder ähnliches sind immer willkommen.

Design:
© 2017 ctaas.de, Arno Schröder, Kahla (Impressum)