• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Fragen zu rsync backup skript/ + "Ordnerüberwachung"

Hallo, ich hätte ein par fragen zum backup per rsync.

Ich würde gerne "Alles" auf meine externe Festplatte speicher, allerdings inkrementell.

So wie ich dies verstehe, macht dieser Skript genau das.

Allerdings habe ich hierzu noch ein par Fragen:

- Die Zeilen
Code:
# SOURCE_LOCATION="/home/USER/original/Ordner1 /home/USER/original/Ordner2";
SOURCE_LOCATION=/home/master/backuptest/original;

# Wohin soll das Backup geschrieben werden?
BACKUP_LOCATION=/home/master/backuptest/backup;
sind ja eigentlich selbsterklärend. Source ist in meinem Fall einfach /, und Backup meine externe Festplatte. Nur wo ist die? Ich nehme an das da einfach der /media/blub... pfad hinkommt (und nicht /dev/sdc1 oder so).
In meinem fall währe das also /media/disk . Wie kann ich der Festplatte einen Aussagekräftigeren Namen geben? Unter yasts partitionierer gibt es da nix. Geht das einfach nicht, oder bin ich zu blöd?

- Ich würde gerne ein par Sachen aus dem Backup raushalten.
Ein Weg währe wohl
Code:
rsync -arbuv --delete --progress --exclude=/home/testuser --link-dest=$VAR_NEWEST_BACKUP $SOURCE_LOCATION $BACKUP_LOCATION/backup_$DATE/ ;
einfach excludes reinzusetzen. Ist das egal wo ich das hinsetze? Allerdings wird das bei vielen Sachen recht unübersichtlich.
Hier halte ich dies für besser:
Code:
--exclude-from=/backup-excludes.txt
Stammt aus diesem, ähnlichen Skript für OSX, den ich bisher nutzte (Ist ein sehr lesenswerter Artikel), und wenn ich die manpage von rsync verstehe sollte dies auch auf der linux version laufen (es gibt da wohl ein par unterschiede zwischen rsync auf OSX und auf Linux).

- Wie kann ich diesen Skript so erweitern, das er einen Ordner überwacht/ Regelmässig prüft, und bei Bedarf ein Backup auf eine SD Karte macht die er mounten, und dann nach Ende des Backups wieder auswerfen soll?

Machbar sollte das auf jeden Fall sein, die Frage ist bloß wie kompliziert währe das? Ich komme mit der Konsole so mehr oder weniger zurecht, und man $Befehl ist mir auch vertraut, aber allzuviel mehr auch nicht.

Sollte das für sojemanden schaffbar sein? Oder doch lieber per hand?

Wenn ja, wo anfangen? man mount und man rsync währen schonmal das erste, aber Bei der "Überwachungsfunktion" bin ich überfragt. Könnte ich sicherlich als Cronjob machen, aber das geht ja nur zu bestimmten Zeiten. Und das würde mir - wenn ich es in recht kurzen etappen mache - unnötig Akku verbraten, wenn ich grade gar nichts an dem Ordner mache.

q
 

lOtz1009

Moderator
Teammitglied
qwertzuipü schrieb:
und Backup meine externe Festplatte. Nur wo ist die? Ich nehme an das da einfach der /media/blub... pfad hinkommt (und nicht /dev/sdc1 oder so).
In meinem fall währe das also /media/disk . Wie kann ich der Festplatte einen Aussagekräftigeren Namen geben?
Erstell dir am besten einen dauerhaften Mountpunkt (z.B. unter /mnt) und lass die Platte dann per /dev/disk/by-id/ dorthin einhängen. Und den Mountpunkt dann in die backup-excludes.txt schreiben (/mnt und /media sowie die temporär angelegten Ordner (siehe fstab) am besten generell), damit das Backup nicht aus dem Ruder läuft.
qwertzuipü schrieb:
Wie kann ich diesen Skript so erweitern, das er einen Ordner überwacht/ Regelmässig prüft, und bei Bedarf ein Backup auf eine SD Karte macht die er mounten, und dann nach Ende des Backups wieder auswerfen soll?
Ich finde, da bietet sich ein Cronjob an.

