Komfortables Backup-Skript (rsync) (Update)

In: GNU/Linux

2

Jan

2011

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)

Funktionen

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:

  • Es lassen sich beliebig viele Backup-Profile konfigurieren (mit unterschiedlichen Verzeichnissen und Einstellungen).
  • Es können mehrere oder alle Profile auf einmal gestartet werden (-p* -p* / -a; s.u.).
  • Optional können zu synchronisierende Verzeichnisse direkt an das Skript übergeben werden (-m; s.u.).
  • Nach abgeschlossenem Backup kann der Computer optional automatisch heruntergefahren werden (mit Abbruchmöglichkeit). Dazu sind in der Regel keine Root-Rechte erforderlich (-s; s.u.).
  • Dateien und Verzeichnisse lassen sich unkompliziert von der Sicherung ausschließen (<<EOF und EOF; s.u.)
  • Aussagekräftige Fehlermeldungen und eine Anleitung erleichtern die korrekte Verwendung des Skriptes.
  • Benachrichtigungen mit notify-send und wall (dadurch kann das Skript auch gut im Hintergrund ausgeführt werden).

Abhängig von den Optionen von rsync sind zudem folgende Dinge möglich und standardmäßig eingestellt:

  • Im Quellverzeichnis gelöschte Dateien werden auch im Zielverzeichnis gelöscht.
    Aber: alle gelöschten und veränderten Dateien werden zuvor in einem separaten Ordner gesichert und müssen dort manuell gelöscht werden ($BAK_DIR; s.u.)
  • Eine Logdatei, in der alle Aktionen von rsync aufgezeichnet werden, wird angelegt ($LOG; s.u.).

Konfiguration

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.

Skript ausführen

Wie das Skript korrekt aufgerufen wird, ist folgendem Screenshot zu entnehmen:

Die Hilfe kann mit -h aufgerufen werden und erscheint zudem bei Fehlern

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.

Update  (12. Juni 2011)

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:

  • Fehler im Zusammenhang mit clear bei Ausführung als Cron-Job behoben
  • notify-send wird nur noch bei Systemen mit grafischer Oberfläche verwendet, ansonsten echo
  • das Zielverzeichnis wird angepasst ($TARGET/ROOTFS), wenn als Quelle das Root-Verzeichnis verwendet wird
  • „ERROR“ wurde durch das schöne deutsche Wort „FEHLER“ ersetzt
  • noch ein paar Kleinigkeiten

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.

Update (7. Januar 2012) – weitere Funktionen von Stefan

Stefan hat das Backup-Skript auf seinem Blog um einige nützliche Funktionen erweitert:

  • Ein- und Aushängen des Sicherungs-Ziels
  • Entfernen von alten Sicherungen und Log-Dateien nach einstellbarer Zeit (Tage)
  • Konfiguration ausgelagert, um den Einsatz auf mehreren Systemen zu vereinfachen (zum Skript)

Update (26. September 2014) – noch mehr Funktionen & Forum

Zwar nutze ich „mein“ Skript schon lange nicht mehr (sondern stattdessen ein simples Skript mit rdiff-backup), doch erfreut es sich anscheinend weiterhin großer Beliebtheit. In den Kommentaren findet ihr mittlerweile zahlreiche Anpassungen und Erweiterungen. Hervorgetan hat sich dabei insbesondere Stefan B., welcher neben den im letzten Update genannten Features und einigen Komfortfunktionen noch folgendes implementiert hat:

  • Versand eines E-Mail-Bericht nach Abschluss des Backups

Stefans Skript und eine zugehörige Konfigurationsdatei findet ihr jeweils aktuell unter folgenden Links:

Da die Kommentarfunktion des Blogs nur wenig geeignet für Support und gegenseitigen Austausch ist, wurde von Stefan ein entsprechender Thread im Digital Eliteboard angelegt:

Bitte nutzt diesen Thread als Anlaufstelle für konkrete Fragen zum Skript. Ansonsten dürft ihr natürlich weiterhin hier kommentieren.

Update: entsprechender Beitrag in Stefans Blog: Backup-Skript mit eMail-Funktion

Zum Download

Das Skript könnt ihr auf der nächsten Seite herunterladen ;-).

Seiten: 1 2

Werbung:

149 Kommentare zu Komfortables Backup-Skript (rsync) (Update)

» Kommentar schreiben

Avatar

Jogi29

18. April 2014 um 14:11

