Das folgende Skript verwende ich, um eine Datensicherung von meinem Linux Client auf ein openmediavault mit rsync durchzuführen.
In einem früheren Beitrag habe ich das Einbinden von einer FRITZ!Box NAS bereit ausführlich beschrieben.
➡ AVM NAS als Festplatte bei Raspberry Pi als Festplatte mounten
Für die Datensicherung von meinem Linux Client soll das freigegebene Laufwerk aber nicht global mit sudo
eingebunden werden, sondern mit einem normalen Benutzer.
Auf dem Client wird das Paket benötigt
sudo apt install cifs-utils
Im nächsten Schritt sind die Zugangsdaten für die CIFS-Freigabe zu erstellen. Ihr müsst dabei unbedingt berücksichtigen, dass euer Benutzer einen lesendenzugriff auf die Datei benötigt! Die Datei mit dem Namen auth legen wir deshalb einfach mal im Home-Verzeichnis an.
cd
nano auth
Der Inhalt der Datei ist folgendermaßen aufgebaut.
username=benutzername
password=passwort
Im nächsten Schritt sind noch zwei neue Ordner anzulegen, in die
- die CIFS-Freigabe gemountet werden kann
- das BACKUPDIRECTORY in das die gelöschten Dateien geschrieben werden sollen (Optional)
cd
mkdir openmediavault
cd openmediavault
# Dieser Ordner ist im Skript ${TARGET}
mkdir sicherung
# Dieser Ordner ist im Skript ${BACKUPDIRECTORY1}
mkdir backupdirectory
Damit normlale Benutzer auch Verzeichnise einbinden können, sind diese in der /etc/fstab einzutragen.
sudo nano /etc/fstab
Die Zeile tragt ihr einfach am Ende der Datei ein.
//192.168.1.40/Sicherung /home/benutzer/openmediavault/sicherung cifs noauto,user,credentials=/home/benutzer/auth 0 0
- //192.168.1.40/Sicherung = Der freigegebene CIFS-Ordner auf dem openmediavault
- /home/benutzer/openmediavault/sicherung = das neu angelegte Verzeichnis auf dem Client (mount point)
- /home/benutzer/auth = Pfad zur Datei mit den Anmeldedaten
Ganz wichtig sind die Optionen
- noauto = Das Verzeichnis wird nicht beim Starten des Clients versucht zu mounten, sondern erst nach Eingabe des Befehls
mount /home/benutzer/openmediavault/sicherung/
- user = erlaubt normalen Benutzer das Verzeichnis einzubinden
Gib mir gerne einen Kaffee ☕ aus!
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.
bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj
Das Skript legt ihr irgendwo im Home-Verzeichnis eures Benutzer ab.
cd
sudo nano backup.sh
Und kopiert den Inhalt in diese Datei.
#!/usr/bin/env bash # This script creates a full backup of the SOURCE directory which is located on the laptop # The backup location is the openmediavault ################################### # Define Variables ################################### # Name of backup BACKUP="backup-openmediavault" # Backup storage BACKUPSTORAGE="/home/benutzer/openmediavault/sicherung/" ################################### # 1st Backup Folder Definition ################################### #Source patch SOURCE="/home/benutzer/Dokumente/" #Target path on BACKUPSTORAGE TARGET="/home/benutzer/openmediavault/sicherung/Sicherungsdateien/dokumente/" #Exclude from RSYNC file EXCLUDEFILE="/home/benutzer/backupsbackup-openmediavault-excludefile.txt" #BACKUP Directory # In dieses Verzeichnis werden alle Dateien kopiert die während des rsync-Laufs durch die Option --delete gelöscht werden. # Diese Option erzeugt eine hohe Systemlast und eine sehr lange Laufzeit des Skripts #BACKUPDIRECTORY=${} ################################### # 2nd Backup Folder Definition ################################### #Source patch SOURCE1="/home/benutzer/Bilder/Jahr-2021/" #Target path on BACKUPSTORAGE TARGET1="/home/benutzer/openmediavault/sicherung/Bilder/" #Exclude from RSYNC file EXCLUDEFILE1="/home/benutzer/backupsbackup-openmediavault-excludefile1.txt" #BACKUP Directory # In dieses Verzeichnis werden alle Dateien kopiert die während des rsync-Laufs durch die Option --delete gelöscht werden. # Diese Option erzeugt eine hohe Systemlast und eine sehr lange Laufzeit des Skripts BACKUPDIRECTORY1="/home/benutzer/openmediavault/backupdirectory/" #Globales LOGFILE LOGFILE="/home/benutzer/backupsbackup-openmediavault-logfile.log" ################################### #Starts rsync Process From Source to Target ################################### # Copies the files from Source to Target # -a fasst folgende Optionen zusammen: # -r kopiert Unterverzeichnisse # -l kopiert symbolische Links # -p behält Rechte der Quelldatei bei # -t behält Zeiten der Quelldatei bei, # -g behält Gruppenrechte der Quelldatei bei # -o behält Besitzrechte der Quelldatei bei (nur root) # -D behält Gerätedateien der Quelldatei bei (nur root) # -v: zeigt während des Synchronisierens alle ausgeführten Schritte an # -h: human readable # -c: aktiviert einen Dateivergleich, basierend auf Prüfsumme und nicht auf Größe und Zeitstempel. Die eigentliche Prüfsummenbildung dauert DEUTLICH länger als der Vergleich Größe und Änderungs-Zeitstempel; andererseits werden überflüssige Kopiervorgänge (z.B. bei nur geänderter Änderungszeit) vermieden. # -n: simuliert nur was passieren würde ("dry run") # -b: sorgt dafür, dass durch die Option --delete gelöschte sowie alle veränderten Objekte gesichert werden (--backup-dir=) # -P: aktiviert folgende Optionen: # --progress Fortschrittsanzeige beim Transfer anzeigen # --partial Fortsetzung des Transfers bei Abbruch # --stats: zeigt einen ausführlicheren Bericht am Ende einer Übertragung an. # --delete: vergleicht Quellverzeichnisse und Zielverzeichnisse und sorgt dafür, dass Dateien, die im Quellverzeichnis nicht (mehr) vorhanden sind, im Zielverzeichnis gelöscht werden. Dies kann dazu führen, dass man ungewollt Dateien löscht, die man aber noch in der Sicherung behalten möchte. # --ignore-existing: Überspringt die vorhandenen Daten und schreibt nur die neuen # siehe https://wiki.ubuntuusers.de/rsync/ # Dieser Abschnitt erklärt die Syntax von rsync #sudo rsync -av --stats --delete --log-file=${LOGFILE} --exclude ${EXCLUDE} --exclude ${EXCLUDE1} --exclude ${EXCLUDE2} --exclude ${EXCLUDE3} --exclude ${EXCLUDE4} ${SOURCE} ${TARGET} # Ohne Log Files #sudo rsync -av --stats --exclude-from=${EXCLUDEFILE} --delete ${SOURCE} ${TARGET} # This mount the BACKUPSTORAGE mount ${BACKUPSTORAGE} echo $(date +%Y-%m-%d_%H-%M-%S) " - Start rsync process" echo $(date +%Y-%m-%d_%H-%M-%S) " - Start rsync process - 1st Backup Folder" # 1st Backup Folder rsync -avhPn --stats --delete --exclude ${EXCLUDE} --log-file=${LOGFILE} ${SOURCE} ${TARGET} echo $(date +%Y-%m-%d_%H-%M-%S) " - Start rsync process - 2nd Backup Folder" # 2nd Backup Folder rsync -avhcPn --stats --delete --backup-dir=${BACKUPDIRECTORY1} --exclude ${EXCLUDE} --exclude ${EXCLUDE1} --log-file=${LOGFILE} ${SOURCE1} ${TARGET1} echo $(date +%Y-%m-%d_%H-%M-%S) " - Finished rsync process" echo $(date +%Y-%m-%d_%H-%M-%S) " - Checkout the backupdirectory " exit 0
Danach ist die Datei ausführbar zu machen und das Backup kann gestartet werden.
sudo chmod o+x backup.sh
Und gestartet wird das Ganze zum Abschluss mit
./backup.sh
Beachtet, dass im Skript die Option n aktiviert ist und es nur ein Dry-Run ist. Es werden also noch keine Änderungen durchgeführt.
Photo by Art Wall – Kittenprint on Unsplash

ist absolut technik-begeistert und großer Fan von Linux und Open Source. Raspberry Pi Bastler der ersten Stunde und nach wie vor begeistert von dem kleinen Stück Hardware, auf dem er tolle Projekte umsetzt. Teilt hier seine Erfahrungen mit Nextcloud, Pi-hole, YubiKey, Synology und openmediavault und anderen spannenden IT-Themen. Nutzt Markdown und LaTeX zum Dokumentieren seiner Projekte und Gitea zum Versionieren. Sitzt vor einem 49“ Monitor, nutzt Windows und MacOS zum Arbeiten, Linux auf seinen Servern und virtuellen Maschinen und hört dabei Spotify und MP3s und Radio-Streams über seinen RadioPi.