Thread zur Backup-FAQ

Merkwürdig, muss ich nochmals prüfen, evtl. liegt es daran, dass die Verzeichnisse, die die Dateien mit Leerzeichen im Namen ebenfalls Leerzeichen im Namen beinhalten. Ich werde das mal testen.

Danke für den Hinweis mit --link-dest, schau ich mir an.

Den Originacode habe ich mal eingefügt, der Beitrag stammt aus 2005 (nicht 2006, wie ich geschrieben habe).

Code:
#!/bin/sh

# INKREMENTELLLE BACKUPS

# Die folgenden Variablen müssen vom Benutzer angepasst werden

        # Zu sicherndes Verzeichnis (z.B. /Users/):
          a="/Users/sheep/"

        # Verzeichnis bzw. Volume, in dem die Backups gespeicher werden sollen (z.B. /Volumes/Backup):
          b="/Volumes/Backup"

        # Anzahl zu sichernde Versionen (z.B. 5; das Minimum ist 2!):
          c=5


# Ab hier sollte man normalerweise nichts mehr ändern müssen

# Überprüfen, ob das Verzeichnis $b existiert bzw. das entsprechende Volume gemountet ist - abbrechen, falls nicht
if [ -d $b ]; then
        echo "" > /dev/null
else
        exit
fi

# Backup-Verzeichnisse erstellen, falls sie nicht existieren
e=$c
while [  $e -gt 0 ]; do
let e=e-1
if [ -d $b/backup.$e ]; then
        echo "" > /dev/null
else
        mkdir $b/backup.$e
fi
done

# Datum aufzeichnen (Beginn)
touch $b/backup.log
/bin/echo "Backup begonnen um:" >> $b/backup.log
/bin/date >> $b/backup.log

# Backup-Verzeichnisse rotieren
let c=c-1
d=$c
rm -rf $b/backup.$c
while [  $c -gt 1 ]; do
        let d=$c
        let c=c-1
        mv $b/backup.$c $b/backup.$d
done
let d=d-1
let c=c-1
cd $b/backup.$c && find . -print | cpio -dpl ../backup.$d

# Den eigentlichen Backup-Prozess starten
/usr/bin/rsync -aE --delete --exclude=.Spotlight-V100 $a $b/backup.0/

# Datum aufzeichnen (Ende)
/bin/echo "Backup beendet um:" >> $b/backup.log
/bin/date >> $b/backup.log
/bin/echo "--------------------------------------" >> $b/backup.log

# Datum von backup.0 in eine Datei sichern
/bin/date > $b/backup.0/datum
 
@ls172212: Du musst in einem Shellskript alle Variablen in Anführungsstriche setzen.

Sonst passiert folgendes, wenn du eine Datei hast, die Leerzeichen oder etwas anderes enthält. Für den Extremfall mal "foo ; rm -rf ~; bar.doc" angenommen.

Aus einem eigentlich harmlosen Teil
Code:
cp $datei target/

wir dann

Code:
cp foo ; rm -rf ~; bar.doc target/

Der erste Teil gibt einen Fehler, der zweite löscht alle deine Daten und der dritte gibt auch wieder einen Fehler aus.

Im Skript wird eher sowas wie das hier schiefgehen:

Code:
mkdir $b/backup.$e
->
Code:
mkdir Ordner mit Leerzeichen/backup.3

Dann hast du drei Ordner, aber das ist ja nicht das, was du wolltest. Du wolltest eigentlich
Code:
mkdir "$b/backup.$e"
, also
Code:
mkdir "Ordner mit Leerzeichen/backup.3"

;)
 
Generell richtig, hatte ich aber in #738 schon erwähnt.