vielen dank für die Antwort, aber das ist ein wenig zu hoch für mich.
Also der Zugriff auf den entfernten PC per SSH ist mit User und Passwort geschützt und wird abgefragt, diese müssten also beim Ausführen des Scriptes mit übergeben werden, das Script wird in der Nacht ausgeführt.
Kannst du mir ein Beispiel geben, wie ein Profil aussehen müsste. Werden alle ntwendigen Informationen in rsync_opt[8]="" eingetragen? So?

rsync_opt[8]="-avz -e 'ssh -p 12345' user@dyndns.org"

Vielen Dank im Voraus

Bearbeitet von Janek am 2.6.2014: Codeblöcke eingefügt.

Diesen Beitrag zitieren

Avatar

Jogi29

18. April 2014 um 15:04


Backup startet (Profil: "Backup")
sending incremental file list
rsync: link_stat "/root/root@mein.dyndns.org" failed: No such file or directory (2)

bekomme immer diese Fehlermeldung

Diesen Beitrag zitieren

Avatar

Jogi29

21. April 2014 um 12:53

irgend etwas stimmt da nicht, ich habe das Profil mit

rsync_opt[8]=”-avz -e ‘ssh -p 12345′ root@mein.dyndns.org”

ergänzt, wieso erhalte ich dann den Fehler laut Post vom 18.04.2014 mit
/root/root… ?

Wenn ich das Ganze über

rsync -avz --delete -e 'ssh -p 12345' /mnt/nas/Test/ root@mein.dyndns.org:/mnt/lan/Sicherung/

starte, klappt die Sicherung.

Bearbeitet von Janek am 2.6.2014: Codeblöcke eingefügt.

Diesen Beitrag zitieren

Avatar

Dieter

29. Mai 2014 um 11:56

Vielen Dank für diesen hilfreichen Beitrag. Ich nutze rsync schon sehr lange zum Backup von privaten Daten wie Fotos und Musik. Mit den Infos in diesem Beitrag habe ich meine Skripte nun noch einmal deutlich verbessern können. Danke!

LG, Dieter

Diesen Beitrag zitieren

Avatar

Jogi29

30. Mai 2014 um 12:49

@Janek
konntest du die SSH-Optionen überprüfen?
Ich würde mich darüber freuen, denn das Script ist super.

Viele Grüße
Jürgen

Diesen Beitrag zitieren

Avatar

Janek

2. Juni 2014 um 23:18

Hallo Jogi29,

da habe ich dich nun aber lange warten lassen…

Zitat Jogi29 :

Also der Zugriff auf den entfernten PC per SSH ist mit User und Passwort geschützt und wird abgefragt, diese müssten also beim Ausführen des Scriptes mit übergeben werden, das Script wird in der Nacht ausgeführt.

Die Zugangsdaten ungeschützt im Skript zu hinterlegen ist a) keine gute Idee und b) funktioniert vermutlich ohnehin nicht. Du musst also mit Public Keys arbeiten. Siehe dazu auch Authentifizierung über Public-Keys (und obige Links).

Werden alle ntwendigen Informationen in rsync_opt[8]="" eingetragen? So?

rsync_opt[8]="-avz -e 'ssh -p 12345' user@dyndns.org"

Laut Fehlermeldungen und Config-Ausschnitt wird ein ungültiges Ziel verwendet.

Probiere mal folgendes aus:

# [n] ist durch eine Zahl zu ersetzen, z.B. [2] oder [3]
 title[n]="Backup over SSH"
   arg[n]="s"
source[n]="/mnt/nas/Test/"
target[n]="root@mein.dyndns.org:/mnt/lan/Sicherung"
rsync_opt[n]="-avz --delete -e 'ssh -p 12345'"
# […]

Falls es nicht klappt, kannst du dir mit folgender Zeile ausgeben lassen, welcher Befehl ausgeführt wurde (man beachte das echo):

# Backup mit rsync starten
echo rsync $RSYNC_OPT --log-file="$LOG" --exclude-from="$EXFROM" --backup-dir="$BAK_DIR" $SOURCE "$TARGET"

Getestet habe ich obige Anweisungen nicht!

Viele Grüße,
Janek

Diesen Beitrag zitieren

Avatar

Jogi29

3. Juni 2014 um 10:35

Hallo Janek,

die Authentifizierung habe ich über deinen Link vom 17.04.2014 realisiert 😉

