Gute grafische Backup-Programme gibt es mittlerweile auch unter Linux en masse, jedoch hänge ich nach wie vor an meinem selbst geschriebenen Backup-Skript, welches das freie Tool rsync für die (inkrementelle) Sicherung auf eine externe Festplatte verwendet. Der Grund hierfür ist eigentlich recht simpel: ich konnte bislang keine Backup-Software finden, welche meinen Anforderungen hundertprozentig gerecht werden konnte. Außerdem arbeiten Skripte zumindest subjektiv schneller und zuverlässiger. Das alles soll Grund dafür sein, euch das Bash-Skript einmal vorzustellen.

Das Backup zeigt zu Beginn die gewählten Einstellungen an (im Bild wurden 2 Profile mit anschließendem Herunterfahren gewählt)
Das „Kernstück“ des Skriptes bildet rsync, welches beliebig viele Verzeichnisse mit einem Zielverzeichnis vergleicht und synchronisiert. Dies verläuft nur in eine Richtung (unidirektional), was bedeutet, dass mögliche Änderungen im Zielverzeichnis verloren gehen, da die Verzeichnisse nicht zusammengeführt (merge) werden können. Bei einem Backup ist das aber unerheblich, da das Zielverzeichnis, in dem sich das Backup befindet, ohnehin nicht manuell verändert werden sollte.
Wird eine Datei im Quellverzeichnis erstellt, verändert oder gelöscht, so wird diese Datei von rsync in das Zielverzeichnis übertragen bzw. im Zielverzeichnis ebenfalls gelöscht. Sobald rsync mit der „Arbeit“ fertig ist, sind Quell- und Zielverzeichnis identisch.
Mehr Informationen zu rsync und dessen Funktionsweise, sind zum Beispiel im Wiki von ubuntuusers.de zu finden.
Mein Backup-Skript bietet darüber hinaus noch ein paar weitere nützliche Funktionen:
Abhängig von den Optionen von rsync sind zudem folgende Dinge möglich und standardmäßig eingestellt:
Da die Konfiguration nicht furchtbar kompliziert ist, sollte sie auch ohne größere Erfahrung mit Skripten zu bewältigen sein. Zudem helfen die Kommentare (#) im Skript bei der Einrichtung.
In der Variablen $RSYNC_OPT werden die Optionen gespeichert, mit denen rsync vom Skript aufgerufen wird (siehe auch man rsync). $MOUNT enthält optional den Mountpoint einer externen Festplatte, um überprüfen zu könne, ob diese korrekt angeschlossen und eingebunden wurde. $BAK_DIR gibt einen Ordner für gelöschte und veränderte Dateien an, wobei dabei die Variable $TARGET (Zielverzeichnis) verwendet werden kann.
Die Einstellungen der einzelnen Profile werden in sogenannten Arrays gespeichert (n ist dabei durch eine Zahl zu ersetzen):
title[n]="" arg[n]="" source[n]="" target[n]="" log[n]="${target[n]}/${title[n]}_log.txt" exfrom[n]="$(mktemp -t "tmp.rsync.XXXX")" cat > "${exfrom[n]}" <<EOF EOF |
Im Array title[n] wird eine Bezeichnung und in arg[n] ein Argument (i.d.R. bestehend aus einem Buchstaben), mit dem das Profil aufgerufen wird, gespeichert. Beide Angaben werden in der Hilfe und bei der Ausführung des Skriptes angezeigt.
In source[n] stehen die Quellverzeichnisse, wobei (nur) in diesem Fall Pfadangaben, welche ein Leerzeichen enthalten, von \” umschlossen werden müssen. Das Zielverzeichnis wird mit target[n] festgelegt.
Zwischen <<EOF und EOF kann man Dateien und Verzeichnisse angeben, welche nicht gesichert werden sollen. Hierbei ist pro Zeile lediglich 1 Pfadangabe erlaubt, wobei Leerzeichen diesmal nicht besonders behandelt werden dürfen.
Der Pfade zur Logdatei in log[n] und zur temporäre Datei in exfrom[n] müssen nicht zwingend geändert werden.
Wie das Skript korrekt aufgerufen wird, ist folgendem Screenshot zu entnehmen:
Und noch einmal in Worten: um ein bestimmtes Profil zu starten, muss an das Skript die Option -p, gefolgt von dem entsprechenden Argument, übergeben werden. Alternativ kann man mit der Option -a sämtliche Profile auf einmal starten oder mehrere Profilaufrufe hintereinander auflisten (-p ARGUMENT -p ARGUMENT2).
Darüber hinaus gibt es noch die Option -m, die als Argument Quell- und Zielverzeichnis erwartet. In diesem Fall, müssen Verzeichnisse, die Leerzeichen enthalten, lediglich von “ umschlossen werden.
Mit -s wird der Computer nach dem Backup automatisch heruntergefahren und die Option -h zeigt die Hilfe an.
Mehr gibt’s eigentlich nicht zu sagen, außer vielleicht noch, dass ich hoffe, dass das Skript auch bei euch fehlerfrei läuft; getestet habe ich es in der jetzigen Version mit Ubuntu 10.10 und Arch Linux.
Stefan hat mich in den Kommentaren auf Fehler aufmerksam gemacht, die auftreten, wenn das Skript als Cron-Job aufgerufen und wenn als Quelle das Root-Verzeichnis (/) angegeben wird. Zudem hat er vorgeschlagen, auf Systemen ohne grafische Oberfläche echo anstatt notify-send zu verwenden. Praktischerweise hat er auch gleich passende Lösungen geliefert, welche ich in fast identischer Form übernommen habe.
An dieser Stelle nochmals vielen Dank, Stefan, für die Verbesserungsvorschläge und Lösungsansätze… und für das Testen des angepassten Skriptes.
Folgende Änderungen sind in die neue Version eingeflossen:
Wer das Skript bereits verwendet, kann ohne Probleme auf die verbesserte Version umsteigen. Dazu einfach die bisherigen Profileinstellungen in das neue Skript kopieren.
Update (13. Juni 2011): Ich hatte noch einen kleinen Bug eingebaut, der zum Glück von Stefan bemerkt und mittlerweile korrigiert wurde.
Stefan hat das Backup-Skript auf seinem Blog um einige nützliche Funktionen erweitert:
Das Skript könnt ihr auf der nächsten Seite herunterladen
.
Seiten: 1 2
Hier bloggt(e) Janek (21 Jahre, mittlerweile Student) v.a. über Themen rund um Ubuntu und GNU/Linux, sowie vereinzelt auch über WordPress und sonstigen Themen des Internets.
Neue Beiträge gibt es derzeit keine mehr, aber auf Kommentare reagiere ich weiterhin.
82 Kommentare zu Komfortables Backup-Skript (rsync) (Update)
» Kommentar schreibenAlex
2. Januar 2011 um 20:34
Sehr schönes Skript, habe bisher eigene recht simple rsync-Skripte benutzt. Ich werd das hier mal testen und gegebenfalls darauf umsteigen. Vielen Dank!
Diesen Beitrag zitieren
Sivlan
2. Januar 2011 um 21:56
Schönes Script. War bestimmt ein Stück Arbeit. Ich verwende für Backups Bacula
. Gruss Silvan.
Diesen Beitrag zitieren
Janek
3. Januar 2011 um 13:31
Zitat Sivlan ↑:
Das Script ist so nach und nach entstanden. Angefangen habe ich damit vor Jahren, als ich noch kaum Ahnung von Bash-Skripten hatte. Mit der Zeit habe ich immer mehr dazugelernt und dass Skript immer mal wieder verbessert und ausgebaut. Es war daher ein gutes „Projekt“ zum Ausprobieren und Lernen
.
Gruß
Diesen Beitrag zitieren
TruckTrain
3. Januar 2011 um 16:16
Sehr gutes Skript, habe es gerade mal runtergeladen und ausprobiert, funktioniert einwandfrei
Das mit dem Profilstart habe ich anfangs nicht so ganz geschnallt, ist aber jetzt kein Problem mehr! Werde das Skript weiterempfehlen,
Danke Dir!!
Diesen Beitrag zitieren
Sebastian
3. Januar 2011 um 17:43
Ich verwende backup2l zum Sichern von /etc und /home. Bei diesem hirarchischen multi-level-Backup steigt der benötigte Speicherplatz nämlich nur logarithmisch, trotz differentieller Taktik.
04.01.2010 – Bearbeitet von Janek: Link korrigiert
Diesen Beitrag zitieren
HFs Jotter » Blog Archive » Aus der virtuellen Nachbarschaft [21]
4. Januar 2011 um 11:32
[...] grafische Backup-Programme gibt es mittlerweile auch unter Linux en masse. 321tux.de beschreibt ein Backup-Skript, welches das freie Tool rsync für die (inkrementelle) Sicherung auf eine [...]
Bernd
4. Januar 2011 um 14:43
Ich versuchte es neulich mit MyBackupPro. Ging alles wunderbar, bis ich das Backup wieder einspielen wollte. Irgendeine Datei war kaputt, welche? Keine Ahnung. Zum glück habe ich vorher schon mal eins gemacht, so konnte ich dieses verwenden. Ansonsten wäre es das gewesen…
Ein Programm bräuchte es mal, welches Backups auf kaputte Dateien untersucht….
Diesen Beitrag zitieren
FriedChicken
5. Januar 2011 um 01:35
Wenn du rsync magst, soltestdu dir mal rdiff-backup anschauen!
Grafische Oberflächen gibt es wenige (z.B. Keep aus KDE3), aber es ist wie rsync auch gut in einem Skript verwendbar.
Diesen Beitrag zitieren
Uwe
12. Januar 2011 um 15:01
Wers lieber grafisch mag sollte sich mal grsync ansehen. Da kann man ebenfalls mehrere Jobs komfortabel verwalten.
Diesen Beitrag zitieren
maik
21. Januar 2011 um 09:14
Ich nutze auch rsync für os x, ist super und klappt alles gut…
Da ich mich teilweise echt bei der bedienung etwas anstelle,
und irgendwie auch nicht mit Timemachine warm werde
Diesen Beitrag zitieren
cirrus7
27. Januar 2011 um 18:20
Sehr schönes Skript. Besonders die farblich aufgeräumte Darstellung gefällt mir sehr gut. Persönlich benutze ich bisher rdiff-backup. Für die Synchronisation von Verzeichnissen zweier Rechner setze ich unison ein. Das läuft ebenfalls über SSH.
Diesen Beitrag zitieren
Max
7. Februar 2011 um 20:12
Ich habe bei der Installation von Ubuntu mein Homeverzeichnis verschlüsselt und möchte dieses nun mittels des hier vorgestellten Skriptes auf einer externen Festplatte sichern.
Wie erreiche ich es, dass die gesichterten Daten auf meiner Backup-Platte genauso verschlüsselt sind, wie der Inhalt des Quellverzeichnisses?
Diesen Beitrag zitieren
Janek
8. Februar 2011 um 15:08
Hallo Max,
die Daten verschlüsselt zu sichern, dürfte kein Problem sein. Schau mal ins Wiki von ubuntuusers.de (insbesondere die Abschnitte “Systemdateien sichern” und “Daten in codierter Form”; dazu noch Übersicht zu ecryptfs).
Ich bin mir nicht 100%ig sicher, welche Verzeichnisse du sichern musst, aber ich vermute, dass es folgende sind:
/home/.ecryptfs/[benutzer]/.Private
/home/.ecryptfs/[benutzer]/.ecryptfs
Bei einem verschlüsselten Backup solltest du allerdings beachten, dass die Dateien nur noch Datenmüll sind, sobald die Entschlüsselung fehlschlägt (etwa weil das Passwort nicht stimmt oder weil die Schlüsseldateien fehlen)! Teste daher zuvor, ob die Entschlüsselung funktioniert.
Viel Erfolg!
Gruß Janek
Diesen Beitrag zitieren
Patrick
16. Februar 2011 um 00:24
Hallo,
ich finde das Script sehr interessant, aber es will bei mir leider nicht so recht. Bin mit Linux allerdings noch unerfahren. Jedenfalls meldet das Script nach Abschluss:
libnotify-Message: Unable to get session bus: ->dbus-launch failed to autolaunch D-Bus session: ->
Autolaunch error: X11 initialization failed.
rsync: -savPbh: unknown option
rsync error: syntax or usage error (code 1) at main.c(1318) [client=2.6.9]
Eine Log-Datei wird nicht erstellt aber der Vorgang wird als abgeschlossen angezeigt – Keinerlei Inhalt am Ziel ausser erstellte Ordner.
gruss Patrick
Diesen Beitrag zitieren
Janek
16. Februar 2011 um 12:27
Hallo Patrick,
Zitat Patrick ↑:
Die Fehlermeldung bedeutet, dass rsync mit einer unbekannten Version aufgerufen wurde. Da du eine veraltete Version von rsync verwendest (siehe
rsync --version) wird die Option-snicht unterstützt. Da das Skript aber auch ohne funktionieren sollte, kannst du die Zeiledurch folgende ersetzen:
Dann sollte es funktionieren (hoffentlich
).
Dieser Fehler ist für das Backup selbst nicht relevant, da es sich auf die Benachrichtigungen mit libnotify-bin bezieht. Rufst du das Skript über ein Netzwerk oder in einer Umgebung ohne grafische Oberfläche auf?
Gruß Janek
Diesen Beitrag zitieren
Christian
16. Februar 2011 um 13:22
Ganz großes Lob an dich! Du hast dir wirklich viel Mühe gemacht und das Skript funktioniert tadellos bei mir. Ich würde es gerne auch selbst bei mir produktiv einsetzen, allerdings fehlt mir dabei noch eine wichtige Komponente.
Ich würde gerne regelmäßig Backups (beispielsweise jede Woche) machen. Dein Skript überschreibt das ältere Backup immer und listet die Veränderungen auf. Schön wäre noch die Option, dass man die vorherigen Backups noch eine zeitlang behalten kann, dass also jede Woche ein Backup erstellt wird und alle, die älter als 4 Wochen sind, gelöscht werden. Das sehr einfach gehaltene Skript im Wiki von ubuntuusers.de hat diese Funktion integriert. Vielleicht kannst du diese auch noch inegrieren. Leider übersteigt das meine Fähigkeiten.
Gruß Christian
Diesen Beitrag zitieren
Janek
16. Februar 2011 um 14:22
Zitat Christian ↑:
Hallo Patrick,
ohne jetzt zu viel versprechen zu wollen, gehe ich davon aus, dass ich das (früher oder später) umsetzen werde. Mir fehlt momentan dafür leider die Zeit.
Ich würde das dann vermutlich mit
rsync --link-dest(wie bei dem Skript im Wiki von ubuntuusers) oder mitrdiff-backupumsetzen.Momentan werden gelöschte oder veränderte Dateien im Verzeichnis
$BAK_DIRgesichert (1 Verzeichnis pro Tag). Das schützt zwar vor versehentlichem Löschen, aber so komfortabel wie mehrere Snapshots ist das natürlich nicht.Viele Grüße
Janek
Diesen Beitrag zitieren
Patrick
1. März 2011 um 23:32
Hallo Janek,
Danke für deine Unterstützung – Die Anpassung half tatsächlich, nun hab ich nur noch einen Fehler auszuräumen:
process 6409: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open "/var/lib/dbus/machine-id": No such file or directory
See man ....
libnotify-Message: Unable to get session bus: Failed to execute dbus-launch to autolaunch D-Bus session.
Soweit ersichtlich scheint das Backup an sich korrekt ausgeführt zu sein. Falls du hinsichtlich der Ausgabe noch einen Tip hast?
gruss Patrick
Bearbeitet von Janek (02.03.2011): Code-Tag eingefügt
Diesen Beitrag zitieren
Janek
2. März 2011 um 08:25
Zitat Patrick ↑:
Hallo Patrick,
der nun noch vorhandene Fehler hat nichts mehr direkt mit dem Skript zu tun, sondern vermutlich mit D-Bus. Das scheint nicht richtig zu laufen.
Ich habe eben die Fehlermeldung bei Google eingegeben (immer eine gute Möglichkeit, um solchen Probleme auf die Spur zu kommen) und bin auf folgenden Befehl gestoßen:
Der Befehl generiert eine ID und speichert sie in der Datei machine-id, welche bei dir momentan noch nicht existiert.
Vielleicht löst das dein Problem.
Viel Erfolg!
Gruß Janek
Diesen Beitrag zitieren
DSIW
4. März 2011 um 16:34
Hallo,
ich nutze das Skript auch schon in der alten Version seit einem Jahr und bin voll zufrieden. Nun benutze ich das neue Skript und habe den Aufruf noch in /etc/cron.daily/ verschoben, damit es täglich automatisch ausgeführt wird.
Vielen Dank!
Gruß
Diesen Beitrag zitieren
dug
19. Mai 2011 um 20:17
Hallo,
in der Shell läuft das Skript klasse aber als cron-job bekomme ich es nicht ans laufen.
Bekomme dann ständig folgendes :
Gruß
dug
Bearbeitet von Janek: Codeblock
Diesen Beitrag zitieren
Janek
19. Mai 2011 um 20:26
Zitat dug ↑:
Hallo dug,
schau mal: Befehl klappt in Skript und Shell, aber nicht im Cronjob. Vielleicht reicht dir das als Lösungsansatz schon aus.
Gruß Janek
Diesen Beitrag zitieren
Stefan
11. Juni 2011 um 08:44
Klasse Skript. wenn ich es per cron laufen lasse bekomem ich folgenden Fehler gemailt: TERM environment variable not set.
Ich habe ein wenig gegoogelt und das als abhilfe gefunden:
cleardurch
ersetzen… bitte in der nächsten Version einbauen.
Bearbeitet von Janek: Codeblöcke eingefügt.
Diesen Beitrag zitieren
Stefan
11. Juni 2011 um 09:08
Kannst Du noch einen Switch einbauen für Systeme ohne grafische Benutzeroberfläche? Ich verwende das Skript unter Debian auf ner SheevaPlug. Die “notify” braucht es da nicht. Ich schicke Dir auch gerne einen Vorschlag…
Diesen Beitrag zitieren
Stefan
11. Juni 2011 um 15:27
Mir ist noch aufgefallen, dass wenn man als Quelle “/” angibt, der Ordner “Geloescht Dateien” und das Log im Ziel Ordner landen und beim nächsten Backup gelöscht werden.
Wegen der clear und notify sache, hab ich mal ein wenig gespielt:
Bearbeitet von Janek: Codeblock
Bearbeitet von Janek: Code stark gekürzt, da Sonderzeichen ohnehin nicht mehr richtig dargestellt wurden.
Diesen Beitrag zitieren
Janek
11. Juni 2011 um 15:50
Hallo Stefan,
danke für deine Verbesserungsvorschläge.
Ich habe dir eine E-Mail gesendet.
Gruß
Diesen Beitrag zitieren
Stefan
12. Juni 2011 um 14:59
Hallo Janek,
ich habe inzwischen das modifizierte Skript (aus meiner letzten Mail) auf zwei Linux-Installationen (SheevaPlug – Debian/Squeeze und VDR – Gentoo) am laufen und keine Probleme festgestellt.
Diesen Beitrag zitieren
Janek
12. Juni 2011 um 19:36
Hallo Stefan,
es hat bei mir nun etwas länger gedauert, aber ich habe das verbesserte Skript nun veröffentlicht.
Ob
echoodernotify-sendverwendet wird, muss man nicht selbst konfigurieren, da das Skript nun abhängig vom Inhalt der Umgebungsvariablen$DISPLAYdas passende Tool wählt.Das Root-Workaround habe ich an eine passendere Stelle verschoben.
Ich habe es zwar oben im Text bereits erwähnt, aber nochmals vielen Dank!
Viele Grüße
Janek
Diesen Beitrag zitieren
Stefan
13. Juni 2011 um 11:00
Zitat Janek ↑:
Hallo Janek,
ich fürchte das Verschieben in die func_settings bewirkt, dass das anschließende func_bak_dir den Ordner Geloeschte Dateien wieder in das Sicherungsverzeichnis legt, was wiederum zum löschen beim nächsten Durchgang führt. Also entweder die Abfrage nach den Funktionen machen oder in der func-bak_dir ebenfalls testen, ob $SOURCE=”/”
Hier die Ausgabe (echo vor dem rsync)
Diesen Beitrag zitieren
Janek
13. Juni 2011 um 11:38
Zitat Stefan ↑:
Oh shit, da war ich wohl etwas voreilig *peinlich*.
Ich lasse nun “/ROOTFS” in
$BAK_DIRersetzen:Danke für deine Rückmeldung!
Ich hoffe, dass ich diesmal nichts übersehen habe.
Gruß Janek
Diesen Beitrag zitieren
Daniel
28. Juni 2011 um 13:25
Danke für Dein Script,
das Script mit neustem Update funktioniert super.
ich habe es noch ein wenig angepasst und möchte mein “Addon” der Allgemeinheit zur Verfügung stellen.
Ich habe noch eine Mailfunktion eingebaut (mailserver, wie postfix natürlich vorausgesetzt), so dass nach Fertigstellung des Backups eine eMail versendet wird und die Log-Datei (hier als bzip2) in den Anhang setzt:
Allgemeine Konfiguration:
.. und das anschließende packen des logs und das versenden
Da ich kein großer Shellfreak bin, kann es sein, dass es da sicher noch die eine oder andere Norm gibt, die ich vielleicht nicht eingehalten habe, aber es funktioniert…
Wer es braucht, dem sei es gegeben, wer nicht …. der nicht.
Gruß
Daniel
Bearbeitet von Janek am 28. Juni 2011: Syntaxhervorhebung
Diesen Beitrag zitieren
Daniel
28. Juni 2011 um 13:29
Ich habe noch die MAILLOGSUFFIX vergessen, diese kommt noch in die allgemeine Konfiguration:
Gruß
Daniel
Bearbeitet von Janek am 28. Juni 2011: Syntaxhervorhebung
Diesen Beitrag zitieren
Janek
28. Juni 2011 um 22:52
Hallo Daniel,
herrlich: geben und nehmen – oder umgekehrt, naja, zumindest vielen Dank für deine Erweiterung, welche sicherlich etlichen Leuten behilflich sein wird.
Das Versenden von Mails in Skripten gehört zu den Themen, die ich mir schon immer einmal vornehmen wollte. Da kommt dein Code gerade recht
.
Gruß Janek
Diesen Beitrag zitieren
Daniel
29. Juni 2011 um 13:40
Gerne doch
,
jetzt hab ich nur ein Problem, dass die aktuelle log-Datei am Ende einfach “weg” also gelöscht ist. Sie landet immer automatisch im aktuellen “Geloeschte Dateien” Ordner.
Ich kann mir nicht erklären wo und warum das passiert, hast Du dieses Phänomän auch?
Gruß
Daniel
Diesen Beitrag zitieren
Janek
29. Juni 2011 um 14:05
Hallo Daniel,
es ist ganz simpel: der Befehl
bzip2 -f $LOGlöscht die ursprüngliche Datei, welche dann offenbar beim nächsten Durchlauf im Verzeichnis “Geloeschte Dateien” landet.Abhilfe schafft die Option
-kbzw.--keep:Damit sollte es eigentlich passen, sofern ich nichts übersehen habe.
Gruß Janek
Diesen Beitrag zitieren
Daniel
29. Juni 2011 um 14:15
Zitat Janek ↑:
Hi Janek,
ja, das ist mir bewusst und sogar gewollt
,
aber die Datei ist vorher weg:
Privat wurde abgeschlossen
Weitere Informationen sowie Fehlermeldungen sind in der Datei "/media/backup/backup_intern/Privat-log.txt" gespeichert.
bzip2: Can't open input file /media/backup/backup_intern/Privat-log.txt: No such file or directory.
ERROR: Could not stat file /media/backup/backup_intern/Privat-log.txt.bz2: No such file or directory
error while attaching /media/backup/backup_intern/Privat-log.txt.bz2: File I/O Error No such file or directory
Die Privat-log.txt liegt jetzt bei mir direkt nach Fertigstellung im Unterverzeichniss “Geloeschte Dateien”.
Bei dem ersten Backup war sie noch da und es hat alles wie gewünscht funktioniert, aber beim zweiten Durlauf lag sie dann direkt im “Geloeschte Dateien” Ordner …
Diesen Beitrag zitieren
Janek
29. Juni 2011 um 14:32
Zitat Daniel ↑:
Hatte schon befürchtet, dass es nicht ganz so easy ist…
Der Pfad zur Logdatei, der ja in der Variablen $LOG gespeichert ist, ist korrekt. Daher fällt mir spontan auch keine mögliche Fehlerursache ein.
Hast du irgendetwas an dem Skript verändert, abgesehen von dem Mailversand am Ende? Denn bei mir tritt das beschriebene Problem nicht auf.
Überprüfe bitte, ob du diesen Teil bei dir im Skript auch so vorfindest:
Ich schick dir gleich ne Mail; dann können wir das auch so klären.
Gruß Janek
Diesen Beitrag zitieren
Paul
30. Juni 2011 um 10:35
Das Script sieht auf den ersten Blick echt super aus und ist glaube ich genau das was ich mir vorstelle. Zwei Nachfragen:
1. Habe ich richtig verstanden: Bei der ersten Ausführung werden alle Daten kopiert, ab dann nur noch die geänderten Dateien. Gelöschte und alte Versionen von Dateien kommen in ein Verzeichnis mit dem jeweiligen Backupdatum. Es besteht sozusagen eine Versionierung. Korrekt?
2. Ich möchte auf eine externe Festplatte sichern. Es wird ja schon geschaut, ob der Mountpoint existiert und wenn nicht wird abgebrochen (?). Ich hätte in diesem Fall gern eine Meldung: “Backupziel nicht angeschlossen. Bitte jetzt mounten. [Wiederholen] [Abbrechen]” Möglich?
Diesen Beitrag zitieren
Janek
30. Juni 2011 um 11:21
Zitat Paul ↑:
Hallo Paul,
ob auch neben den gelöschten Dateien auch geänderte Dateien in das Verzeichnis “Geloeschte Dateien” kopiert werden, wusste ich ehrlich gesagt gar nicht mehr ganz genau. Habe aber gerade einen kleinen Test gemacht und es ist offenbar der Fall.
Eine Snapshot-Funktion, mit der sich sozusagen der Zustand eines bestimmten Tages wiederherstellen lässt, ist es aber dennoch nicht. Die Funktion ist eher dafür gedacht, einzelne Dateien, die versehentlich gelöscht wurden, wiederherzustellen.
Wenn du eine ausgefeiltere Versionierung möchtest, solltest du dir mal
rdiff-backupanschauen.Hier mal ein Skript von mir, dass derzeit auf einem kleinen Server läuft und ein Verzeichnis meines Notebooks sichert (verwende daher das in diesem Blogpost veröffentlichte Skript nicht mehr). Es müsste allerdings erst noch an deine Bedürfnisse angepasst werden.
Wenn du in der Konfiguration einen Mountpoint angibst (
MOUNT="/media/Meine externe Festplatte") wird zu Beginn geprüft, ob die Festplatte eingebunden ist. Falls dies nicht der Fall sein sollte, wird mit einer entsprechenden Fehlermeldung abgebrochen.Gruß Janek
Diesen Beitrag zitieren
Paul
30. Juni 2011 um 15:45
Zitat Janek ↑:
Das reicht mir aus. Man nehme an: ich bearbeite eine Datei täglich und das Backup läuft ebenfalls täglich, dann hätte ich also von jedem Tag eine Version der Datei…
Die Versionierung mit rdiff benötigt dann beim Aufrufen einer bestimmten Version der Datei zwingend die Software, oder?
Gut. Ich will das ganze über Cron laufen lasse und da wäre es doof, wenn das Backup ständig abbricht, weil die Festplatte nicht gemountet ist. Stattdessen fände ich eine Meldung ala: “Backupziel nicht angeschlossen. Bitte jetzt mounten. [Wiederholen] [Abbrechen]” sinnvoll. Wie ist das möglich?
Diesen Beitrag zitieren
Chrische
19. Juli 2011 um 20:38
Super Script! Vielen dank, einfacher gehts ja fast nicht.
Diesen Beitrag zitieren
chefchiller
1. September 2011 um 20:04
Hola,
bekomme beim Startversuch des Scripts folgenden Fehler
chef@HermesII:~/Downloads$ sh backup-321tux.sh -pn backup-321tux.sh: 34: Syntax error: "(" unexpectedDebian 11.04
jemand ne Ahnung ?
Bearbeitet von Janek (8. Sept. 2011): Codeblock eingefügt.
Diesen Beitrag zitieren
Janek
8. September 2011 um 19:38
Zitat chefchiller ↑:
Hallo checfchiller,
für die Funktion in Zeile 34 gibt es verschiedene Schreibweisen. Du könntest das einleitende Wort
functionoder die beiden Klammern()entfernen. Wenn du damit erfolgreich bist, müsste der Fehler beim erneuten Ausführen des Skriptes in einer anderen Zeile auftreten, da mehrere Funktionen verwendet werden.Warum bei dir der Fehler auftritt und bei anderen nicht, ist mir allerdings selbst ein Rätsel.
Gruß Janek
Diesen Beitrag zitieren
Stefan
2. Oktober 2011 um 12:01
Ich habe mal einen neuen Parameter (-d) eingebaut, mit dem dann alte Backups entfernt werden. der Parameter erwartet eine Zahl als Argument (-d 120) um z.B. Backups älter als 120 Tage zu löschen. Schau dir mal das Skript an. Es ist wegen dem rm aber mit Vorsicht zu genießen.
Bearbeitet von Janek am 2. Okt. 2011: Code-Tag korrigiert. Mit folgender Syntax können Bash-Codes eingefügt werden (die Rauten # und Leerzeichen vor “pre” müssen entfernt werden!):
Diesen Beitrag zitieren
Daniel
14. Oktober 2011 um 01:14
Hallo Janek,
echt SUPER!! Vielen Dank für deine investierte Arbeitszeit und die Veröffentlichung online! Das Script spart eine Menge Zeit und hilft enorm!!
Viel Erfolg weiterhin.
Daniel
Diesen Beitrag zitieren
Uwe S
2. November 2011 um 18:32
Hallo Janek,
ich habe mir mal dein Scripts heruntergeladen und source & target modifiziert.
Leider bekomme ich bei der Ausführung aber immer ein:
root@uwe-ubuntu-3:/root# sh backup-321tux.sh -ph backup-321tux.sh: 34: Syntax error: "(" unexpectedMache ich irgendwas falsch? Ubuntu 11.10 server
Gruss Uwe
Bearbeitet von Janek (2.11.2011): pre-Tag eingefügt
Diesen Beitrag zitieren
Janek
2. November 2011 um 18:39
Zitat Uwe S ↑:
Hallo Uwe,
du hast vermutlich nichts falsch gemacht. Von diesem Problem hat schon einmal jemand berichtet und ich vermute, dass sich die Syntax in einer neueren Version der Bash geändert hat. Probiere mal diesen Vorschlag aus und berichte uns anschließend bitte, ob es damit funktioniert.
Viele Grüße
Janek
EDIT: Da fällt mir gerade noch etwas ein: starte das Skript mal ohne “sh”, also
Diesen Beitrag zitieren
Stefan
3. November 2011 um 08:13
Möglicherweise ist es immer noch so, dass unter ubunu “dash” als Shell dient. Mach mal ein “ls -l /bin/sh” um zu sehen ob es auf bash zeigt. Wenn nicht, dann im Skript mal die ertsze Zeile ändern in “#!/bin/bash”
Das habe ich dazu gefunden: http://ubuntuforums.org/showpost.php?p=3006552&postcount=2
Diesen Beitrag zitieren
Uwe S
3. November 2011 um 10:29
Zitat Janek ↑:
Hallo Janek, genau das wars!
Ohne “sh” am Anfang läuft alles wunderbar!
Dank Euch allen für Eure schnellem Antworten!
Gruss Uwe
Diesen Beitrag zitieren
ch
8. November 2011 um 21:02
Hy!
Zuerst mal Kompliment! Tolles Script ist wirklich einfach zu verstehen!
Habe nur ein Problem:
Ich habe mittels davfs2 meinen box.net Cloud-Speicher auf meinen Server unter /media/box.net gemountet. Das klappt alles schon ganz gut, auch wenn der Server neustartet, wird die Partition richtig gemountet.
Wenn ich nun aber das Script starte, bekomme ich folgenden Fehlermeldung:
FEHLER Die Festplatte ist nicht eingebunden. ("/media/box.net/domain")Zusätzlich wird mir folgendes vom Script ausgegeben:
Woran kann das liegen?
Bearbeitet von Janek (9.11.2011): pre-Tag eingefügt
Diesen Beitrag zitieren
Janek
9. November 2011 um 00:16
Hallo ch,
um zu testen, ob eine Festplatte eingebunden ist, durchsucht das Skript die Ausgabe des Befehls
mountnach dem im Skript festgelegten Mountpoint. Ist dies nicht der Fall, wird die entsprechende Fehlermeldung ausgegeben und das Skript abgebrochen.Ich weiß nicht, wie sich davfs2 verhält, aber ich vermute, dass “/media/box.net/” nicht angezeigt wird, wenn du folgendes im Terminal eingibst:
mountWenn ich mit meiner Vermutung richtig liegen, kannst du den Mount-Check mit “#” auskommentieren (wird also nicht mehr beachtet) oder du schaust, wie sich mit davfs2 herausfinden lässt, ob ein Verzeichnis eingebunden ist (und integrierst das dann im Skript an der entsprechenden Stelle).
Viele Grüße
Janek
Diesen Beitrag zitieren
Stefan
9. November 2011 um 08:19
Oder einfach mal in der allgemeinen Konfiguration MOUNT= leer lassen oder auskommentieren. Dann sollte auch keine Prüfung erfolgen.
Diesen Beitrag zitieren
ch
9. November 2011 um 09:18
Guten Morgen!
Danke für die schnellen Antworten
Habe mit folgenden Befehlt überprüft ob das externe Verzeichnis richtig eingehangen ist:
user@Ubuntu-1104-natty-64-minimal:/$ mount -t davfs
und bekomme dann folgendes raus
https://www.box.net/dav on /media/box.net type davfs (rw,nosuid,nodev,_netdev)
also anscheinend ist das Verzeichnis doch richtig eingebunden. Hab es trotzdem mal auskommentiert, danach funktioniert das Ausführen des Scripts.
Nur habe ich jz den nächsten Fehler, bestimmte Verzeichnisse werden einfach mit der Meldung Permission denied übersprungen und nicht synchronisiert.
Ich führe das Script als Admin-User aus (root ist gelockt) wie kann ich es erzwingen, dass trotzdem alle Verzeichnisse und Dateien (auch mit Dateirechten wie z.B. tomcat oder www-data) kopiert werden?
Danke und beste Grüße!
Diesen Beitrag zitieren
ch
10. November 2011 um 18:14
Zitat ch ↑:
… das Problem mit den Mountpoint habe ich nun gelöst. Nur bleibt jz noch das Verzeichnis, dass kaum Dateien gesichert werden der Großteil der Daten wird mit der Meldung
Permission denied (13) bzw. Function not implemented (38)
Diesen Beitrag zitieren
Janek
10. November 2011 um 19:09
Zitat ch ↑:
Hallo ch,
das Skript bzw. rsync sind bereits so konfiguriert, dass alle Dateien inkl. der Berechtigungen kopiert werden. Es handelt sich daher nicht um einen Fehler im Skript, sondern liegt an der Konfiguration deines Systems. Du kannst es vielleicht mal mit der rsync-Option
--fake-superprobieren, wobei ich nicht wirklich weiß, ob das ein passender Ansatz ist.Ansonsten kann ich dir nur empfehlen, weiter im Internet zu recherchieren bzw. in einem Forum nachzufragen. Wenn du die richtige Einstellung für rsync gefunden hast, kannst du sie ohne weiteres im Skript integrieren.
Viel Erfolg,
Gruß Janek
Diesen Beitrag zitieren
EliasMH
27. November 2011 um 17:18
Wunderbar, zeit gespart, und doch verloren. So ist das, wenn man sich in den code von jemand anderem einarbeitet und gefallen an der sache findet.
Arbeite gerade an einer snapshot lösung.
Diesen Beitrag zitieren
Backup-Skript - Stefan's Blog
12. Dezember 2011 um 15:47
[...] Komfortables Backup-Skript (rsync) | 321tux.de [...]
Backup-Skript mit FTP-Quelle - Stefan's Blog
7. Januar 2012 um 13:12
[...] habe das Backup-Skript von Komfortables Backup-Skript (rsync) | 321tux.de um eine weitere Funktion erweitert. Diesmal ging es mir darum, einen FTP-Server als Quelle [...]
Schrammi
13. Juli 2012 um 21:08
Hallo,
ein super Skript.
Wäre es auch möglich als Ziel ein Bandlaufwerk, in meinem Fall dev/st0, anzugeben?
Wenn ja, wie?
Grüße
Schrammi
Diesen Beitrag zitieren
Janek
2. August 2012 um 19:25
Zitat Schrammi ↑:
Hallo Schrammi,
dazu kann ich leider nichts sagen, da ich noch nie mit Bandlaufwerken gearbeitet habe und auch auf die Schnelle nichts stichhaltiges ergoogeln konnte. Womöglich hilft dir aber der Wiki-Artikel Sicherungskopien auf Streamer weiter.
Gruß
Diesen Beitrag zitieren
Felixx
14. August 2012 um 17:26
Hi!
habe das Script getestet – funktioniert auch unter Debian (wer hätte das gedacht) einwandfrei
!
Selbst nutze ich aber lieber “luckyBackup” – funktioniert prima…
Danke für das Script – nutze ich jetzt bei meinem Server.
Lg
Felixx
Diesen Beitrag zitieren
Uwe
15. August 2012 um 07:52
Zitat Felixx ↑:
Hatte ich bis vor einiger Zeit auch im Einsatz. Läuft prima solange man rsync rein im Filesystem einsetzt. Bei rsync via LAN gegen einen rsync-Server (mein NAS) war luckyBackup extrem zickig und nicht wirklich zu gebrauchen. Also doch wieder gescriptet und da läuft rsync wunderbar stabil.
Diesen Beitrag zitieren
Linux Backup Script mittels rSync | mikrofiche
28. November 2012 um 07:58
[...] http://www.321tux.de/2011/01/komfortables-backup-skript-rsync/ Posted under: Betriebssysteme, EDVTagged as: Backup, File, GNU, GPL, Linux, Open Source, Sicherung, Ubuntu Previous [...]
Christian Weidinger
6. Dezember 2012 um 16:16
Hallo!
Wollte das Script testen erhalte aber nur ein
FEHLER Konfigurationsdatei nicht gefunden.
Woran könnte das liegen?
Diesen Beitrag zitieren
Janek
6. Dezember 2012 um 16:26
Zitat Christian Weidinger ↑:
Hallo Christian,
diese Fehlermeldung wird von meinem Skript nicht ausgegeben, weshalb ich davon ausgehe, dass du Stefans Erweiterung verwendest. Bei dieser muss sich im selben Verzeichnis wie das Skript eine Konfigurationsdate “.conf” befinden. Schau ansonsten mal in Stefans Blog.
Dir noch viel Erfolg
Gruß Janek
Diesen Beitrag zitieren
Stefan
6. Dezember 2012 um 16:36
Auf die schnelle kannst Du mal schauen, ob am anfang Vom Skript schon der Eintrag mit readlink vorhanden ist:
Bearbeitet von Janek am 6. Dez. 2012: Syntaxhighlighting aktiviert.
Diesen Beitrag zitieren
Christian Weidinger
6. Dezember 2012 um 16:48
Herzlichen dank.
Nach einfügen der Änderungen im Skript hat’s dann auch geklappt.
Auf den ersten Blick eine tolle Arbeit und genau das was ich gesucht habe (rsync).
Gruß Christian
Diesen Beitrag zitieren
Jürgen
23. Dezember 2012 um 23:31
ich habe heute das Script getestet und es funktioniert bei mir ausgezeichnet. Weiter oben habe ich von einer Ergänzung für EMail gelesen, an welchen Stellen müssen die Ergänzungen vorgenommen werden? Habe leider keine Ahnung von Scripten.
Ich wünsche allen ein frohes Weihnachtsfest und vielen Dank für das tolle Script incl. Anpassungen.
Viele Grüße
Jürgen
Diesen Beitrag zitieren
Ralph
30. Dezember 2012 um 11:39
Ein großartiges Script! Vielen Dank!
Ich habe bei mir in einem profile als target folgendes eingetragen:
target[2]="$MOUNT/eclipse_$(date +%d_%m_%y)"Dadurch erhalte ich dann das backup jeweils in einem snaptshot Verzeichnis mit Datumsangabe.
Diesen Beitrag zitieren
Janek
2. Januar 2013 um 12:57
Zitat Jürgen ↑:
Hallo Jürgen,
gemäß des Kommentars von Daniel sollte der Konfigurationsteil am Besten am Anfang des Skriptes und der Versandteil direkt vor der Zeile
# ggf. Herunterfahreneingefügt werden.Falls noch etwas unklar ist, kannst du dich gerne melden.
Viele Grüße,
Janek
Diesen Beitrag zitieren
Jürgen
2. Januar 2013 um 13:02
Vielen Dank, werde es demnächst mal testen.
Die Sicherung läuft wirklich prima, ich bin begeistert.
Viele Grüße
Jürgen
Diesen Beitrag zitieren
Cornelius
31. Januar 2013 um 19:03
Hallo Janek,
erstmal vielen Dank für die klasse Arbeit.
Eine Frage hätte ich noch:
Wie starte ich denn das zeitabhängig z.Bsp wöchentlich?
Diesen Beitrag zitieren
Janek
31. Januar 2013 um 19:15
Zitat Cornelius ↑:
Hallo Cornelius,
das geht ganz klassisch mit Cron oder alternativ mit Anacron.
Gruß
Diesen Beitrag zitieren
Alex
3. März 2013 um 22:48
Hallo!
Für das zeitabhängige starten verwende ich cron. Frag mal google, da findest du haufenweise Infos dazu.
Ich würde gerne wissen, ob sich schon jemand daran gemacht hat, dieses Skript mit Snapshot- und gleichzeitiger Hardlink-funktion auszustatten. Ralphs Idee ist zwar nicht schecht, aber bei 800GB an zu sichernden Daten einfach nicht machbar.
Gruß alex
Diesen Beitrag zitieren
Alex
3. März 2013 um 22:57
Hallo! Hat schonmal jemand versucht, die Snapshot- und Hardlink- funktion (aus dem Skript von ubuntuusers) mit diesem hier zu kombinieren?
Die Idee von Ralph ist ja nicht schlecht, aber gei 800 GB einfach nicht machbar
Gruß Alex
Diesen Beitrag zitieren
Alex
7. März 2013 um 20:45
Ohje… sorry für die tausend posts von mir…. kann das bitte jemand auf das wesentliche einkürzen?
Diesen Beitrag zitieren
Janek
7. März 2013 um 20:52
Zitat Alex ↑:
Hallo Alex,
sorry, hatte deine Beiträge übersehen. Deine Frage kann ich auch nicht wirklich beantworten, aber evtl. ist rdiff-backup etwas für dich.
Die doppelten Beiträge habe ich entfernt.
Viele Grüße,
Janek
Diesen Beitrag zitieren
Timo
12. Mai 2013 um 13:18
Hallo,
ich bin auf der Suche nach einem Backup Script über dieses hier gestolpert, habe jedoch Probleme bei der Ausführung.
Beim Aufruf von
sh backup-321tux.sh -phwird mit im Terminal folgende Fehlermeldung ausgegeben:timo@Maddox ~/Backup $ sh backup-321tux.sh -ph
backup-321tux.sh: 60: backup-321tux.sh: title[1]=DocsBackup: not found
backup-321tux.sh: 61: backup-321tux.sh: arg[1]=h: not found
backup-321tux.sh: 62: backup-321tux.sh: source[1]=/home/timo/Dokumente: not found
backup-321tux.sh: 63: backup-321tux.sh: target[1]=/mnt/NAS-Backup: not found
backup-321tux.sh: 64: backup-321tux.sh: Bad substitution
Leider kenne ich mich mit Skripten nicht so gut aus und bin daher leicht überfordert.
Weiß jemand eine Lösung?
Gruß, Timo
Diesen Beitrag zitieren
Timo
12. Mai 2013 um 13:20
P.S.: Das System ist Linux Mint 14
Diesen Beitrag zitieren
Janek
12. Mai 2013 um 13:27
Zitat Timo ↑:
Hallo Timo,
das sieht ja seltsam aus… Spontan fällt mir dazu auch nichts ein, außer, dass du beim Aufruf das
shweglassen kannst (also./backup-321tux.sh -ph).Ansonsten kannst du mir deine Datei auch per Mail schicken; dann schau ich mal drüber. Womöglich ist auch irgendwo ein Zeichen falsch ein gefügt oder gelöscht worden. Ich sende dir gleich eine E-Mail, damit du meine Adresse hast.
Gruß
Diesen Beitrag zitieren
Timo
12. Mai 2013 um 13:48
Danke für deine Hilfe,
kurzes googlen hat ergeben, dass ein Aufruf mit “sh” statt “bash” zu fehlern führen kann. nun funktioniert es einwandfrei.
Timo
Diesen Beitrag zitieren
Janek
12. Mai 2013 um 13:57
Zitat Timo ↑:
Bitte. Selbst
bashmuss nicht zwangsläufig vorangestellt werden, da Linux Mint die Bash vermutlich ohnehin als Standard-Shell nutzt.Gruß
Diesen Beitrag zitieren