Beiträge von Sojan im Thema „Rund um Rsync: Tipps - Tricks - Frust“
-
-
Musste festellen, dass es die Option --verbose (-v) zwar noch gibt (und auch funktioniert), es mittlerweile aber eine erweiterte Funktion gibt: --info. Damit lässt sich die Ausgabe am Bildschirm und der Logdatei sehr fein einstellen.
Code
Alles anzeigen-$ rsync --info=help Use OPT or OPT1 for level 1 output, OPT2 for level 2, etc.; OPT0 silences. BACKUP Mention files backed up COPY Mention files copied locally on the receiving side DEL Mention deletions on the receiving side FLIST Mention file-list receiving/sending (levels 1-2) MISC Mention miscellaneous information (levels 1-2) MOUNT Mention mounts that were found or skipped NAME Mention 1) updated file/dir names, 2) unchanged names NONREG Mention skipped non-regular files (default 1, 0 disables) PROGRESS Mention 1) per-file progress or 2) total transfer progress REMOVE Mention files removed on the sending side SKIP Mention files skipped due to transfer overrides (levels 1-2) STATS Mention statistics at end of run (levels 1-3) SYMSAFE Mention symlinks that are unsafe ALL Set all --info options (e.g. all4) NONE Silence all --info options (same as all0) HELP Output this help message Options added at each level of verbosity: 0) NONREG 1) COPY,DEL,FLIST,MISC,NAME,STATS,SYMSAFE 2) BACKUP,MISC2,MOUNT,NAME2,REMOVE,SKIP
Der Befehl sieht dann in etwas so aus. Je höher die Nummer -> mehr Informationen. STATS2 zeigt also mehr als STATS1.
Das bläht den Befehl natürlich sehr auf und lässt ihn unübersichtlich werden. Also packen wir das Ganze in eine Variable, die dann für alle nachfolgenden Rsync-Befehle gilt.
Bash#!/bin/bash info="COPY2,DEL2,NAME1,BACKUP2,REMOVE2,PROGRESS,SKIP2,STATS1" rsync -ah --info=$info /Quelle /Ziel
Meistens läuft das Backup unbeaufsichtigt vor sich hin. Aber was ist in dieser Zeit tatsächlich passiert?
Wir brauchen noch eine Logdatei. Dafür gibt es die Option --log-file
Allerdings würde diese Logdatei bei jedem Durchlauf überschrieben, also noch das Systemdatum + Uhrzeit zum Dateinamen automatisch hinzufügen.
Bash
Alles anzeigen#!/bin/bash #Systemdatum datum=`date +"%Y-%m-%d--%H-%M-%S"` # Pfad zur Logdatei + Dateiname inkl. Datum logfile="/home/DEIN-NUTZER/$datum--rsync.log" # Optionen info="COPY2,DEL2,NAME1,BACKUP2,REMOVE2,PROGRESS,SKIP2,STATS1" # Überschrift des Logs echo "Rsync-Log vom $datum" > $logfile # Start des Backups echo "##### Filme" >> $logfile rsync -ah --info=$info --log-file=$logfile ~/Filme /extPlatte/Filme echo "##### Serien" >> $logfile rsync -ah --info=$info --log-file=$logfile ~/Serien /extPlatte/Serien echo "##### Musik" >> $logfile rsync -ah --info=$info --log-file=$logfile ~/Musik /extPlatte/Musik exit 0
Die Logdatei sieht dann so aus. Ist natürlich davon abhängig, welche Optionen unter --info angegeben wurden.
Code
Alles anzeigenRsync Log vom 2022-04-23--10-42-48 ##### MUSIK 2022/04/23 10:42:49 [9663] receiving file list 2022/04/23 10:42:49 [9665] sent 4,57K bytes received 2,65M bytes 1,77M bytes/sec 2022/04/23 10:42:49 [9665] total size is 1,20T speedup is 452.623,08 ##### FILME 2022/04/23 10:42:51 [9675] receiving file list 2022/04/23 10:42:51 [9677] .d..t...... Der Staatsfeind Nr. 1/ 2022/04/23 10:46:14 [9677] >f.st...... Der Staatsfeind Nr. 1/Der Staatsfeind Nr. 1.mp4 2022/04/23 10:46:14 [9677] >f+++++++++ Der Staatsfeind Nr. 1/Der Staatsfeind Nr. 1.nfo 2022/04/23 10:52:07 [9677] >f+++++++++ Der Unsichtbare/Der Unsichtbare.mp4 2022/04/23 10:52:07 [9677] >f+++++++++ Der Unsichtbare/Der Unsichtbare.nfo 2022/04/23 10:57:13 [9677] >f+++++++++ Der unglaubliche Hulk/Der unglaubliche Hulk.mp4 2022/04/23 10:57:13 [9677] >f+++++++++ Der unglaubliche Hulk/Der unglaubliche Hulk.nfo 2022/04/23 10:57:40 [9677] >f+++++++++ Der unsichtbare Gast/Der unsichtbare Gast.mp4 2022/04/23 10:57:40 [9677] >f+++++++++ Der unsichtbare Gast/Der unsichtbare Gast.nfo
-
Das war der Plan, weil es riesige Dateien mit 100GB gibt und wenn da die Prüfsumme gebildet werden soll und das lange dauern könnte dann soll er das doch bitte sein lassen, diese Fälle würde ich lieber manuell kopieren wollen.
Ob das gut ist weiß ich noch nicht, eine weitere, neben vielen Baustellen.
Sind die großen Dateien vom gleichen Dateityp? Dann könntest du sie mit exclude auch ausschließen.
Beispiel Videodateien:
Oder die maximale Größe festlegen (hier 500 MB)
Die Option --ignore-existing würde mir doch etwas Bauchschmerzen bereiten.
-
Dann zitiere ich mal Vicco von Bülow alias Loriot:
"Ein Leben ohne
MopsSSH ist möglich, aber sinnlos." -
Ja, ich hab das mit dem ssh key gemacht obwohl das immer irgendwie umständlich ist und man ständig damit durcheinander kommt. Aber anders geht es ja nicht wenn man mit einem Script irgendwo drauf will.
Für den täglichen Umgang miit SSH ist es auf jeden Fall hilfreich, wenn du dir eine .ssh/config anlegst.
Dann reicht ein "ssh pihole" und du bist mit dem Pihole-Server verbunden. Brauchst keinen User, Port, Key oder IP-Adresse anzugeben, ist alles in der config hinterlegt.
Und wenn du an mehreren Rechnern arbeitest, dann kopierst du den Key und die Config auf den neuen Rechner und hast deine gewohnte Umgebung.
Code
Alles anzeigen# .ssh/config # bei Standard-Port 22 ist keine Angabe des Ports erforderlich Host server HostName 192.168.178.50 User xxx Port 2222 IdentityFile ~/.ssh/id_home Host pihole HostName 192.168.178.51 User xxx Port 2222 IdentityFile ~/.ssh/id_home Host syncthing HostName 192.168.178.52 User xxx Port 2242 IdentityFile ~/.ssh/id_home
-
SSK Key anlegen
Das war das Stichwort. SSH-Key hatte ich zwar schon, hat aber nicht gegriffen, weil ich den Key nicht angegeben hatte. Hätte der Key einen Standardnamen wie id_rsa gehabt, dann hätte es auch gleich geklappt.
Habe die SSH-Zugänge in der ~/.ssh/config definiert
Damit klappt es dann auch ohne Passwort.
-
Ich könnte natürlich auch wie harihegen rsync über ssh laufen lassen. Dann hätte ich das Problem des Einbindens nicht.
Dafür nervt dann aber die Abfrage des Passworts.
-
Damit hast du aber immer noch das problem wenn unter dem gleichen Pfad was anderes eingebunden ist.
Es ist zwar sehr unwahrscheinlich, dass ich unter dem Verzeichnis ~/Filme nun etwas anderes reinhänge, aber natürlich theoretisch möglich. Vielleicht auch nur versehentlich etwas reinkopiert.
Ich könnte in die einzubindenen Laufwerke z. B. eine Textdatei mit dem Inhalt 123456 reinstellen und dann in dem Script gezielt nach Datei + Inhalt abfragen. Nur wenn beides übereinstimmt, dann läuft das Backup. Das sollte dann sicher sein.
Wie konnte denn das ~/ verzeichnis fehlen?
Verstehe ich nicht ganz.
Ich wollte das Verzeichnis ~/Filme auf die externe Festplatte sychronisieren. Da unter Filme aber dummerweise nicht das NAS-Verzeichnis eingebunden war, blieb das lokale Verzeichnis ~/Filme ohne Inhalt. Und nach Durchlauf des Scripts war dann auch das Verzeichnis /Filme auf der externen Festplatte leer.
-
Die Option --ignore-existing scheint tatsächlich Dateien zu ignorieren, die im Ziel bereits vorhanden sind, auch wenn diese in der Quelle verändert werden. Die Option -c hatte keinen Einfluss darauf.
-
Was bewirkt denn --ignore-existing ?
Überspringt die vorhandenen Daten und schreibt nur die neuen
Was passiert denn, wenn eine bereits vorhandene Datei in der Quelle verändert wurde? Wird diese dann ignoriert?
-
Ich denke ich habe gelesen das rsync default das Ziel nicht löscht? Hab ich das falsch gelesen?
Da muss ich ja mal gucken gehen, nicht das was kaputt geht hier ...Liegst richtig, da wird nichts gelöscht.
Ich habe aber die Option --delete mitgegeben, weil ich eine 1:1 Kopie haben will.
Bei meinem Backupserver nutze ich die Option --backup-dir, dann wird vor dem Löschen der Datei im Ziel eine Sicherungskopie in einem separates Verzeichnis erstellt.
-
Wenn ich z.B. mal vergesse meine USB-HD zu mounten, dann sagt mir rsnapshot das und macht nix weiter.
Quelle und Ziel waren ja vorhanden, deshalb lief das Script ja auch schön durch. Nur war die Quelle halt leer...
Nach dem "Unfall" musste ich meinen Frust hier mal niederschreiben, ist gerade keiner zu Hause zum Reden.
-
Eigentlich gehört dieser Beitrag in die Rubrik "dumm, dümmer, am Dümmsten", habe ich aber nicht gefunden.
Alles begann damit, dass ich meine NAS-Verzeichnisse nicht mehr automatisch auf dem Desktop einbinde, sondern nur noch bei Bedarf mounte. Dazu eine benutzerdefinierte Aktion in Thunar eingerichtet. So weit so gut.
Jetzt stand das monatliche Backup auf eine externe Festplatte an. Dazu nutze ich ein simples Bash-Script und rsync.
Bash#!/bin/bash rsync -av --progress --delete --stats ~/Filme/ /extPlatte/Filme rsync -av --progress --delete --stats ~/Serien/ /extPlatte/Serien rsync -av --progress --delete --stats ~/Fotos/ /extPlatte/Fotos exit 0
Die drei Ordner liegen alle auf dem Server und sind eingebunden auf dem Desktop...hätten. Leider habe ich vorab vergessen, diese Ordner einzubinden und waren somit alle nur leere Hüllen auf dem Desktop.
Ich konnte gar nicht so schnell reagieren, wie 7 TB an Daten auf der Backup-Festplatte gelöscht wurden. Autsch!
Falls jemand eine ähnliche Konstruktion fährt, dem kann ich eine Absicherung empfehlen, die vorab prüft, ob die zu sichernden Ordner überhaupt eingebunden sind.
Prüft, ob die Verzeichnisse Inhalte haben (also eingebunden sind). Wenn nein, dann wird das Script mit "exit 1" beendet.
Bash
Alles anzeigen#!/bin/bash # Prüfen, ob die Verzeichnisse eingebunden sind # Zählt die Ordner, die KEINE Inhalte haben folder=$(find ~/Filme ~/Serien ~/Fotos -maxdepth 0 -empty | wc -l) # Haben alle Ordner Inhalte, dann ist $folder = 0 # wenn $folder -ne 0 (not equal 0), dann abbrechen if [ $folder -ne 0 ]; then echo "Achtung!! Nicht alle Verzeichnisse sind eingebunden" exit 1 fi # Start Backup rsync -av --progress --delete --stats ~/Filme/ /extPlatte/Filme rsync -av --progress --delete --stats ~/Serien/ /extPlatte/Serien rsync -av --progress --delete --stats ~/Fotos/ /extPlatte/Fotos exit 0
Und jetzt läuft schon seit Stunden das Backup und wird noch laaaange dauern.