Wenn ich deine Einstellungen verwende, erhalte ich folgende Meldungen:

Backup startet (Profil: "Backup")
sending incremental file list
rsync: change_dir#4 "/root//Dateien/2014-06-03" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(908) [Receiver=3.0.9]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

Backup wurde abgeschlossen
Weitere Informationen sowie Fehlermeldungen sind in der Datei "root@mein.dyndns.org:/mnt/lan/Sicherung/2014-06-03_Backup.log" gespeichert.

Backup(s) abgeschlossen.

Ich verstehe die Zeile "rsync: change_dir#4 "/root//Dateien/2014-06-03" failed: No such file or directory (2)" nicht, meine Pfade lauten doch ganz anders.

Dyndns und Port habe ich natürlich entsprechend angepasst.

Den von dir geposteten Befehl kann ich ja nur ausführen, nachdem das Backup abgeschlossen ist, oder sehe ich das falsch?
Dann bekomme ich die Ausgabe

rsync --log-file="" --exclude-from="" --backup-dir="" ""

Viele Grüße
Jürgen

Diesen Beitrag zitieren

Avatar

Jogi29

10. Juli 2014 um 18:01

möchte nochmals ganz vorsichtig nachfragen, ob es eine Lösung zu meinem geposteten Problem gibt.

Ich bekomme es einfach nicht hin, dass eine ssh-Verbindung aufgebaut wird. Die Authentifizierung müsste in Ordnung sein, denn wenn ich rsync per Befehlzeile aufrufe, klappt auch die Verbindung zum ssh-Partner.

Diesen Beitrag zitieren

Avatar

Janek

10. Juli 2014 um 22:35

Zitat Jogi29 :

möchte nochmals ganz vorsichtig nachfragen, ob es eine Lösung zu meinem geposteten Problem gibt.

Hallo Jürgen,

fragen darfst du natürlich so viel du willst. Ich habe eher ein ungutes Gefühl, dich immer so lange warten zu lassen 😉 .

Ich werde dir gleich noch eine E-Mail zukommen lassen.

Ansonsten ist für derartige Fälle ubuntuusers.de: Forum – Shell und Programmieren sehr zu empfehlen. Die dortige Community hat mir früher auch schon des Öfteren geholfen.

Viele Grüße,
Janek

Diesen Beitrag zitieren

Avatar

Janek

11. Juli 2014 um 14:49

Für alle Mitleser: für die Probleme, die bei Jogi29 auftraten, war vermutlich das Fehlern der rsync-Option s (no space-splitting; wildcard chars only) verantwortlich. Diese ist in der Standard-Konfiguration enthalten und sollte nicht entfernt werden.

Diesen Beitrag zitieren

Avatar

Jogi29

11. Juli 2014 um 16:04

die ssh-Verbindung klappt jetzt und die Sicherung folglich auch.

Was ich allerdings noch nicht geschafft habe, dass der Ordner der gelöschten Dateien und die Log-Dateien auch auf dem entfernten PC angelegt werden, bisher befinden sich die 2 Dinge auf meinem PC unter /root und dort unter der Adresse für die ssh-Verbindung mit dem ganzen Verzeichnisbaum.

Vielleicht hat noch jemand eine Idee, wie man dies auch noch auf den entfernten PC bekommt.

Bisher haben wir folgendes versucht:
BAK_DIR=“$TARGET/Geloeschte Dateien/$(date +%F)“
geändert in
BAK_DIR=“./Geloeschte Dateien/$(date +%F)“
leider ohne Erfolg, dann werden die „Geloeschten Dateien“ direkt in /root angelegt.

Diesen Beitrag zitieren

Avatar

René

25. August 2014 um 19:26

Hallo,
ich habe dieses tolle script gefunden und setze es jetzt auch ein, hatte etwas Probleme weil es im Terminal klappte aber per cronjob eben nicht… jetzt habe ich es gefunden und läuft.

Wenn der cronjob das script ausführt und ich grad im Terminalfenster bin sieht man es ja nicht, ist das so…?

Gibt es irgendwo die Möglichkeit mit sendmail etwas einzubauen, dass wenn die Sicherung fertig ist ich eine Mail bekomme..?

Vielen Dank
René

Diesen Beitrag zitieren

Avatar

Jogi29

26. August 2014 um 11:40

schau dir mal den Beitrag von Daniel am 28. Juni 2011 um 13:25 Uhr an, das müsste etwas für dich sein.

