Forum: PC Hard- und Software Backup mit rsync (include/exclude)


von M. K. (avr-frickler) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe gerade die ehrenvolle Aufgabe ein Backupscript zu schreiben, im 
Moment allerdings treibt mich dieses rsync in den Wahnsinn!

Ich habe Problem beim ausschließen von Verzeichnissen.
Die zu sichernde Ordnerstruktur sieht wie folgt aus:
1
C$/Dokumente und Einstellungen
2
C$/Programme
3
C$/RECYCLER
4
C$/System Volume Information
5
C$/WINDOWS
6
7
E$/Eagle
8
E$/Eigene Dateien/Datebblätter
9
E$/Eigene Dateien/Dokumente/Privat
10
E$/Eigene Dateien/Downloads
11
E$/Labview
12
E$/MC
13
E$/Qt
14
E$/RECYCLER
15
E$/System Volume Information

Davon soll alles in 'C$/Dokumente und Einstellungen' und alles in 'E$' 
gesichert werden mit Ausnahme von 'E$/Eigene Dateien/Dokumente/Privat' 
und 'E$/Eigene Dateien/Downloads'.

Der Befehl den ich mir bisher zusammen gezimmert habe sieht so aus:
1
rsync -ptg --recursive --update --xattrs --progress --stats
2
  --files-from=/root/backup/files_Kaminski1
3
  --exclude-from=/root/backup/exc_backup
4
  --exclude 'E$/*/Downloads/*'
5
  --exclude 'E$/*/Dokumente/Privat/*'
6
  --link-dest=/mnt/backup/disk/2012-07-23/09
7
  /mnt/backup/Kaminski1/
8
  /mnt/backup/disk/2012-07-23/10/Kaminski1/

Die beiden Dateien 'files_Kaminski1' und 'exc_backup' habe ich mal mit 
angehangen.

Das Problem:
Aus C$ wird nur das gesichert was auch in 'files_Kaminski1' vermerkt 
ist. Für E$ bekomme ich es nicht hin, dass die Unterverzeichnisse 
'Eigene Dateien/Dokumente/Privat' und 'E$/Eigene Dateien/Downloads' 
NICHT gesichert werden. Ich habe schon mehrere Varianten versucht.
1
  --exclude 'Downloads/'
2
  --exclude 'Privat/'
3
  --exclude 'Downloads/*'
4
  --exclude 'Privat/*'
5
  --exclude '*/Downloads/'
6
  --exclude '*/Privat/'
7
  --exclude '*/Downloads/*'
8
  --exclude '*/Privat/*'
Nichts davon hat funktioniert.

Ich hoffe einer von euch hat noch eine zündende Idee.

von Uhu U. (uhu)


Lesenswert?

M. K. schrieb:
> --exclude 'Downloads/*'

Probier mal   --exclude 'E$/**/Downloads/*'

Ich benutze rdiff-backup. Im Backup-Skript sieht die entsprechende 
Stelle so aus:
1
rdiff-backup --print-statistics --exclude-globbing-filelist-stdin /home/uhu $bakdev/home/uhu <<-EOF
2
  /home/uhu/.mozilla/firefox/xcf2duut.default/Cache
3
  /home/uhu/VirtualBox\ VMs
4
  /home/uhu/Telefon/backup/**/*
5
  /home/uhu/tmp
6
  /home/uhu/xfer
7
EOF

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Funktioniert leider auch nicht.

du hast bei dir ein Verzeichnis mit Leerzeichen angegeben. 
('/home/uhu/VirtualBox\ VMs')

Das geht bei mir mit rsync auch überhaupt nicht, wenn ich z.B.
1
--exclude 'E$/Eigene Dateien/Downloads/'
2
--exclude 'E$/Eigene\ Dateien/Downloads/'
versuche bekomme ich nur angezeigt wie ich das Programm auf zurufen habe 
und mehr nicht, nicht einmal einen Hinweis auf den Fehler.

EDIT:
Jetzt wird es ganz komisch!
Trage ich in der Datei exc_backup die Verzeichnisse Downloads/ und 
Privat/ ein, werden die Verzeichnisse ausgelassen. Allerdings auch 
andere Verzeichnisse die genauso heißen.

Ich habe das nun mal so umgeschrieben das ich alle Einträge aus der 
Datei einzeln per --exclude übergabe, dann funktioniert noch nicht 
einmal mehr das.

Ich werde dass dumme Gefühl nicht los, dass das Leerzeichen in 'Eigene 
Dateien' ein Problem verursacht.

von Uhu U. (uhu)


Lesenswert?

M. K. schrieb:
> Trage ich in der Datei exc_backup die Verzeichnisse Downloads/ und
> Privat/ ein, werden die Verzeichnisse ausgelassen. Allerdings auch
> andere Verzeichnisse die genauso heißen.