Nach Überfliegen des Codes hatte ich das aber ausgeschlossen.
Schau Dir mal an, womit die Variablen befüllt werden.
Und dann noch die if Abfrage vor dem mkdir.
Wenn da Leerzeichen drin wären, würde schon [ fehlschlagen.

Code:
if [ -d $b/backup.$e ]; then
        echo "" > /dev/null
else
...
Warum man so etwas macht, ist mir völlig schleierhaft, hat aber mit dem eigentlichen Problem nichts zu tun.
 
Das ist die Goofy-Variante von if [ ! -d ... :hehehe:
 
Danke für eure Hinweise, habe das Problem inzwischen besser einkreisen können, aber der Reihe nach:

Den Test von maceis konnte ich nachvollziehen, aber im Script (Ist übrigens nicht von mir und muss hier und da korrigiert, bzw. an neuere OS-Versionen angepasst werden.) funktionierte es noch nicht.

Anführungszeichen helfen deutlich weiter, lösen aber das Problem auch nicht ganz, immerhin funktioniert das Script nun fehlerfrei mit der Option --link-dest bei rsync, erstellt aber keine Links!

Den Test habe ich lokal ausgeführt, das Script soll aber auf eine externe USB-Platte sichern, und darin liegt wohl das Problem, da wohl die Attribute nicht identisch sind und damit die Dateien in SRC und beim --link-dest angegebenen Verzeichnis nicht als gleich erkannt werden. In der Folge werden immer alle Dateien kopiert, wohingegen das Ziel ist, nur inkrementelle Backups zu erstellen.

Die Platte ist mit FAT32 formatiert, damit ich sie auch an einem Windows-Rechner lesen kann. Hat jemand einen Hinweis, wie die Platte formatiert (oder gemountet) werden sollte, damit die Attribute identisch zur Mac-HD sind?
 
FAT32 kann keine Hardlinks.
 
Gibt es ein Dateisystem, dass sowohl für Mac, als auch für Windows tauglich (lesbar) ist?
 
FAT32 geht. Ansonsten kannst du HFS+ (Mac Dateisystem) benutzen und unter Windows einen Treiber installieren. Oder unter Mac OS den NTFS Treiber installieren und dann halt mit NTFS. Eventuell kann man auf beiden EXT4 benutzen, da sollte es Treiber für Windows und für Mac gehen.

@maceis: benutzt man inzwischen nicht eher [[ anstelle von [?
 
Guten Morgen liebe Backup-Gemeinde,
seit ich meinen iMac mit OS X 10.7 (Lion) hier stehen habe läuft mein bisher zuverlässiges Backup-Skript nicht mehr durch. Ich habe es bisher benutzt um einen bootfähigen Klon des Systems zu erstellen. Bisher heisst MacBook Pro, OS X 10.4, per FireWire auf eine externe Platte.
Bis auf den Mac ist alles gleich geblieben. Nun hängt der Klon-Vorgang aber bei einem .plist-File :-(
(Library/Updates/ProductMetadata.plist)
Zuerst hing der Vorgang an einem File in /Library/Spotlight/*, das habe ich dann aber per "Exludes.txt" ausgeschlossen, da es mir nicht wichtig war. Das kann ich ja aber nicht bei allen Problemstellen machen.
Rechte, Plattenplatz habe ich gecheckt, da sieht alles gut aus.
Hat jemand einen Rat für mich?

Danke & Gruß,
Jan

Update: Das Skript sollte man vielleicht wirklich anhängen ;-) Danke für die nette Erinnerung "magheinz".
Code:
#!/bin/sh

#Protokollpfade
declare protokoll="/clon_protokoll.log"
declare info="/clon_info.log"

#Variablen fuer die Pfade
declare quelle="/"
declare ziel="/Volumes/iMac_Clone"

#Log schreiben (Anfangszeit)
/bin/echo "System-Clon begonnen um:" >> $info
/bin/date >> $info

#Clon anfertigen und Vorgang protokollieren
/usr/bin/time /usr/bin/rsync -avE --delete --exclude-from /clone_excludes.txt $* $quelle $ziel/ > $protokoll

#Volumen bootbar machen
bless -folder $ziel/System/Library/CoreServices
#Log schreiben (Endzeit)
/bin/echo "System-Clon beendet um:" >> $info
/bin/date >> $info
/bin/echo "--------------------------------------" >> $info
/bin/mv $info $ziel
 
Zuletzt bearbeitet:
Guten Morgen liebe Backup-Gemeinde,
seit ich meinen iMac mit OS X 10.7 (Lion) hier stehen habe läuft mein bisher zuverlässiges Backup-Skript nicht mehr durch.
Steh ich hier total auf dem Schlauch oder ist es wirklich für die Problemstellung unnötig zu wissen wie dieses script aussieht?
 
Ach ja, die Exclude-Liste zu meinem o.g. Problemchen sieht folgendermassen aus:
Code:
/tmp/*
/proc
/Network/*
/Volumes/*
/cores/*
*/.Trash
/dev/*
/afs/*
/automount/*
/private/tmp/*
/private/var/run/*
/private/var/spool/postfix/*
/.Spotlight-V100
/Library/Spotlight/*

Hat einer von euch auch Probleme mit rsync und OS X Lion? Oder läuft bei euch alles normal?
Grüße,
Jan
 
Zuletzt bearbeitet:
Hmm, wirklich keine eine Idee?
Mit CCC oder SuperDuper läuft der Klonvorgang durch, soweit ich das beurteilen kann.
Würde aber lieber bei den Skripten bleiben, ist einfach flexibler :)

Na dann schon mal einen guten Rutsch an alle!
Jan
 
Du lässt es als root laufen, oder?

Eigentlich müsste rsync merken, wenn eine Datei nicht lesbar ist, und diese überspringen. Was genau heißt den „bleibt hängen“? Es macht einfach nicht weiter? Vielleicht kann es dann stat() nicht ausführen. Du kannst mal mit
Code:
lsof | grep dateiname
checken, welcher Prozess diese Datei blockiert.
 
Danke martinibook!
Ich lasse das Klon-Skript über den "sudo" Befehl laufen.
Mit hängenbleiben meine ich, es geht nicht weiter und zwar ohne Fehlermeldung. Wenn ich die Datei in die "exludes" aufnehme, dann hängt es etwas später bei einer anderen Datei. Die Idee mit lsof habe ich probiert. Die Datei ist nicht geöffnet... :-(
Sieht fast so aus, als wäre eine max. Anzahl an Dateien erreicht. Nur dann würde ich eine Fehlermeldung etc. erwarten.
Seltsam ist doch, dass es bei OS X 10.4 gut lief und jetzt mit 10.7 nicht mehr.

Ob das was mit dem Anschluß der ext. Platte zu tun hat? Ich nutze einen FW800 auf FW400 Adapter und eine FW400er Platte??
 
Zuletzt bearbeitet:
Eigentlich sollte der Adapter kein Problem darstellen. Wenn du keinen Speicherplatz mehr hast, dann gibt rsync eine lange Fehlermeldung aus, in der steht, dass kein Platz mehr da ist. Ein Dateilimit kann ich mir schlecht vorstellen, da auf deiner Systemplatte ja auch alle Dateien drauf sind.
 
Hallo,

ich nutze ein MBP mit installiertem ML, einer TC und einer daran angeschlossenen USB HDD.

Die Testversion von CCC konnte mich nicht vollends überzeugen. Daher habe ich viele verschiedne Threads zum manuellen Backup über eigene scripts gelesen. Natürlich auch die Anleitung und einen Teil dieser FAQ (über Thema durchsuchen).

Meine Frage ist, ob mein Vorgehen für mein Ansinnen das richige ist:
Ich möchte ein Verzeichnis auf der TC jeden Abend um 22:30 auf die externe HDD spiegeln. Neue oder geänderte Dateien des TC-Verzeichnisses sollen auf die USB HDD kopiert werden. Nicht mehr auf der TC vorhandene Dateien sollen auch auf der USB HDD gelöscht werden. Auf der TC soll in keinem Fall geändert oder gelöscht werden.

Über Zeitplan in des Systemeinstellungen würde ich das MBP um 22:28 bei geschlossenem Deckel starten, oder, je nachdem, aus dem Ruhezustand holen.
Über Lingon habe ich 4 plists erstellt und im Verzeichnis /Library/LaunchDaemons gespeichert (2 zum Erstellen von Volumes/TC und Volumes/USB und zwei zum mounten von TC und USB (über mount_afp)
Frage hier: ist das Verzeichnis /Library/LaunchDaemons dafür der richige Ort? Verstehe nicht ob meine plists dann auch ausgeführt werden, weil ja niemand angemeldet ist. Die automatische Anmeldung möchte ich ungern aktivieren.

Eine weitere plist würde dann mittels rsync --archive --delete -u /Volumes/TC/Ordner /Volumes/USB/Ordner die Daten der TC auf die USB spiegeln. Diese plist würde ich um 22:30 per launchd starten lassen.

Ist das so vernünftig, oder ist irgendwas überflüssig oder falsch? Danke für Eure Hilfe!

Klaus
 
Zurück
Oben Unten