Diesen Beitrag zitieren

Avatar

René

27. August 2014 um 14:23

Zitat Jogi29 :

schau dir mal den Beitrag von Daniel am 28. Juni 2011 um 13:25 Uhr an, das müsste etwas für dich sein.

ja vielen Dank, dass werde ich mal integrieren, dazu habe ich aber eine Frage.. reicht es aus wenn ich hier sendmail habe, dass auf meinem Cubietruck installiert ist. Oder muss es zwingend dieses Postfix sein… was auch noch den Apache mit installiert.

Diesen Beitrag zitieren

Avatar

Janek

27. August 2014 um 14:32

Zitat René :

reicht es aus wenn ich hier sendmail habe, dass auf meinem Cubietruck installiert ist. Oder muss es zwingend dieses Postfix sein… was auch noch den Apache mit installiert.

Also ich habe eben bei mir lediglich sendmail installiert und konnte daraufhin wie auf Stackoverflow beschrieben Mails versenden. Mails, die über solch ein Quick-and-Dirty-Mailsystem versendet werden, werden jedoch oftmals als Spam eingestuft oder direkt abgewiesen.

Gruß

Diesen Beitrag zitieren

Avatar

René

28. August 2014 um 23:21

also das script läuft aber der Mailversand scheitert an der Meldung in Zeile 256 mit „uudeview“

dies sollte ja in liegen
„MAIL=“/usr/local/bin/uudeview“ #statt mail, damit Log als Anhang wird

liegt es aber bei mir nicht. Was ist dieses uudeview..?

Diesen Beitrag zitieren

Avatar

René

5. September 2014 um 14:34

Zitat René :

liegt es aber bei mir nicht. Was ist dieses uudeview..?

kann da nochmal evtl. jemand einen Tipp geben, da der Mailversand noch nicht funktioniert…

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

11. September 2014 um 13:52

Hi, ich habe die Konfiguration deutlich vereinfacht, in dem ich die Profilnummer [n] durch eine Variable ersetzt habe, die automatisch hoch zählt. Kannst Du gerne übernehmen.

# [… gekürzt …]
 
############################### KONFIGURATION DER PROFILE ###############################
 
# p_nr         Nummer des Profils. (Fortlaufend mit 1 beginnend)
#
# [… gekürzt …]
 
# = = Profil 1  = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
p_nr=1                       # Fortlaufende Profil-Nummer
 title[$p_nr]="VDR_Root"
   arg[$p_nr]="r"
source[$p_nr]="/"
target[$p_nr]="$MOUNT/_Backup/VDR/Root"
   log[$p_nr]="${target[$p_nr]}/$(date +%F)_${title[$p_nr]}.log"
exfrom[$p_nr]="$(mktemp -t "tmp.rsync.XXXX")"
rsync_opt[$p_nr]=""
cat > "${exfrom[$p_nr]}" < <EOF
dev/
lost+found/
# [… gekürzt …]
EOF
 
# [… gekürzt …]
 
# = = Vorlage für neues Profil  = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#((p_nr++))                  # Variable p_nr um eins hochzählen
#  title[$p_nr]=""
#    arg[$p_nr]=""
# source[$p_nr]=""
# target[$p_nr]=""
#    log[$p_nr]="${target[$p_nr]}/$(date +%F)_${title[$p_nr]}.log"
# exfrom[$p_nr]="$(mktemp -t "tmp.rsync.XXXX")"
# cat > "${exfrom[$p_nr]}" < <EOF
#
# EOF
 
################################ ENDE DER KONFIGURATION #################################
 
# [… gekürzt …]

Bearbeitet von Janek am 11.09.2014: Code gekürzt und formatiert. Stefans vollständiges Skript findet ihr hier. Vielen Dank an dieser Stelle auch von mir!

Diesen Beitrag zitieren

Avatar

René

11. September 2014 um 14:00

Ok ich werde es mir anschauen.. und sicher auch übernehmen.
Eine Mailfunktion ist aber nicht enthalten und die andere funktioniert bei mir leider nicht auf Grund des oben beschriebenen Fehlers…

Diesen Beitrag zitieren

Avatar

Janek

11. September 2014 um 14:17

Zitat René :

Ok ich werde es mir anschauen.. und sicher auch übernehmen.
Eine Mailfunktion ist aber nicht enthalten und die andere funktioniert bei mir leider nicht auf Grund des oben beschriebenen Fehlers…

