Kapitel 18
IN DIESEM KAPITEL
Viele Computerbenutzer behandeln das Thema Datensicherung so, als sei eine Festplatte unzerstörbar. Sollte eine Festplatte einmal das Gegenteil beweisen, kommt die Frage nach dem Backup auf. Gut, wenn man schon vorher darüber nachgedacht hat.
Die Datensicherung wird aber nicht obsolet, wenn man eine supersichere Festplatte besitzt. Die Daten können durch Diebstahl des Rechners, durch Abbrennen des Serverraums, durch Sabotage oder durch ein fieses Viren verloren gehen.
Jede Datensicherung ist mit Aufwand verbunden. Das Sichern der Datenbestände erfordert Zeit, die der Forderung nach ständiger Verfügbarkeit der EDV entgegensteht.
Bei der Frage, welche Daten mit welcher Priorität gesichert werden müssen, steht die Wiederbeschaffbarkeit im Mittelpunkt. Die Software, die Sie gekauft haben, können Sie vermutlich auf den gleichen Wegen wiederbeschaffen.
Alle Daten, die Sie selbst erstellen, wie Bestellungen, Buchungen, Kundendaten, Verträge, Planungen und auch Fotos, können Sie nicht am Markt wiederbeschaffen. Diese Daten befinden sich unter Linux an klar definierten Orten.
Die Unternehmensdaten werden heutzutage meist in Datenbanken abgelegt. Diese legen zwar ihre Daten auch meist in /var ab. Eine einfache Kopie bei laufender Datenbank wird vermutlich zu einem inkonsistenten und damit unbrachbaren Zustand führen. Darum werden Datenbanken in der Regel durch deren eigene Mechanismen gesichert, die meist ohne Unterbrechung des Betriebs funktionieren. Dazu lesen Sie auch das Kapitel 9.
Eine schöne Übung und guter Test ist es, einen nackten Rechner so herzurichten, dass er als Ersatz des Servers verwendet werden kann und dabei die Stoppuhr laufen zu lassen. Jede Datensicherung ist sinnlos, wenn man aus ihr den Originalzustand nicht wieder herstellen kann.
Anstatt den gesamten Bestand zu sichern, kann man auch versuchen, Änderungen zu sichern und nur an den Wochenenden eine Komplettsicherung zu fahren. Die Rekonstuktion wird aufwändiger, muss doch zuerst die Vollsicherung geladen und dann alle Differenzsicherungen zurückgeholt werden. Dieses Verfahren nennt man inkrementelle Sicherung.
Die Sicherung der eigenen Daten genießt höchste Priorität. Allerdings dauert das Aufsetzen eines neuen Betriebssystem und die Installation der Software seine Zeit. In dieser Zeit steht der Betrieb still. Aus diesem Grund kann es sinnvoll sein, von Zeit zu Zeit auch das Gesamtsystem zu sichern.
Bei der Medienauswahl für die Datensicherung sind die Geschwindigkeit der Sicherung und der Wiederherstellung, die Kapazität und der Preis pro Datenmenge relevant. Werfen wir einen Blick auf die Kandidaten:
Das Bandlaufwerk
Der Klassiker unter den Datensicherungsmedien ist das Bandlaufwerk. Früher glänzte es mit hoher Kapazität zu kleinem Preis der Medien. Inzwischen sind Festplatten größer und billiger geworden und laufen den Bändern den Rang ab.
Insbesondere bei langfrisitigen Sicherungen ist es wichtig, nicht nur die Datensicherung verfügbar zu haben, sondern auch das Gerät, mit der man sie wieder zurückholt. Sollte der Server mit dem eingebauten Bandlaufwerk verbrennen, muss ein weiteres Bandlaufwerk verfügbar sein, dass das Datenformat lesen kann. Diese Frage sollte man natürlich auch bei allen anderen Medien im Hinterkopf haben.
Selbstgebranntes
Ein DVD-Brenner ist für kleines Geld zu bekommen. Auch die Medien sind nicht teuer. Gerät und Medien sind also leicht verfügbar. Früher wurde so gern archiviert. Allerdings ist die Medienkapazität für heutige Verhältnisse relativ klein und das Brennen dauert einfach zu lang.
Externe Festplatten
Festplatten eignen sich naturgemäß prima, um Festplatten zu sichern. Und tatsächlich werden diese häufig direkt oder indirekt verwendet.
Wird die Festplatte beispielsweise durch einen USB-Adapter als Dateisystem eingebunden, besteht sowohl bei der Datensicherung als auch bei der Rekonstruktion das Risiko, dass die Datensicherung durch ein Virus kompromitiert werden. Ist der Rechner infiziert, an den die Festplatte angeschlossen wird, ist die Datensicherung wertlos.
Lokales Netzwerk (NAS)
Anstatt eine Festplatte per USB anzuschließen, werden diese häufig als NAS (Network Attached Storage) im Netzwerk zur Verfügung gestellt. Hier gilt wie bei der Datensicherung auf USB-Festplatten das Risiko für den Zeitraum, in dem die NAS als Dateisystem von einem infizierten Rechner eingebunden werden, sowohl bei der Datensicherung als auch bei der Rekonstruktion. Dasselbe gilt bei der Synchronisation über einen Nextcloud-Client.
Statt eines Einhängens empfehlen sich Fernkopien wie scp
, rsync
oder tar
.
Die Cloud
Mithilfe einer Cloud kann man seine Daten im Internet sichern. Letztlich entspricht die Vorgehensweise der einer Sicherung in einer NAS. Die Cloud hat den Vorteil, dass sie außer Haus ist. Im Falle eines Brandes ist die Datensicherung noch vorhanden.
Allerdings geben Sie damit Ihre Daten in die Hände einer kommerziellen Firma. Beispielsweise zwingt die Rechtslage in den USA amerikanische Firmen dazu, mit den Geheimdiensten zusammenzuarbeiten, die ihre Erkenntnisse wieder amerikanische Unternehmen weitergeben. Man darf davon ausgehen, dass es in China und anderen Ländern ähnlich sein kann.
Anstatt auf die politische Integrität des Anbieters zu hoffen, ist es klüger, die dort geparkten Daten vor dem Versenden selbst zu verschlüsseln. Siehe dazu auch das Kapitel 17.
Das Programm dump
ist ein Klassiker der Datensicherungswerkzeuge. Seine besonderen Fähigkeiten liegen darin, Dateisysteme komplett sichern zu können und dabei ihre systemspezifischen Eigenschaften zu bewahren. Das Programm beherrscht die inkrementelle Sicherung, ermöglicht die Sicherung auf Band, unterstützt den Medienwechsel, wenn das Sicherungsmedium kleiner als die zu sichernden Daten ist, und kann eine Datensicherung über das Netzwerk durchführen.
Das Programm gehört nicht zum Standardumfang einer Linux-Installation, sondern muss mit dem Paket dump explizit installiert werden:
# apt install dump
Der Befehl dump
erhält als Parameter das zu sichernde Dateisystem. Sie können aber auch einzelne Dateien oder Verzeichnisse angeben.
Als Option kann eine ganzzahlige Levelnummer angegeben werden, der ein Minuszeichen vorangestellt wird. Die Option -0
steht für eine Vollsicherung. Jede andere Zahl sichert nur die Dateien, die sich seit der letzten Sicherung des nächstniedrigeren Levels verändert haben.
Die Option -f
erwartet einen weiteren Parameter, der angibt, wohin die Sicherung geschrieben werden soll. Auf diese Weise können die Gerätedatei eines Bandlaufwerks angegeben werden, ein Minuszeichen für die Standardausgabe, um den Datenstrom in eine Pipe umzuleiten, oder auch das Bandlaufwerk eines anderen Computers. In letzterem Fall wird der Hostname, gefolgt von einem Doppelpunkt, vor die Laufwerksangabe gestellt: host:/dev/tape
.
Mit dem folgenden Sicherungslauf wird das Dateisystem /dev/sda8 in die Datei dasi100809.dump gesichert:
# dump -0u -f dasi20100809.dump /dev/sda8
DUMP: Date of this level 0 dump: Mon Aug 9 09:20:30 2010
DUMP: Dumping /dev/sda8 (an unlisted file system)
to dasi20100809.dump
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 2699235 blocks.
DUMP: Volume 1 started with block 1 at:
Mon Aug 9 09:20:37 2010
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing dasi20100809.dump
DUMP: Volume 1 completed at: Mon Aug 9 09:23:12 2010
DUMP: Volume 1 2706480 blocks (2643.05MB)
DUMP: Volume 1 took 0:02:35
DUMP: Volume 1 transfer rate: 17461 kB/s
DUMP: 2706480 blocks (2643.05MB) on 1 volume(s)
DUMP: finished in 155 seconds, throughput 17461 kBytes/sec
DUMP: Date of this level 0 dump: Mon Aug 9 09:20:30 2010
DUMP: Date this dump completed: Mon Aug 9 09:23:12 2010
DUMP: Average transfer rate: 17461 kB/s
DUMP: DUMP IS DONE
#
Soll die Datensicherung nicht eine Datei sondern auf ein Bandgerät laufen, müsste lediglich das Ziel hinter -f
geändert werden.
# dump -0u -f /dev/st0 /dev/sda8
Der Befehl restore
gehört zum Paket dump und holt gesicherte Datenbestände zurück. Mit der Option -r
werden die gesicherten Daten im aktuellen Verzeichnis rekonstruiert. Wenn Sie also den Inhalt des Dateisystems /dev/sda1 vom Bandgerät /dev/st0 zurückholen wollen, geben Sie die folgenden Befehle ein:
# mkfs /dev/sda1
# mount /dev/sda1 /mnt
# cd /mnt
# restore rf /dev/st0
Sollten Sie eine inkrementelle Sicherung betreiben, wird restore
nacheinander alle relevanten Bänder anfordern.
Das Programm tar
wird heutzutage meist verwendet, um ganze Verzeichnisse in einer Datei zu verpacken. Der Name tar
steht für »tape archiver«, also »Band-Archivierer«. Wenn Sie tar
keine Option -f
für die Zieldatei angeben, wird es tatsächlich versuchen, das Standardbandlaufwerk in Ihrem System zu finden und zu verwenden.
Im ersten Parameter des Kommandos tar
legen Sie die Operation mit einem Buchstaben fest. Nur einer dieser Buchstaben kann darin auftreten:
|
Die Option erzeugt ein Archiv. Eine Datensicherung wird angelegt. |
|
Ein Archiv wird ausgepackt. Die Datensicherung wird zurückgeholt. |
|
Der Inhalt eines Archivs wird angezeigt. |
Übrigens kann man vor diese Option auch ein Minuszeichen setzen, was im Linux-Umfeld auch passender ist. Die Option können durch weitere Optionen ergänzt werden.
|
gibt das Sicherungsziel an. Der auf das |
Beispiel: Sollen die Verzeichnisse /home und /etc in die Datei dasi.tar gesichert werden, lautet der Befehl:
# tar cf dasi.tar /home /etc
Es können beliebig viele Dateien und Verzeichnisse an den Befehl angehängt werden, sie werden alle in die Datensicherung mit einbezogen. Bei Verzeichnissen werden auch deren Unterverzeichnisse mit eingebunden.
|
Wenn Sie wissen wollen, welche Dateien gesichert oder entpackt werden, mischen Sie der Buchstabenkombination noch ein |
|
Die Option |
Die Datensicherung von tar
kann auch über das Netzwerk gesendet werden. Dazu wird als Zieldatei eine Datei auf einem anderen Rechner angegeben. Es ist mit dieser Methode beispielsweise auch möglich, das Bandlaufwerk auf einer anderen Maschine anzusprechen.
Um eine Datei auf einem anderen Rechner anzusprechen, muss vor ihrem Namen der Rechnername angegeben werden. Um beides voneinander zu trennen, wird der Doppelpunkt verwendet. Das folgende Beispiel sichert die lokalen Benutzerverzeichnisse (/home) in die Datei dasi.tgz auf dem Rechner dasisrv.
$ tar cvzf dasisrv:dasi.tgz /home
Hier wird der Aufrufer nach dem Passwort gefragt. Da im Hintergrund der Befehl ssh
werkelt, können auch Schlüssel hinterlegt werden, um die Passwortabfrage zu vermeiden, so wie es im Kapitel 5 beschrieben wird..
Für die inkrementelle Datensicherung wird die Option -g
verwendet. Als Parameter erwartet diese Option den Namen der Datei, in der die zeitlichen Informationen abgelegt werden. Existiert die Zeitstempeldatei noch nicht, wird sie angelegt und eine Vollsicherung durchgeführt.
$ tar czfg dasivoll.tgz letztedasi /home
Um die Daten zu sichern, die seit der Vollsicherung verändert wurden, wird der Zeitstempel der Vollsicherung genutzt und ein neues Archiv angelegt. In diesem neuen Archiv stehen nur die Dateien, die sich seit der letzten Sicherung verändert haben. Der Befehl lautet:
$ tar czfg dasi-1.tgz letztedasi /home
Sie sehen, dass sich der Befehl, abgesehen vom Dateinamen des Archivs, nicht unterscheidet. Damit eine inkrementelle Sicherung nicht die vorige überschreibt, müssen sich die Dateinamen unterscheiden.
Der Befehl date
liefert das aktuelle Datum mit Uhrzeit. Mit passenden Parametern lassen sich auch Teile des Datums verwenden. Der Paramter +%U
liefert die aktuelle Kalenderwoche, der Parameter +%F
das Datum in amerikanischer Schreibweise.
Um den Datumstempel in den Dateinamen zu zaubern, wird der Befehl date
mit seinen Parametern in Klammern gesetzt und mit einem Dollarzeichen verziehrt.
$ tar czfg dasi$(date +%F).tgz woche$(date +%U) /home
Dieser Befehl kann täglich, beispielsweise durch crontab
, aufgerufen werden. Wenn Sie den Befehl direkt in die crontab stellen, müssen Sie darüber hinaus vor jedes Prozentzeichen einen Backslash stellen, da in einer crontab das Prozentzeichen als Zeilenumbruch interpretiert wird.
Sollte die Datensicherung nicht nur ein Verzeichnis umfassen, kann die Verwendung der Option -T
hilfreich sein. Sie liest aus einer Datei die Verzeichnisse, die gesichert werden sollen. Der Dateiname dieser Sicherungsliste muss als Parameter angegeben werden:
$ tar czfgT dasi$(date +%F).tgz woche$(date +$U) liste
Die Datei liste könnte beispielsweise so aussehen:
/home/inga
/home/johanna
/home/paul
/home/georg
/var/mail
Damit würden die Benutzerverzeichnisse von inga, johanna, paul und georg und das Verzeichnis /var/mail gesichert.
Eine Rücksicherung kann nur dann ein korrektes Ergebnis liefern, wenn man zuerst die Vollsicherung zurückholt und dann so viele inkrementelle Sicherungen, bis der gewünschte Zeitpunkt erreicht ist.
Nehmen wir an, Sie haben ein Medium unter dem Verzeichnis /mnt eingehängt, auf dem sich die relevanten Sicherungen befinden. Sie wollen den Stand vom 23.11. zurückholen. Der 21.11. war ein Sonntag. Die Befehle lauten dann:
# cd /
# tar xzf /mnt/dasi2010-11-21.tgz
# tar xzf /mnt/dasi2010-11-22.tgz
# tar xzf /mnt/dasi2010-11-23.tgz
Für die Rücksicherung ist also weder der Zeitstempel noch die Sicherungsliste erforderlich, sondern nur das Archiv.
Das Programm rsync
darauf spezialisiert, Verzeichnisse möglichst effizient an einen anderen Computer über das Netzwerk zu kopieren. Die besonderen Eigenschaften von rsync
:
mount
eingehängt werden. Es gibt also keine Sicherheitslücke für Verschlüsselungsviren.Das Programm ist normalerweise bereits auf einem Linux-System installiert, kann aber auch aus dem gleichnamigen Softwarepaket explizit installiert werden:
# apt install rsync
Die Syntax des Aufrufs von rsync
gibt, wie bei Linux üblich, zuerst die Quelldateien und als letztes das Zielverzeichnis an. Quelle und Ziel können einen Hostnamen enthalten, der, durch einen Doppelpunkt getrennt, vorangestellt wird. Soll das Konto eines speziellen Benutzers angesprochen werden, setzen Sie vor den Hostnamen auch noch den Benutzernamen, der durch ein @ abgetrennt wird.
$ rsync -a data user@192.168.109.199:/media/dasi
Dieser Befehl ist ganz typisch für einen rsync
-Befehl zur Datensicherung. An diesem Beispiel lassen sich einige typische Merkmale aufzeigen.
-a
steht für eine Kombination von Optionen. Dazu gehört die Kopie aller Unterverzeichnisse und der Erhalt der Dateieigenschaften. Außerdem muss das Zielverzeichnis auf einem POSIX-Dateisystem liegen, weil auch die Besonderheiten wie Links und Gerätedateien übertragen werden.rsync
und spart sich eine weitere Übertragung. Damit geht die Sicherung sehr schnell vonstatten.Mit der Option -v
lassen sich die Dateien anzeigen, die sich geändert haben und darum kopiert werden.
Die Option -z
führt dazu, dass die Dateien bei der Übertragung komprimiert werden. Am Ziel werden sie wieder auf die Originalgröße expandiert. Man muss hier die Geschwindigkeit des Netzes gegen die CPU-Belasung der Rechner abgeschätzt werden.
Mit der Option --delete
können auch Dateien im Ziel entfernt werden, wenn die gleichnamigen Gegenstücke im Quellverzeichnis nicht vorhanden sind. Diese Option ist hilft, veraltete Datenbestände zu vermeiden, hat aber natürlich auf offensichtliche Risiken.
Falls Ihnen diese Optionen keinen Spaß machen, hätte ich in Tabelle 18.1 noch ein paar für Sie.
Option |
Bedeutung |
---|---|
| rekursives Archivieren bei Erhaltung aller Eigenschaften |
| Beim Überschreiben eine Version als Backup halten |
| Symbolische Links als symbolische Links kopieren |
| permission: Behalte die Dateieigenschaften und Rechte bei |
| quiet: Keine unnötigen Ausgaben auf dem Bildschirm |
| rekursiv: Nimmt alle Unterverzeichnisse mit |
| Behalte Zeit und Datum bei |
| update: Nur wenn keine neuere Zieldatei vorliegt |
| verbose: Erzähl mal was von dir, rsync! |
| Während des Kopierens komprimieren |
Tabelle 18.1: Optionen von rsync
Das Programm dd
kopiert blockweise ganze Medien. So kann eine Festplatte mit einem Rutsch auf eine mindestens gleich große Festplatte geklont werden. Diese kann im Falle eines Falles durch einfachen Tausch die defekte Systemplatte ersetzen.
Quelle und Ziel müssen nicht unbedingt Festplatten sein. Disketten, SD-Karten, CDs oder Dateien gehen auch. Auf diese Weise kann eine SD-Karte in eine Datei geklont werden, diese per E-Mail-Anhang versandt und von dem Empfänger auf eine SD-Karte geschrieben werden.
Das Programm hat hauptsächlich zwei Optionen, die Quelle und Ziel benennen.
if
(input file): benennt die Quelldatei oder das Quellmedium.of
(output file): benennt die Zieldatei oder das Zielmedium.Aus Sicht von Linux sind Dateien und Medien weitgehend kompatibel. So gibt es für die erste Festplatte im System eine stellvertretende Gerätedatei namens /dev/sda. Weitere Festplatten, aber auch USB-Sticks werden dann mit /dev/sdb, /dev/sdc und so weiter erreicht.
Das folgende Beispiel kopiert eine SD-Karte in eine Datei und zurück. Das Beispiel geht davon aus, dass die SD-Karte über /dev/sdc erreichbar ist. Es zeigt die typische Syntax eines dd
-Aufrufs.
# dd if=/dev/sdc of=sicherung.img
# dd of=/dev/sdc if=sicherung.img
Der erste Befehl kopiert die SD-Karte in eine Datei. Dabei ist es völlig egal, von welchem System die SD-Karte erzeugt wurde. Im zweiten Befehl wird die gesicherte Datei wieder auf eine SD-Karte kopiert.
Auch wenn Sie alle Daten eines Datenträgers aus Datenschutzgründen vollständig löschen wollen, können Sie dd
einsetzen:
# dd if=/dev/zero of=/dev/sdb
Dieser Befehl kopiert das Gerät /dev/zero, das, wie der Name schon ahnen lässt, lauter Nullen liefert, auf die zweite Festplatte. Der Befehl stoppt, wenn die Festplatte voll ist.
Datensicherungen finden vorzugsweise nachts statt, wenn fleißige Administratoren schlafen. Diesen Schlaf möchten sie nicht durch das Starten der Datensicherung unterbrechen, also schieben Sie diese Aufgabe dem Server in die Schuhe.
Der Dienst für regelmäßig wiederkehrende Aufgaben heißt cron
. Der Stundenplan, nach dem er vorgeht, heißt crontab und war ursprünglich eine einzige Datei, die im Verzeichnis /etc residierte. Inzwischen sind die Aufgaben deligiert worden und die Datei /etc/crontab steuert mehrere Verzeichnisse im Verzeichnis /etc, in denen Dateien die Aufträge enthalten:
Im Verzeichnis cron.d werden Dateien mit Tabellen abgelegt, die strukturiert werden, wie die klassischen crontab-Tabellen. Sie werden im folgenden Abshchnitt genauer beschrieben.
Die anderen Verzeichnisse nehmen Skripte auf, die je nach Name des Verzeichnisses in den entsprechenden Abständen aufgerufen werden.
Eine crontab-Tabelle enthält in jeder Zeile einen Eintrag über einen Programmstart, bestehend aus dem Zeitpunkt und dem Kommando. Wie so oft, ist auch in der crontab das Doppelkreuz ein Kommentarzeichen. Die ersten zwei Zeilen zeigen die Bedeutungen der Spalten.
# Minute Stunde Tag(Monat) Monat Tag(Woche) Kommando
# (0-59) (0-23) (1-31) (1-12) (1-7; 1=Mo)
0 4 * * * jedentag4uhr
0 9 1,15 * * jeden1.und15.um9
0 2 * * 1,2,3,4,5 werktagsum2
Wenn in einer Spalte ein Stern steht, ist jeder denkbare Zeitpunkt für diese Spalte möglich. Wenn Sie also bei Minute einen Stern statt der Null verwenden, würde zu jeder Minute der angegebenen Stunde das Programm durchstarten. Ansonsten geben Sie einzelne Werte an oder durch Kommata getrennte Zahlen. Die Tabelle oben bewirkt folgende Programmaufrufe:
jedentag4uhr
läuft um 4:00 Uhr an jedem Tag.jeden1.und15.um9
wird um 9:00 Uhr am 1. und 15. jeden Monats aufgerufen.werktagsum2
startet um 2:00 Uhr an jedem Montag, Dienstag, Mittwoch, Donnerstag und Freitag.Wenn der Befehl in einer crontab ein Prozentzeichen enthält, müssen Sie darüber davor jeweils einen Backslash stellen, da in einer crontab das Prozentzeichen als Zeilenumbruch interpretiert wird.
Die Anwender dürfen auch eine crontab anlegen, ohne jedes Mal den Administrator fragen zu müssen. Um eine solche anzulegen, wird der Befehl crontab -e
aufgerufen. Er öffnet einen Editor und lässt den Benutzer eine Tabelle erstellen.
Will man die eigene Tabelle später anschauen, ruft man crontab -l
.
Der Administrator kann auch eine crontab für einen beliebigen Benutzer erstellen. Um den Benutzer zu spezifizieren, verwendet er die Option -u
gefolgt vom Benutzernamen.
Insbesondere bei Servern, die nicht täglich gewartet werden, ist es wichtig, dass sie sich beizeiten melden, wenn etwas schief läuft. Wenn die automatische Datensicherung nicht funktioniert hat, wollen Sie das möglichst bald wissen. Dazu kann der Server eine Mail an die Privatadresse des Administrators senden, in der Hoffnung, dass dieser sie häufig liest.
Mailprogramme laufen meist aus grafischen Oberflächen. Das nutzt im Fehlerfall eines Skripts wenig, weil dieses nicht in der Lage ist, die Maus zu schwingen. Zum Glück gibt es noch ein paar alte Mail-Programme, die sich von der Konsole aus so starten lassen, dass sie keine Interaktion benötigen.
mail
, das Mails über den lokalen Mail-Server versenden kann.mutt
, ein Kommandozeilen-Mail-Client, der sich direkt an externe SMTP-Server wenden kann.Sie finden ein paar weitere Hinweise zu mutt
in Kapitel 11. An dieser Stelle ist aber vor allem interessant, wie man mutt
aus dem Skript heraus aufruft und allein durch die Übergabe von Optionen und Parametern erreichen kann, dass das Programm eine E-Mail versendet.
Der Mail-Client mutt
wird zunächst aus dem Repository installiert.
# apt install mutt
mutt
sendet.-F
wird auf eine Datei verwiesen, die die Konfiguration von mutt
enthält, also das SMTP-Konto, über das das Programm sendet und dessen Zugangsdaten.-s
folgt eine Zeichenkette, die als Betreff verwendet wird.Der Befehl zum Senden einer Fehlermeldung würde innerhalb eines Skripts beispielsweise so aussehen.
echo "Kein Zielmedium vorhanden." | mutt -F /root/.muttrc \
-s "Fehler Datensicherung" -- admin@willemer.de
Damit mutt
senden kann, muss das Programm ein E-Mail-Konto haben. Mit der Option -F
wird auf eine Datei .muttrc verwiesen, in der genau dieses Konto beschrieben wird. Die Datei enthält Benutzerkennung und Passwort, aber auch die URL des Mail-Servers und dessen Konfiguration. Über diesen SMTP-Zugang wird die Nachricht an admin@willemer.de versandt, der sich hoffentlich sofort um das Problem kümmert.
# .muttrc
set from = “myadmin@gmx.de”
set smtp_url = “smtp://myadmin@gmx.de@mail.gmx.net:587/”
set smtp_pass = “strenggeheim”
set ssl_starttls = yes
Im Beispiel verwendet mutt
als SMTP-Server eine GMX-Adresse myadmin@gmx.de, die ich frei erfunden habe. Vermutlich ist sie bereits vergeben. Ich bin aber sicher, dass Sie eine eigene Adresse erhalten, wenn Sie ganz lieb danach fragen.
Wenn auf dem System sowieso der Mailserver Postfix läuft, weil Sie das Kapitel 11 so spannend fanden, kann dieser natürlich auch verwendet werden, um die Meldungen von root an eine Internet-Mail-Adresse zu versenden. Als Client verwenden wir mail
. Das Programm wird automatisch bei der Installation von postfix mitinstalliert und wird hier als Absender den Benutzer root
des Systems verwenden.
Der Aufruf im Skript lautet:
mail -s "Fehler Datensicherung" admin@willemer.de < fehler
In der Datei fehler hat man zuvor die Fehlermeldungen gesammelt, die dann den Inhalt der Mail ausmachen.
Der Befehl mail
verwendet den lokalen SMTP-Port zum Versenden seiner Nachrichten. Damit diese Information an admin@willemer.de weitergeleitet wird, muss der lokale Mail-Server in der Lage sein, Mails ins Internet zu verteilen. Die Mindestausstattung ist Postfix mit einem Smarthost. Die Konfiguration wird in Kapitel 11 beschrieben.
Wenn Sie täglich eine Datensicherung ausführen lassen, sammeln sich im Jahr 365 Sicherungen an. Das hält auf Dauer die stärkste Festplatte nicht aus. Darum stellt sich die Frage, wie Sie die älteren Datensicherungen loswerden.
Das folgende Skript sorgt dafür, dass bei einer Datensicherung für einen GitLab-Server alle Sicherungen gelöscht werden, die älter als eine Woche sind. Dazu wird der Befehl find
verwendet, der erstens mit der Option -mtime
feststellen kann, wie alt eine Datei ist und über die -exec
den Löschbefehl rm
aufrufen kann, um diese zu entfernen.
Dabei sollte der alte Kram nicht leichtfertig aufgegeben werden, wenn es keine aktuelle Datensicherung gibt. Auch das lässt sich mit dem Befehl find
ermitteln.
# Das Skript räumt mit alten Backups auf und sollte wöchentlich per
# crontab aufgerufen werden.
cd dasi
# Pruefe, ob es ein neues Backup gibt
BACKUP=$(find . -mtime -7 -name "*backup.tar")
# Nur wenn ein aktuelles Backup existiert, loesche alle alten
if [ $BACKUP ]
then
find . -mtime +7 -name "*backup.tar" -exec rm {} \;
else
echo "Kein aktuelles Backup" | mutt -s "Backup-Rotate" -- myadmin@gmx.de
fi