PS: das verlinkte Skript sichert immer wieder in einem neuen Ordner (_$date) und nicht inkrementell. So hab ich es jedenfalls beim Überfliegen eben gesehen.
 
OP
Q

qwertzuipü

Member
lOtz1009 schrieb:
Erstell dir am besten einen dauerhaften Mountpunkt (z.B. unter /mnt) und lass die Platte dann per /dev/disk/by-id/ dorthin einhängen.
Ginge sicherlich, aber ich sehe da keinen Vorteil darin. Ich weis ja welche platten ich eingesteckt habe. Es geht mir hier eher um die "Optik". Aber das ist auch nicht das wichtigste.

Und den Mountpunkt dann in die backup-excludes.txt schreiben (/mnt und /media sowie die temporär angelegten Ordner (siehe fstab) am besten generell), damit das Backup nicht aus dem Ruder läuft.
Ja klar, in die excludes darf einiges rein. Besagter Testuser, tmp, dev, media, und was mir halt sonst noch als unnötig einfällt.

Ich finde, da bietet sich ein Cronjob an.
Muss ich mich noch etwas einlesen, aber cronjobs gehen ja immer zu festen Zeitpunkten/ abständen. Und ich habe da einen Ordner (meine Dipl. Arbeit), den würde ich halt schon gerne Stündlich sichern, aber halt nur sofern ich auch dran arbeite.
Mit nem einfachen cronjob befürchte ich da schon ordentlichen Stromverbrauch.

PS: das verlinkte Skript sichert immer wieder in einem neuen Ordner (_$date) und nicht inkrementell. So hab ich es jedenfalls beim Überfliegen eben gesehen.
Vileicht habe ich da auch was mit den Begriffsdefinitionen verwechselt, aber das
Script zum sichern eines beliebigen Verzeichnisses mit rsync

1. Es werden mehrere Ordner angelegt, mithilfe von Hardlinks,
2. mit dem jeweils aktuellen Datum (backup_JahrMonatTag).
3. Die ältesten Ordner werden gelöscht
im Wiki verstehe ich schon als inkrementell. Wenn jeweils alles neu geschrieben werden würde, währen hardlinks ja nicht nötig.

q
 

K4m1K4tz3

Advanced Hacker
Das Script habe ich vor einiger Zeit mal geschrieben um mir ab und zu mal schnell ein Backup der wichtigsten Verzeichnisse in meinem /home zu sichern. Dabei führe ich das Script immer per Hand aus wenn ich meine externe Platte einschalte. Dabei steht in meinem Script folgendes:
Code:
BACKUP_LOCATION=/media/disk;

Meine Festplatte wird anscheinend immer nach /media/disk gemountet. Fragt mich aber bitte nicht warum das so ist :eek:ps:

Evtl. kann man das genauer im Partitionierer von Yast einstellen.

Ansonsten gebe ich jeden Ordner, den ich sichern möchte mit SOURCE_LOCATION getrennt an. Wie gesagt: ich sichere nur das wichtigste.

PS: das verlinkte Skript sichert immer wieder in einem neuen Ordner (_$date) und nicht inkrementell. So hab ich es jedenfalls beim Überfliegen eben gesehen.
Vileicht habe ich da auch was mit den Begriffsdefinitionen verwechselt, aber das
Script zum sichern eines beliebigen Verzeichnisses mit rsync

1. Es werden mehrere Ordner angelegt, mithilfe von Hardlinks,
2. mit dem jeweils aktuellen Datum (backup_JahrMonatTag).
3. Die ältesten Ordner werden gelöscht
im Wiki verstehe ich schon als inkrementell. Wenn jeweils alles neu geschrieben werden würde, währen hardlinks ja nicht nötig.

Nach mehrmaligen Ausführen des Scriptes gibt es mehrere Ordner die nach der Struktur backup_JahrMonatTag benannt sind. Ändert sich zum vorhergehenden Ordner der Inhalt nicht, dann werden nur Hardlinks erstellt, aber keine neuen Daten kopiert.
Mit der Variable BACKUPS_UNTIL_ERASE kann eingestellt werden, wie viele Ordner maximal vorhanden sein dürfen plus eins.

Wenn du das Script öfters und in regelmäßigen Abständen ausführen möchtest, dann führt wohl kein Weg an einem Cronjob vorbei.