Hallo René,
Stefan hat sich wohl nicht auf deinen Kommentar bezogen. Funktioniert bei dir uudeview unabhängig vom Skript? Erst einmal solltest du den Mailversand zum Laufen bekommen, bevor du das Skript entsprechend anpasst.

Die Ubuntu Users (de) werden dir sicherlich helfen können.

Gruß

Diesen Beitrag zitieren

Avatar

René

11. September 2014 um 14:52

Zitat Janek :

Hallo René,
Funktioniert bei dir uudeview unabhängig vom Skript? Erst einmal solltest du den Mailversand zum Laufen bekommen, bevor du das Skript entsprechend anpasst.

Die Ubuntu Users (de) werden dir sicherlich helfen können.

Gruß

ich kenne dieses uudeview gar nicht.. kann ja mal danach suchen..!
Noch dazu nutze ich gar kein Ubuntu, sondern ein Debian, vllt deshalb ist es nicht vorhanden…!

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

11. September 2014 um 15:05

Das mit der Mailfunktion schaue ich mir gerne mal an und baue eine entsprechende Funktion ein. Mir schwebt vor, dass man das Mailen via Parameter (-e my@email.de) aktiviert.
Oder wäre es sinnvoller das in die Konfiguration einzubauen?

Diesen Beitrag zitieren

Avatar

René

11. September 2014 um 15:09

ja das ist absolut OK, dann kann man es entweder nutzen oder eben nicht für die Leute die dies nicht haben wollen…
Bei mir arbeitet das Script absolut zuverlässig, aber ich bekomme eben keine Rückmeldung… schaue dann immer nach ob er es auch gemacht hat…

Diesen Beitrag zitieren

Avatar

Jogi29

11. September 2014 um 16:33

das wäre eine klasse Erweiterung.

Diesen Beitrag zitieren

Avatar

René

11. September 2014 um 18:34

ich habe jetzt nochmal eine Frage dazu… Habe die Änderung komplett übernommen, meine Pfade eingegeben.
Normal starte ich ja das Script über ein cronjob aber um es zu testen gebe ich immer
./backup.sh -p h

Da bekam ich einen Fehler, was ist mir passiert, ich habe in der Konfig das

arg[$p_nr]=“r“

übersehen, ich hatte da ein h drin für Hilfe wohl, aber was bedeutet dieses „r“

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

11. September 2014 um 19:18

Aus der Konfigdatei:
# arg[n] Argument, mit dem das jeweilige Profil gestartet wird (-p arg[n])

Bedeuted, wenn Du arg[$p_nr]=”r” eingegeben hast, musst Du auch so aufrufen:
./backup.sh -p r
oder ./backup.sh -a für alle Profile
oder ./backup.sh -h für die Hilfe

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

13. September 2014 um 09:30

Eine erste Version mit eMail-Versand habe ich fertig. Läuft mit sSMTP und mpack. Aufruf mit -e my@email.de oder -e root wenn in ssmtp konfiguriert.

Hier die Dropbox-Links:
Skript: https://db.tt/OstCDyP5
Konfig: https://db.tt/mOEZPR54

Es findet (noch) keine Prüfung statt, wie groß das Archiv ist.

Diesen Beitrag zitieren

Avatar

Stefan Schmors

13. September 2014 um 16:37

Hallo,
meine Frau hat dieses schöne Skript nun schon seit längerem im Einsatz. Da ich der einzige Guru in der Familie bin fehlen mir noch zwei Dinge zum perfekten Glück:

1. wenn meine Frau ihren Sicherungsstick einschiebt, soll das Sicherungsskript automatisch gestartet werden. Ich denke mit Regeln für „udev“ (opensuse) müsste das machbar sein. Hat jemand von Euch so was schon gemacht?

2. Wenn der Sicherungsstick voll zu werden droht, sollte er sich melden und vielleicht auch anbieten, dass alte, gelöschte Dateien jetzt endgültig weggeworfen werden oder wenigstens, dass sie sich einen neuen Stick kaufen muss.

Weiterhin DANKE für Euer prima skript!

Diesen Beitrag zitieren

Avatar

Janek

13. September 2014 um 17:03

Hallo Stefan,

Zitat Stefan Schmors :

2. Wenn der Sicherungsstick voll zu werden droht, sollte er sich melden und vielleicht auch anbieten, dass alte, gelöschte Dateien jetzt endgültig weggeworfen werden oder wenigstens, dass sie sich einen neuen Stick kaufen muss.

