Beiträge von Sojan im Thema „Rund um Rsync: Tipps - Tricks - Frust“

    Wenn sich die Familie beschwert, dass durch stundenlanges Backup die Geschwindigkeit im Netzwerk leidet, dem kann geholfen werden.

    Durch die Option --bwlimit lässt sich die maximale Geschwindigkeit festlegen. In diesem Beispiel sind es 50 MB/s.

    Code
    rsync -ahv --bwlimit=50m  /Quelle /Ziel

    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.

    Der Befehl sieht dann in etwas so aus. Je höher die Nummer -> mehr Informationen. STATS2 zeigt also mehr als STATS1.

    Code
    rsync -ah --info=COPY2,DEL2,NAME1,BACKUP2,REMOVE2,PROGRESS,SKIP2,STATS2 /Quelle /Ziel

    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

    Code
    rsync -ah --info=$info --log-file=rsync.log  /Quelle /Ziel

    Allerdings würde diese Logdatei bei jedem Durchlauf überschrieben, also noch das Systemdatum + Uhrzeit zum Dateinamen automatisch hinzufügen.

    Die Logdatei sieht dann so aus. Ist natürlich davon abhängig, welche Optionen unter --info angegeben wurden.

    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:

    Code
    rsync -av --exclude=*.mpeg --exclude=*.mov  /Quelle  /Ziel

    Oder die maximale Größe festlegen (hier 500 MB)

    Code
    rsync -av --max-size=500m  /Quelle  /Ziel 

    Die Option --ignore-existing würde mir doch etwas Bauchschmerzen bereiten.

    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.

    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

    Code
    Host server
        HostName 192.168.178.50
        User xxx
        IdentityFile ~/.ssh/id_home

    Damit klappt es dann auch ohne Passwort. :)

    Code
    rsync -av --progress server:/srv/Filme /extPlatte/Filme

    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. ;)

    Ich muss gestehen ich bin hier noch am probieren was genau alles so passiert. Diese Option soll die Zeit verkürzen falls schon Dateien vorhanden sind die mit

    Code
    -c     aktiviert einen Dateivergleich, basierend auf Prüfsumme und nicht auf Größe und Zeitstempel. 

    ermittelt wurden.

    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.

    Ok, das beruhigt mich.

    Ich hab sowas in der Art ohne mounts, ohne delete:

    Code
    rsync --numeric-ids --ignore-existing -acvzE --stats /home/harihegen harihegen@backupserver1:"/srv/dev-disk-by-uuid-lauterwirrezeichen/sync/Backup/....../home/harihegen"

    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.

    Code
    rsync -rvtp --progress --delete --backup-dir=/mnt/backupserver/restore/Dokumente/ ~/Dokumente/ /mnt/backupserver/disk1/Dokumente

    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. :D

    Eigentlich gehört dieser Beitrag in die Rubrik "dumm, dümmer, am Dümmsten", habe ich aber nicht gefunden. :rolleyes:

    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.

    Und jetzt läuft schon seit Stunden das Backup und wird noch laaaange dauern. :(