P.S. Wenn du das Script änderst, kannst du gerne die Änderungen hier posten. Das Script steht auch nur im Wiki, weil ich darum gebeten wurde meine Lösung zu veröffentlichen. ;-)
 

framp

Moderator
Teammitglied
K4m1K4tz3 schrieb:
... P.S. Wenn du das Script änderst, kannst du gerne die Änderungen hier posten. Das Script steht auch nur im Wiki, weil ich darum gebeten wurde meine Lösung zu veröffentlichen. ;-)
Jupp, und deshalb wurde es ja auch gefunden ;) Falls Ihr irgendwelche Verbesserungen an dem Script vornehmt lasst mich den neuen Stand wissen und ich update das Script im Wiki (Ist geblocked um Missbrauch zu vermeiden bzw Scherzbolde abzuhalten).
 
OP
Q

qwertzuipü

Member
So, ich habe den skript aus dem Wiki einfach mal durchlaufen lassen.
Anpassungen habe ich kaum gemacht. Halt Quelle und Ziel meinen Bedürfnissen angepasst, und Sachen halt mit
Code:
rsync -arbuv --delete --progress --exclude-from=/backup-excludes.txt  --link-dest=$VAR_NEWEST_BACKUP $SOURCE_LOCATION $BACKUP_LOCATION/backup_$DATE/ ;
vom Backup ausgeschlossen.

Die backup-excludes.txt liegt einfach auf /, und hat folgenden Inhalt:
Code:
tmp/*
/proc
/media/*
/mnt/*
*/.Trash
/dev/*
/home/$USER/.thumbnails/*
/home/$USER2/.thumbnails/*
wobei ich mir mit dem */.Trash nicht so sicher bin. Ist noch ein OSX überbleibsel da ich mir nicht so sicher bin wie Suse mit dem Müll umgeht. Scheint aber nicht zu schaden.

Hat wohl alles funktioniert. Bei meinen Stichproben im Backup sind die Daten da. Der backup hat ca.70 GB, die interne Platte 75GB, das dürfte hinhauen.

Was mich allerdings etwas verwirrt ist folgendes:
Wenn ich mir im Konqueror die Eingenschaften meiner externen Platte anschaue, dann habe ich laut Speicherbelegung 269 von 360 GB frei, der Backupordner ist allerdings nur 67GB groß. Irgendwas braucht also 24GB. Bei dem Mac backup ist es so das die Hardlinks die größenangaben "verwirren", nehme an das ist auch hier so, aber bei einem einzigen backup sollte es doch noch keine Hardlinks geben?

Und ich bekomme während der Backup läuft tausende von FEhlermeldungen
Code:
rsync: link "/media/disk/backup_20100426/var/tmp/kdecache-root/ksplashx/ksplashx-suse-1024x768-progress2.png" => /var/tmp/kdecache-root/ksplashx/ksplashx-suse-1024x768-progress2.png failed: Invalid cross-device link (18)
immer "...failed: Invalid cross-device link (18)".
Ist das dass was mit
Code:
# TODO: Nachfolgende Funktionen schmeißen noch Fehlermeldungen beim Programm ls, 
# wenn kein backup_* Ordner existiert. Die Funktionen werden anscheinend auch schon
# am Anfang ausgeführt, obwohl sie erst später ausgeführt werden sollen.
# Beeinträchtigt aber keineswegs die Funktioninalität!
gemeint ist?
Am ende tauch auch nochmal eine Fehlermeldung auf:
Code:
sent 70577610 bytes  received 76006 bytes  5274.43 bytes/sec
total size is 75962878797  speedup is 1075.14
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
Ich nehme an mit "see previous errors" ist das obige gemeint?


Für meinen anderen Backup habe ich mir mal Cron (und Anacron) angeschaut.
Das erscheint mir für das was ich will nicht geeignet. Wie gesagt, ich will wenn ich es brauche stündliche backups, aber ansonsten meine Ruhe.
Es seit denn ich bau irgendeinen skript der dann stündlich nur mal ganz schnell den Ordner anschaut, und nur wenn nötig dann den Backup anstößt.
Aber auch eine komplette größenüberprüfung braucht recht viel CPU und vor allem Festplattenaktivität...

