Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen.
Danke wenn du uns unterstützt. Weitere Infos zum Bedanken findest Du hier. Diese Seite verwendet hierzu Cookies & Tracking-Cookies, weitere Informationen findest du hier. Wenn du diese Seite weiterhin besuchst, erklärst du dich damit einverstanden.

Diese seite ist neutral und unabhängig. Die Finanzierung erfolgt teilweise über Werbung und Partnerprovisionen. Danke wenn Du mich unterstützt.
Diese Seite verwendet Cookies & Tracking-Cookies, weitere Informationen findest Du hier. Wenn du diese Seite weiterhin besuchst, erklärst du dich damit einverstanden.

(x) Hinweise ausblenden/einblenden.
Diese Seite ist neutral und unabhängig.
Alle Anleitungen stehen zu 100 %
kostenlos zur Verfügung.
Die Finanzierung erfolgt teilweise
über Werbung und Partnerprovisionen.
Danke wenn Du mich dabei unterstützt.

Alle Infos zum Bedanken findest Du hier.

Besuche Amazon vor Deinem nächsten
Einkauf über diesen Danke Affiliate Link.


Hier kannst Du mir mit PayPal Danken.
Du kannst den Betrag auch anpassen.

Gefällt Dir meine Anleitung?
Hier kannst Du mich Bewerten.
5-Stars



____ ___ _ _ _ _ ___ ____ ___ ___ _ _ _ _ ____ |: _ \/.__)|.\_/.||:\|:| /.__) |: _ \ / _ \ /.__)|:|/ )|:| |:||: _ \ |: /\__.\ \ : / |:\ :|(.(__ |: _ (|: _ :|(.(__ |: ( |:|_|:||:___/ |_|\_\(___/ |_| |_|\_| \___) |____/|_| |_| \___)|_|\_)|_____||_|
____ ___ _ _ _ _ ___ ____ ___ ___ _ _ _ _ ____ |: _ \/.__)|.\_/.||:\|:| /.__) |: _ \ / _ \ /.__)|:|/ )|:| |:||: _ \ |: /\__.\ \ : / |:\ :|(.(__ |: _ (|: _ :|(.(__ |: ( |:|_|:||:___/ |_|\_\(___/ |_| |_|\_| \___) |____/|_| |_| \___)|_|\_)|_____||_|

rsync Backup Script für Ubuntu/Debian/Linux.
NAS Datensicherung einfach & sicher.

2020-03-17 © ctaas.de, Arno 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 dass 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=*.tmp --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 (empfohlen).
Auch wenn sich dadurch die Synchronisierung verlangsamt kann ein Vergleich 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=*.tmp] = 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 dass sich folgende Sicherungsmatrix ergibt (Übersicht an welchen Tagen gesichert wird):
Sicherungsrhythmus\Tag 0102030405060708091011121314151617 1819202122232425262728293031Sicherungsordner
täglich x xxxxxxx x xxxxxx x xxxxxxx x xxxxxxx 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 Schrägstrich '/' 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 in Kurzform als Text. Beachtet dabei, dass der Inhalt der Variable von der eingestellten Sprache im System abhängig ist.
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 dass 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
 # Hinweis: Bei einem Betriebssystem mit englischer Spracheinstellung muss man die Wochentagsnamen wie folgt verändern: 'Mon|Tue|Wed|Thu|Fri|Sat|Sun'.
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: 2020-03-17 © ctaas.de, A. Schröder

 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
.~lock*.*#
~$*.*

; '.~lock*.*#' = LibreOffice lock-Dateien.
; '~$*.*' = Microsoft Office lock-Dateien.

 E. Wenn alles läuft 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 bis 20.04, Debian 7 bis 10, 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:
© ctaas.de, A. Schröder, Kahla, Impressum