Mittels folgenden Befehls lässt sich zumindest schon einmal prüfen, ob mehr als THRESHOLD % der Platte belegt sind:

THRESHOLD=95
if [[ $(df -P $TARGET | awk 'END{print $5}' | tr -d %) > $THRESHOLD ]]; then
    echo "Achtung, fast voll";
fi

Gruß

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

14. September 2014 um 09:18

Zitat Stefan Blochberger :

Eine erste Version mit eMail-Versand habe ich fertig. Läuft mit sSMTP und mpack. Aufruf mit -e my@email.de oder -e root wenn in ssmtp konfiguriert.

Hier die Dropbox-Links:
Skript: https://db.tt/OstCDyP5
Konfig: https://db.tt/mOEZPR54

Es findet (noch) keine Prüfung statt, wie groß das Archiv ist.

Ich habe nun noch einen kleinen Statusbericht in die eMail mit eingebaut:
http://i.imgur.com/Vlx08KR.png

Die Links sind aktuell

Diesen Beitrag zitieren

Avatar

Jogi29

18. September 2014 um 15:05

Hallo Stefan,

habe das geänderte Script mit eMail-Versand getestet, bekomme aber folgenden Fehler:

tar: invalid option -- 'â'
Try `tar --help' or `tar --usage' for more information.
/tmp/Logs_2014-09-18-1501.tar.xz: No such file or directory
Backup(s) abgeschlossen.

Bearbeitet von Janek am 18.09.2014: Codeblock eingefügt und sinnvoll gekürzt.

Diesen Beitrag zitieren

Avatar

Janek

18. September 2014 um 15:12

Zitat Jogi29 :

habe das geänderte Script mit eMail-Versand getestet, bekomme aber folgenden Fehler:

In Stefans erweitertem Skript hat sich ein falscher Strich eingeschlichen. Ersetze in der mit tar --create beginnenden Zeile das -– vor absolute-names durch --.
Stefan wird das in der Dropbox bestimmt auch noch korrigieren.

Gruß

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

18. September 2014 um 15:20

Ui, wie kommt der denn da rein? Hab das Skript geändert. Vielen Dank für den Hinweis

Hier die Dropbox-Links:
Skript: https://db.tt/OstCDyP5
Konfig: https://db.tt/mOEZPR54

Diesen Beitrag zitieren

Avatar

Jogi29

18. September 2014 um 15:31

vielen Dank für die schnelle Hilfe.

Diesen Beitrag zitieren

Avatar

René

18. September 2014 um 15:34

ich habe jetzt mal 2 Fragen dazu, da ich jetzt erst wieder dazu komme…
Ist das Script irgendwie in zwei Teile erstellt, oder..?

Die zweite Frage, du schreibst weiter oben..
„Eine erste Version mit eMail-Versand habe ich fertig. Läuft mit sSMTP und mpack.“

Was ist dieses sSMTP und mpack, muss ich ich jetzt irgendwas installieren..?
Ich habe auf meinem System ein einfaches Debian ohne irgendwelche zusätzlichen Installationen für Mails senden, da ich nur backups machen möchte wollte ich eine einfache Rückmeldung über ein gemachtes Backup per Mail haben.
Was Standard ist sollte sendEmail sein, man beachte das große „E“, dies ist nur für das senden gedacht soweit ich das weiß.

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

18. September 2014 um 16:12

Ich habe mal was eingebaut:
https://dl.dropboxusercontent.com/u/1490505/VDR/backup-321tux/backup-321tux.zip

Du musst es aber die Variablen in der Conf dazu ausfüllen und MAILPROG=sendEmail eintragen

Ich habe das noch nicht getestet. sendEmail kannte ich nicht. Ich habe schon seit Ewigkeiten ssmtp drauf…

Diesen Beitrag zitieren

Avatar

René

19. September 2014 um 02:22

ich habe das heute mal getestet, dass Script arbeitet aber ich bekomme keine Mail.
Eingetragen habe ich alles soweit, werde morgen nochmal etwas probieren, evtl. muss ich auf meinem System das auch noch irgendwie konfigurieren..!

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

19. September 2014 um 07:30

Ich bin heute den ganzen Tag unterwegs und kann wahrscheinlich erst morgen wieter testen.