Mal weiterschauen. evtl. ist rsync für sowas auch nicht das mittel der wahl.

q
 

K4m1K4tz3

Advanced Hacker
qwertzuipü schrieb:
... aber bei einem einzigen backup sollte es doch noch keine Hardlinks geben?

Eigentlich nicht, nein.

qwertzuipü schrieb:
Und ich bekomme während der Backup läuft tausende von FEhlermeldungen
Code:
rsync: link "/media/disk/backup_20100426/var/tmp/kdecache-root/ksplashx/ksplashx-suse-1024x768-progress2.png" => /var/tmp/kdecache-root/ksplashx/ksplashx-suse-1024x768-progress2.png failed: Invalid cross-device link (18)
immer "...failed: Invalid cross-device link (18)".
Ist das dass was mit
Code:
# TODO: Nachfolgende Funktionen schmeißen noch Fehlermeldungen beim Programm ls, 
# wenn kein backup_* Ordner existiert. Die Funktionen werden anscheinend auch schon
# am Anfang ausgeführt, obwohl sie erst später ausgeführt werden sollen.
# Beeinträchtigt aber keineswegs die Funktioninalität!
gemeint ist?

Nein. Gemeint sind Fehlermeldungen die ls ausgibt, da es die Backupordner ja nicht finden kann. Wenn ich heute so darüber nachdenke, dann müsste ich da noch eine Überprüfung einbauen. Gemeint waren solche Fehlermeldungen:
Code:
ls: Zugriff auf /home/master/test/backups/backup_* nicht möglich: Datei oder Verzeichnis nicht gefunden
Bzw. rsync dürfte nur folgenden Fehler bringen:
Code:
--link-dest arg does not exist:


qwertzuipü schrieb:
Am ende tauch auch nochmal eine Fehlermeldung auf:
Code:
sent 70577610 bytes  received 76006 bytes  5274.43 bytes/sec
total size is 75962878797  speedup is 1075.14
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
Ich nehme an mit "see previous errors" ist das obige gemeint?

Richtig. Das ist nur nochmal eine Zusammenfassung.

qwertzuipü schrieb:
Mal weiterschauen. evtl. ist rsync für sowas auch nicht das mittel der wahl.

Vielleicht ja.

Ansonsten muss der Fehler irgendetwas mit der "Exclude-datei" zu tun zu haben, wenn du nichts anderes geändert hast. Ich habe das ganze mal testweise auf einen neuen Ordner versucht und konnte kein merkwürdiges Verhalten feststellen. Wenn ich Zeit finde, werde ich weiter testen.

EDIT: Was hast du als $SOURCE_LOCATION und $BACKUP_LOCATION angegeben?
 
OP
Q

qwertzuipü

Member
Konnte mich eine weile lang nicht mit dem computer große beschäftigen, daher eine etwas späte antwort.

Habe jetzt die Backupskripte mehrfach laufen lassen.
Es wird alles einwandfrei übertragen.

Ich habe noch ein zweites skript (Kopiert meine Diplomarbeit auf eine SD Karte), und das hat keine backup-excludes. Und es verursacht auch keine Fehler. Ich gehe also mal davon aus das die Fehlermeldungen tatsächlich von den excludes verursacht werden.

Wobei der skript mit den excludes (backup von / auf /media/disk) im zweiten durchlauf auch keine Fehler mehr zu produzieren scheint.

Aber warum die skripte das so tun?

Ich gehe mal einfach davon aus das das nichts schlimmes bedeutet und ignoriere sie.

Für die "Ordnerüberwachung" sind mir in einer c't Inotify und Incron begnet. Da gibt es damit einen beispielskript zur Ordnerüberwachung.
sollte ich es tatsächlich schaffen da was draus zusammenzubauen kommt das gerne hier rein. Kann aber dauern.

q
 

K4m1K4tz3

Advanced Hacker
qwertzuipü schrieb:
Für die "Ordnerüberwachung" sind mir in einer c't Inotify und Incron begnet. Da gibt es damit einen beispielskript zur Ordnerüberwachung.
sollte ich es tatsächlich schaffen da was draus zusammenzubauen kommt das gerne hier rein. Kann aber dauern.

Würde mich auf jedenfall mal interessieren.
 
Oben