Hast du den vollständigen Pfad angegeben?

> Ich werde dass dumme Gefühl nicht los, dass das Leerzeichen in 'Eigene
> Dateien' ein Problem verursacht.

Deswegen meide ich den Scheiß, wenns geht.

Bei Windows gibt es zu jedem langen Dateinamen (egal, ob mit, oder ohne 
Leerzeichen) einen eindeutigen kurzen Namen. Den erfährst du mit
1
   dir /x

Damit kannst du auch Probleme mit Leerzeichen umschiffen.

Den Backslash im Dateinamen braucht man nur, wenn er nicht in 
Anführungszeichen gesetzt ist. Er maskiert dann das folgende Zeichen.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> M. K. schrieb:
>> Trage ich in der Datei exc_backup die Verzeichnisse Downloads/ und
>> Privat/ ein, werden die Verzeichnisse ausgelassen. Allerdings auch
>> andere Verzeichnisse die genauso heißen.
>
> Hast du den vollständigen Pfad angegeben?

Nein ich habe tatsächlich nur die beiden Ordnernamen eingegeben., würde 
also bedeuten sowohl 'meine_Daten/Downloads' als auch 
'deine_Daten/Downloads' würden ausgelassen werden, es sei denn mal 
listet diese wieder in der --files-form Direktive wieder auf.

Mit vollständigem Pfad habe ich die Verzeichnisse wieder drinnen 
zumindest in den Test die ich vorher mit den Wildcards gemacht hatte. 
Ich werde gleich nochmal mit vollständigem Pfad testen. Mittlerweile 
habe ich einfach mal 'Eigene Dateien' in 'Eigene_Dateien' umbenannt.

Uhu Uhuhu schrieb:
> Den Backslash im Dateinamen braucht man nur, wenn er nicht in
> Anführungszeichen gesetzt ist. Er maskiert dann das folgende Zeichen.

Das war soweit klar
Aber selbst in Anführungszeichen klappt das bei mir nicht

von Uhu U. (uhu)


Lesenswert?

Hast du dir die man page von rdiff angesehen? Dort gibts auch die 
Optionen --exclude-filelist-stdin und --exclude-globbing-filelist, du 
kannst also mein Codefragment nehmen und für deinen Fall modifizieren.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Ich habe es jetzt gerade nochmal mit dem kompletten Pfad in der Datei 
mit den Ausnahmen versucht, das klappt jetzt sogar mit Leerzeichen im 
Pfad.

Nur die --exclude Direktive kapiert das mit den Leerzeichen nicht, bzw. 
funktioniert überhaupt nicht.

Werde ich wohl für jeden Host eine Datei pflegen müssen .. hmpf das 
wollte ich eigentlich vermeiden.

Ich hatte eigentlich vor eine Datei mit Allgemeinen Ausnahmen zu haben 
und eine Konfigurationsdatei für mein Script mit den Ausnahmen speziell 
für jeden Host.

von Uhu U. (uhu)


Lesenswert?

M. K. schrieb:
> Ich hatte eigentlich vor eine Datei mit Allgemeinen Ausnahmen zu haben
> und eine Konfigurationsdatei für mein Script mit den Ausnahmen speziell
> für jeden Host.

Wenn du die exclude-Liste im Skript hälst, kannst du per shell Variablen 
einsubstituieren und das Ganze so auf den jeweiligen Klienten anpassen. 
Damit sollte sich die Idee realisieren lassen.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> Wenn du die exclude-Liste im Skript hälst, kannst du per shell Variablen
> einsubstituieren und das Ganze so auf den jeweiligen Klienten anpassen.
> Damit sollte sich die Idee realisieren lassen.

Hört sich gut an, nur ich fürchte hier sind mein Fähigkeiten in 
bash-Scripting noch ein wenig begrenzt. Hättest du vielleicht ein paar 
Codeschnipsel für mich?

Die Liste lade ich aus einer XML-Konfigurationsdatei, Schema und Code 
dazu könnte ich morgen erst posten.

von Uhu U. (uhu)


Lesenswert?

Warum nimmst du eigentlich rsync und nicht rdiff-backup?

Letzteres speichert platzeffizient mehrere (viele) alte Stände und hat 
zusätzlich die Vorteile von rsync.

rsync ist eigentlich ein Tool, um mehrere Rechner auf gleichem Stand zu 
halten, weniger für Backup.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

rsync hat sich bei meiner Google Recherche heraus kristallisiert, von 
rdiff-backup hatte ich hier das erstemal gelesen. Werde ich mir auf 
jedenfall auch nochmal ansehen.

Ein Sicherung mit mehreren Stände bekommt man mit rsync allerdings auch 
hin.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.