Am einfachtsen wird sein, wenn Du sendEmail aus der Kommandozeile maneulle laufen lässt und wenn es klappt die Zeile im Skript so anpasst oder mir zukommen lässt.

Ich habe mir dazu ein kleines Extra Skript zum testen gebastelt. das nur dazu dient.
Anleitung zu sendEmail: http://j.mp/Xo69II
Du solltest zum testen auch -v anwenden

Diesen Beitrag zitieren

Avatar

Stefan

19. September 2014 um 07:48

Hier mein mailtest.sh Skript: https://dl.dropboxusercontent.com/u/1490505/VDR/backup-321tux/mailtest.sh

Bei sendEmail habe ich ein -v mit eingebaut.

Wenn es am Ende funktioniert, dann gib bitte bescheid, wie sendEmail aufgerufen wird, damit ich es im Skript aktualisieren kann.

Für TLS müssen aber bestimmte Pakete installiert sein! Siehe: http://j.mp/Xo69II

Diesen Beitrag zitieren

Avatar

Jogi29

19. September 2014 um 10:03

Hallo Stefan,

heute Nacht wurde die erste Sicherung mit Mailbenachrichtigung durchgeführt und folgende Dinge sind mir aufgefallen:

1. Bei mir werden mehrere Profile nacheinander abgearbeitet, also backup.sh mit -a aufgerufen, im Logfile Logs_2014-09-19-0117 tar wird aber nur auf das Log-File des 1. Profiles verwiesen.

2. Könnte man nicht direkt das Log-File des jeweiligen Profiles an die Mail anhängen und nicht über die tar-Datei gehen?

3. bei mir erfolgt die Sicherung mehrerer Profile in ein Verzeichnis, daher wird der Inhalt der Sicherungsziels mehrfach angezeigt. Könnte man den Inhalt des Sicherungsziels abschaltbar gestalten, damit nur der Status angezeigt wird?

4. Auf dem Sicherungsziel befinden sich die Log-Dateien und natürlich die einzelnen Sicherungsverzeichnisse, die Logdateien werden im Bericht der EMail schön untereinander aufgeführt, bei den Verzeichnissen gibt dann aber keinen Zeilenumbruch mehr, es wird alles hintereinander aufgeführt.

5. das letzte Profil ist bei mir eine Sicherung per ssh auf einen entfernten Rechner, hier wird vor „Inhalt des Sicherungsziels“ kein „Status des Sicherungsziels“ ausgegeben, ist dies nicht möglich oder erfolgt diese Ausgabe nur für das 1. Profil?

Viele Grüße
Jürgen

Diesen Beitrag zitieren

Avatar

René

19. September 2014 um 16:07

so ich habe das Script mal getestet, es kommt folgender Fehler

Sep 19 15:58:30 localhost sendEmail[2820]: ERROR => You must specify at least one recipient via -t, -cc, or -bcc

Ich habe natürlich einen Empfänger eingetragen…! sollte ja der Parameter -t auch erfüllen, aber das ignoriert er wohl.

Dieser Eintrag mit putty auf der Konsole getestet funktioniert hier problemlos:
sendEmail -f 'AbsenderMail@gmx.de' -t 'EmpfängerMail@gmx.de' -u 'Backup' -m 'Message Text' -s 'mail.gmx.net' -xu 'User' -xp 'Password' -o tls=yes

was jetzt nicht so toll ist das man da dann das passwort sieht, aber geht

Bearbeitet von Janek am 26. Sept. 2014: Codeblöcke eingefügt.

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

19. September 2014 um 18:52

Auf die schnelle getestet und ein paar Änderungen eingebaut. Mailer war sendEmail und GMX meine Adresse. Bei mir ging es inkl. der verschiedenen Logs: http://i.imgur.com/rR76vie.png

Das Archiv und die Skripte sind aktualisiert. Bei Problemen bitte das Skript mit „bash -x backup-321tux.sh -a -e …“starten und die Ausgaben im Termnal begutachten

Zu den Fehlern von Jogi29:
1) kann ich nicht nachvollziehen
2) wäre möglich; aber Logs können sehr groß werden; darum tar
3) habe versucht eine Erkennung einzubauen. Bitte mal testen
4) habe es geändert. Bei mir gabs keine Probleme damit
5) Momentan wird einfach die TARGET-Variable verwendet. Ich schaue mir das demnächst mal an. Müsste möglich sein

Diesen Beitrag zitieren

Avatar

René

20. September 2014 um 14:47

So ich habe heute noch einmal probiert und folgendes gefunden

Also entweder habe ich etwas falsches runtergeladen oder es existiert nicht, habe in deinem Script geschaut und gesehen das in der Befehlszeile für sendemail steht an der zweiten Stelle die -t $MAILADRESS aber diese in der *.conf Datei nicht vorhanden ist.

MAILPROG="mpack"   # mpack oder sendEmail (http://j.mp/Xo69II)

Ok bei mir funktioniert dies nun auch, habe ich einfach in die conf Datei nachgetragen

Bearbeitet von Janek am 26. Sept. 2014: Codeblöcke eingefügt und Code stark gekürzt.

Diesen Beitrag zitieren

Avatar

René

20. September 2014 um 15:05

ich habe heute gefunden warum es bei mir nicht geht.
Entweder habe ich das falsche Script runter geladen oder es existiert tatsächlich nicht…
Ich hatte im Script geschaut und gesehen das ja die für sendemail gebrauchte Empfänger Adresse fehlt…!

dies steht ganz unten im Script und wird bei sendemail so angegeben
-t $MAILADRESS

in der conf Datei fehlt diese…!

# [Konfigurationsvorlage aus Stefans Skript; entfernt von Janek]

ich habe sie oben nachgetragen und siehe da es funktioniert auch…

Bearbeitet von Janek am 26. Sept. 2014: Codeblöcke eingefügt weiteren Code entfernt.

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

20. September 2014 um 15:25

MAILADRESS fehlt in der Konfig, weil der Wert beim Skriptaufruf mit „-e My@email.de“ übergeben wird. Und auch nur dann wird der Block zum Senden der Mail überhaupt aufgerufen! Kann ja sein, dass jemand keine Mail möchte.

Schau mal bei den Zeilen 77, 152, 160 und 252 nach.

Außerdem ist die aktuelle Version 20140920 – Also von heute

Diesen Beitrag zitieren

Avatar

René

20. September 2014 um 15:48

OK, dann ist das irgendwo an mir vorbei gegangen…
Ich habe aber grad ein Hänger wo muss ich das jetzt angeben und irgendwo muss ja die Mailadresse stehen, mit der ich es schicke..?

Und noch ein Frage, wo muss ich genau eingeben wieviele Tage ich die Sicherungen aufheben möchte, dass fehlt mir noch..?
Danke

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

20. September 2014 um 15:53

Steht sogar in der Hilfe (skript.sh -h):

-e My@email.de
Wobei Du natürlich Deine eMail-Adresse angeben musst.

Ein Aufruf kann dann so aussehen, um am Ende die Mail an Beispiel@mail.de zu senden:

./backup-321tux.sh -a -e Beispiel@mail.de

Die Variablen in der *.conf müssen ausgefüllt sein

Diesen Beitrag zitieren

Avatar

Stefan Blochberger

20. September 2014 um 16:34

Ich habe in Absprache mit Janek einen Forumsthread eröffnet, in dem man besser „diskutieren“ kann. Es sind alle eingeladen mitzumachen.

Das Forum hat über 500.000 Nutzer und ist hier zu finden: http://www.digital-eliteboard.com

Der direkte Link zum Thema ist: http://j.mp/1qjXaiJ

Diesen Beitrag zitieren

Avatar

René

20. September 2014 um 17:05

sehr schön…! in diesem Forum bin ich sogar angemeldet 😉

Diesen Beitrag zitieren

Kommentar schreiben

Erlaubte Tags:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Abonnieren ohne einen Kommentar abzugeben

Über 321tux.de

Hier bloggte Janek (24 Jahre) 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.

Twitter Identi.ca

Google+

  • Reinhold: Hallo, mein Fall ist leider etwas komplizierter und funktioniert (wahrscheinlich deswegen) nicht. M [...]
  • Janek: Zitat Michel Tank [...]
  • Michel Tank: Gibt es auch ein Tool oder eine Software, mit der man Schriftarten erkennen kann, die auf einer beli [...]
  • EDV-Profi: Intressante Thematik! Ich nutze aktuell eine gute mischung aus nofollow und dofollow-links für den [...]
  • phim hiep dam: Moin, ich habe unter Kubuntu 14.10 auch das Problem, dass das “programm cd” nicht gefunden werd [...]

Beliebte Beiträge

Shell-Button

Panel Applets Button

EncFS-Button

Lucid-Button

Grafiken erstellt mit GIMP