Das Ar­chi­vie­rungs­pro­gramm tar basiert auf einer alten Da­ten­si­che­rungs­me­tho­de, die aber auch heute noch überzeugt. Der Name tar ist ei­gent­lich ein Akronym und steht für Tape Archiver, also die Ar­chi­vie­rung auf Band­lauf­wer­ken. Auch wenn zumindest Pri­vat­an­wen­der diese heut­zu­ta­ge kaum noch benutzen, ist das Programm immer weiterhin das be­lieb­tes­te Werkzeug zur Ar­chi­vie­rung auf Unix-Systemen. Mit dem Pack­pro­gramm können auch re­gel­mä­ßi­ge, in­kre­men­tel­le Backups eines Servers erstellt werden. Wir erklären Ihnen, wie tar funk­tio­niert und mit welchen Befehlen die Da­ten­si­che­rung klappt.

Cloud Backup powered by Acronis
Mi­ni­mie­ren Sie Aus­fall­zei­ten mit unserem Kom­plett­schutz
  • Au­to­ma­tisch: Backups und Recovery
  • Intuitiv: Planung und Ma­nage­ment
  • In­tel­li­gent: KI-basierter Be­dro­hungs­schutz
  • Inkl. 300,- € Start­gut­ha­ben im 1. Monat

tar ist ein Programm zur Ar­chi­vie­rung unter Linux und ver­wand­ten Systemen. Für ein solches Programm untypisch bietet tar dabei stan­dard­mä­ßig keine Kom­pri­mie­rung an. Dennoch ist das Programm sehr populär, denn sein großer Vorteil liegt darin, dass ganze Ver­zeich­nis­se zu einer Datei zu­sam­men­ge­führt werden können. Diese Technik hängt mit der Ge­schich­te des Programms zusammen: Bei einem Band­lauf­werk werden die Daten nach­ein­an­der auf ein Ma­gnet­band über­tra­gen. Dies erklärt die se­quen­zi­el­le, lineare Spei­che­rung beim tar-Format. Neue Dateien werden hinten an das Archiv angehängt. Eine daraus ent­ste­hen­de Datei wird auch Tarball (englisch für Teerkugel) genannt, da die Dateien praktisch „an­ein­an­der­ge­klebt“ sind.

Um dennoch eine Kom­pri­mie­rung zu erreichen wird tar häufig in Kom­bi­na­ti­on mit gzip verwendet. Die beiden Programme ergänzen sich dabei perfekt: gzip kann immer nur einzelne Dateien kom­pri­mie­ren. Deshalb wird in der Regel zunächst tar und dann gzip (oder auch ein anderes Programm zur Kom­pres­si­on) ein­ge­setzt. So entstehen schließ­lich .tar.gz- oder .tzip-Dateien.

tar in­stal­lie­ren

Unter Ubuntu sollte tar bereits vor­in­stal­liert sein. Wenn Sie eine andere Linux- oder Unix-Dis­tri­bu­ti­on verwenden, in­stal­lie­ren Sie das hilf­rei­che Programm mit:

sudo apt-get install tar tar-doc

Das Paket tar-doc ist dabei optional: Es enthält eine Do­ku­men­ta­ti­on zum Ar­chi­vie­rungs­pro­gramm.

tar benutzen

Wenn Sie tar benutzen möchten, verwenden Sie einfach diese Syntax:

tar Option Datei

Die Optionen von tar sind folgende:

Option Be­schrei­bung Be­son­der­heit
--help Zeigt Ihnen alle Optionen an.  
--version Gibt die ver­wen­de­te Version von tar aus.  
-c Erzeugt ein neues Archiv. (create)
-d Ver­gleicht Dateien im Archiv und im Da­tei­sys­tem mit­ein­an­der (diff)
-f Schreibt ein Archiv in die an­ge­ge­be­ne Datei be­zie­hungs­wei­se liest die Daten aus der an­ge­ge­be­nen Datei aus. (file) Diese Option müssen Sie grund­sätz­lich als letzte eingeben, da alle nach­fol­gen­den Eingaben als Dateien in­ter­pre­tiert werden.
-z Kom­pri­miert oder de­kom­pri­miert das Archiv direkt mit gzip. gzip muss bereits in­stal­liert sein.
-Z Kom­pri­miert oder de­kom­pri­miert das Archiv direkt mit compress. compress muss bereits in­stal­liert sein. Auf Groß­schrei­bung achten.
-j Kom­pri­miert oder de­kom­pri­miert das Archiv direkt mit bzip2. bzip2 muss bereits in­stal­liert sein.
-J Kom­pri­miert oder de­kom­pri­miert das Archiv direkt mit xz. xz muss bereits in­stal­liert sein. Auf Groß­schrei­bung achten.
-k Ver­hin­dert, dass Dateien beim Ex­tra­hie­ren aus dem Archiv bereits exis­tie­ren­de Dateien über­schrei­ben.  
-p Behält die Zu­griffs­rech­te beim Ex­tra­hie­ren bei.  
-r Fügt eine Datei zu einem be­stehen­den Archiv hinzu. (recreate) Die Datei wird hinten angehängt. Funk­tio­niert nur mit einem un­kom­pri­mier­ten Archiv.
-t Zeigt den Inhalt eines Archivs an. (table)
-u Hängt nur Dateien an, die jünger sind als ihre je­wei­li­gen Versionen im Archiv.  
-v Zeigt die Schritte bei der Ar­chi­vie­rung an. (verbose)
-vv Zeigt de­tail­lier­te­re In­for­ma­tio­nen bei der Ar­chi­vie­rung an. (very verbose)
-w Jede Aktion muss bestätigt werden.  
-x Ex­tra­hiert Dateien aus dem Archiv. (extract) Die Dateien bleiben im Archiv enthalten.
-A Hängt die Dateien eines be­stehen­den Archivs an ein anderes an. Auf Groß­schrei­bung achten.
-C Gibt den Ort an, in dem Dateien ex­tra­hiert werden sollen. Auf Groß­schrei­bung achten.
-M Erstellen, anzeigen oder ex­tra­hie­ren eines mehr­tei­li­gen Archivs. Auf Groß­schrei­bung achten.
-L Wechselt das Medium nach einer be­stimm­ten Da­tei­grö­ße. Die Größe wird in Kilobytes angegeben. Auf Groß­schrei­bung achten.
-W Überprüft das Archiv, nachdem es ge­schrie­ben wurde. Auf Groß­schrei­bung achten.
-P Ar­chi­viert alle Dateien vom Wur­zel­ver­zeich­nis aus. Auf Groß­schrei­bung achten.
--exclude Schließt Dateien oder Ordner aus. Wird nach dem Befehl zum Erstellen mit --exclude=<Datei/Ordner> angegeben.
-X Liest eine Liste mit aus­zu­schlie­ßen­den Dateien. Verlangt eine zuvor angelegte Liste: -X <Liste>.list. Auf Groß­schrei­bung achten.
-g Erstellt ein Log aller Ver­zeich­nis­se inklusive Prüf­sum­men.  

Beim Erstellen von tar-Archiven haben Sie zudem die Mög­lich­keit, mit einem Sternchen Wildcards anzulegen. Wenn Sie ein neues Archiv erzeugen, geben Sie immer zuerst die Optionen an, dann den Da­tei­na­men des Archivs, das Sie erstellen wollen, und schließ­lich die Dateien und Ordner, die enthalten sein sollen. In dem folgenden Beispiel erstellen Sie ein Archiv (-c) aus zwei Text-Dateien, kom­pri­mie­ren es mit gzip (-z) und schreiben es in die Datei archiv.tar.gz (-f):

tar -czf archiv.tar.gz beispiel_1.txt beispiel_2.txt

Möchten Sie alle Text­da­tei­en im Ver­zeich­nis zu einem Archiv zu­sam­men­fas­sen, verwenden Sie eine ent­spre­chen­de Wildcard:

tar -cf text_archiv.tar *.txt

Auch komplette Ver­zeich­nis­se und deren Un­ter­ver­zeich­nis­se können Sie zu einem Archiv zu­sam­men­fas­sen. Im folgenden Beispiel wird /ver­zeich­nis1 inklusive aller Un­ter­ver­zeich­nis­se und der ent­hal­ten­den Dateien aus­schließ­lich des Un­ter­ver­zeich­nis­ses /ver­zeich­nis1/un­ter­ver­zeich­nis_x ar­chi­viert:

tar -cf archiv.tar --exclude="/verzeichnis1/unterverzeichnis_x" /verzeichnis_1

Im folgenden Beispiel ex­tra­hie­ren (-x) Sie das kom­pri­mier­te (-z) Archiv, das wir im ersten Beispiel erstellt haben, in ein anderes Ver­zeich­nis (-C):

tar -xzf archiv.tar.gz -C /home/verzeichnis1/archiv_verzeichnis

Um einem Archiv (das dafür un­kom­pri­miert sein muss) eine weitere Datei hin­zu­zu­fü­gen, geben Sie zum Beispiel folgenden Befehl ein:

tar -rf archiv.tar beispiel_extra.txt

Wie funk­tio­niert ein Backup mit tar?

Webmaster verwenden tar gern, um Backups zu erstellen: Dabei bleibt die Ver­zeich­nis­struk­tur erhalten und der Funk­ti­ons­um­fang des Programms lässt zu­sätz­lich zahl­rei­che Fein­ab­stim­mun­gen zu, wie an den vielen Optionen er­sicht­lich ist. Im Folgenden erklären wir Ihnen, wie Sie ein voll­stän­di­ges Backup mit tar erzeugen und wie Sie in­kre­men­tel­le Backups mit dem Programm erstellen.

Ein einfaches Backup mit tar erstellen

Es ist sinnvoll für Ihre Si­che­rungs­stra­te­gie, wenn Sie ein Backup-Skript für die Ar­chi­vie­rung Ihres Systems erstellen, statt einfach händisch Archive anzulegen. So können Sie au­to­ma­ti­siert mehrere Ver­zeich­nis­se ar­chi­vie­ren, kom­pri­mie­ren und auf einen externen Da­ten­spei­cher über­tra­gen. Wichtig dafür ist, dass Sie durch­ge­hend schreib- und le­se­be­rech­tigt in den ent­spre­chen­den Ver­zeich­nis­sen sind. Zunächst legen Sie in Ihrem Home-Ver­zeich­nis ein Ver­zeich­nis bin an (falls Sie ein solches noch nicht haben) und erstellen dort das Skript. Das folgende Bei­spiel­skript müssen Sie selbst­ver­ständ­lich an Ihre Be­dürf­nis­se und Ver­zeich­nis­struk­tur anpassen:

#!/bin/bash
DATE=$(date +%Y-%m-%d-%H%M%S)
BACKUP_DIR="/zielverzeichnis/backup"
SOURCE="$HOME/quellverzeichnis"
tar -cvzpf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE

Damit Sie verstehen, was genau dieses Skript bewirkt, erklären wir es nun Zeile für Zeile:

  1. Die erste Zeile ist der so­ge­nann­te Shebang, der dem Be­triebs­sys­tem mitteilt, welches In­ter­pre­ter-Programm es verwenden soll. In diesem Fall wird bash verwendet.
  2. Jedes Backup mit tar erhält einen Zeit­stem­pel. Das ist wichtig, damit mehrere Backups sicher aus­ein­an­der­ge­hal­ten werden können. Der Variablen gibt man bei­spiels­wei­se folgendes Format: Jahr-Monat-Tag-Stun­de­Mi­nu­te­Se­kun­de, also zum Beispiel 2017-09-07-152833.
  3. Hiermit bestimmen Sie das Ver­zeich­nis, in dem das Backup erstellt wird. Das letzte Un­ter­ver­zeich­nis beenden Sie nicht mit „/“.
  4. In dieser Zeile legen Sie fest, welche Ver­zeich­nis­se Sie in das Archiv aufnehmen möchten. Hier kann man auch mehrere Ver­zeich­nis­se aufführen, die nur von einem Leer­zei­chen getrennt werden: SOURCE="$HOME/quell­ver­zeich­nis1 $HOME/quell­ver­zeich­nis2 ". An dieser Stelle notieren Sie ebenfalls kein „/“ am Ende der Ver­zeich­nis­se. Achten Sie in jedem Fall darauf, ein Leer­zei­chen vor dem ab­schlie­ßen­den An­füh­rungs­zei­chen ein­zu­fü­gen.
  5. Die letzte Zeile des Skripts enthält schließ­lich den tar-Befehl:
  • -cvzpf erstellt ein Archiv (-c), die Schritte dabei werden angezeigt (-v), es wird mit gzip kom­pri­miert (-z), die Zu­griffs­rech­te werden bei­be­hal­ten (-p) und alles wird in folgende Datei aus­ge­ge­ben (-f). Vor allem -v und -p sind dabei optional und Sie haben zudem die Mög­lich­keit, weitere Optionen ein­zu­fü­gen, um Ihr Backup anders zu gestalten.
  • $BACKUP_DIR/backup-$DATE.tar.gz benennt das Ver­zeich­nis ($BACKUP_DIR) und die Datei, in die das Backup ge­spei­chert werden soll. In unserem Beispiel nennen wir diese backup, gefolgt vom aktuellen Zeit­stem­pel. Ab­ge­schlos­sen wird der Dateiname mit der Angabe des Formats, in dem man die Datei erstellt. Wenn Sie eine andere Kom­pri­mie­rung verwenden möchten, müssen Sie daran denken, sowohl das Da­tei­for­mat als auch die Option im Befehl zu ändern.
  • Zum Schluss teilen Sie tar durch die Variable $SOURCE mit, was es überhaupt ar­chi­vie­ren soll. Denkbar ist es, dass Sie zu­sätz­lich mit --exclude oder -X Ver­zeich­nis­se oder Dateien aus­schlie­ßen, die nicht in das Backup auf­ge­nom­men werden sollen.
Tipp

Prin­zi­pi­ell spielt es bei Linux und Unix keine Rolle, welche Endung Sie der Skript-Datei geben. Die Systeme lesen die Art der Datei aus, indem sie die Da­tei­struk­tur mit einem Magic-File ver­glei­chen. Dabei handelt es sich um eine Datenbank, die sich für ge­wöhn­lich unter /etc/magic finden lässt. Dennoch hat es sich ein­ge­bür­gert, Da­tei­endun­gen anzugeben, damit Sie als Nutzer leichter den Überblick behalten.

Nun speichern Sie die Datei mit dem Namen backup im bin-Ver­zeich­nis und fügen dessen Pfad der PATH-Variable hinzu:

PATH=$PATH:$HOME/bin

Das soeben erstellte Backup-Skript müssen Sie noch aus­führ­bar machen:

chmod u+x $HOME/bin/backup

Damit machen Sie die Datei nur für Sie selbst (u) aus­führ­bar. Sie können die Rechte aber auch an eine Gruppe (g), an andere (o) oder an alle (a) vergeben. Jetzt sind Sie fertig und können das Skript ausführen:

sudo backup

Wenn Sie das Backup wieder her­stel­len möchten, also das Archiv ex­tra­hie­ren, dann reicht hierfür ein Befehl:

tar -xzf backup.tar.gz -C /

Das Skript erstellt ein Voll-Backup. Dies ist aber gerade bei der Sicherung eines kom­plet­ten Servers nicht immer die richtige Wahl. Deshalb sollten Sie überlegen, ob ein in­kre­men­tel­les Backup mit tar für Ihre Zwecke nicht sinn­vol­ler ist.

Hinweis

Beim Erstellen eines Archivs mit absoluten Pfad­an­ga­ben liefert tar die Meldung: „tar: Entferne führende „/“ von Ele­ment­na­men“. Dies ist keine Feh­ler­mel­dung, sondern ein Hinweis auf eine Si­cher­heits­vor­keh­rung beim Zu­rück­spie­len: tar macht aus /home/un­ter­ver­zeich­nis den Pfad home/un­ter­ver­zeich­nis. Wenn Sie sich beim Ex­tra­hie­ren des Archivs nun nicht im Root-Ver­zeich­nis befinden, legt tar eine neue Ver­zeich­nis­struk­tur an, zum Beispiel: /home/un­ter­ver­zeich­nis/home/un­ter­ver­zeich­nis. Damit ist die Wahr­schein­lich­keit, dass Sie ver­se­hent­lich Ihr kom­plet­tes System über­schrei­ben, ver­rin­gert. Denken Sie daran: Unix fragt beim Über­schrei­ben nicht nach. Sie müssen also, sollten Sie be­stehen­de Inhalte wirklich ersetzen wollen, zuerst ins Root-Ver­zeich­nis na­vi­gie­ren. Umgehen können Sie dies durch die Option -P

Was ist ein in­kre­men­tel­les Backup?

Webmaster erstellen re­gel­mä­ßig Backups, um einen Da­ten­ver­lust zu vermeiden. Sollte das ei­gent­li­che System seinen Dienst ver­wei­gern, kom­pro­mit­tiert oder gelöscht worden sein, kann man in solch einem Fall eine funk­tio­nie­ren­de Version aus dem Backup auf­spie­len. Je häufiger Sie Spei­cher­punk­te setzen, umso weniger Da­ten­ver­lust müssen Sie im Notfall hinnehmen. Wenn Sie nun jedes Mal ein voll­stän­di­ges Backup speichern, also alle Daten des System ar­chi­vie­ren, dauert das zum einen sehr lang und zum anderen ist ein großer Spei­cher­be­darf notwendig. Statt­des­sen können Sie auf in­kre­men­tel­le Backups setzen.

Ein in­kre­men­tel­les Backup setzt immer eine Voll­spei­che­rung voraus. Sie müssen das System (oder zumindest den Teil, den Sie sichern möchten) zuerst einmal komplett ar­chi­vie­ren. Im Anschluss werden bei einem in­kre­men­tel­len Backup nur noch neue oder ver­än­der­te Dateien gesichert. Dies führt zu einem sehr viel kleineren Da­ten­auf­kom­men, verlangt bei einer Wie­der­her­stel­lung aber einen größeren Aufwand. Wenn Sie das Backup also wieder auf­spie­len, benötigen Sie das letzte Voll-Backup und jedes in­kre­men­tel­le Backup, das Sie seit jener voll­stän­di­gen Ar­chi­vie­rung erstellt haben. Sollte Ihnen eine Datei davon verloren gegangen sein (das ist heut­zu­ta­ge un­wahr­schein­li­cher als noch zu Zeiten von Ma­gnet­bän­dern), ist das Backup lü­cken­haft.

Ein in­kre­men­tel­les Backup mit tar erstellen

Mit tar lassen sich re­gel­mä­ßi­ge in­kre­men­tel­le Backups erstellen. Auch hierfür schreiben Sie ein eigenes Backup-Skript. Damit können Sie zum Beispiel festlegen, dass einmal pro Monat ein Voll-Backup erstellt wird und dann täglich ein in­kre­men­tel­les Backup. Außerdem erreicht man mit dem folgenden Skript, dass alte Backups re­gel­mä­ßig in nach Datum sortierte Ordner ver­scho­ben werden. Zu­sätz­lich zu tar benötigen Sie hierfür auch noch cron. Dieser Daemon (ein Programm, das im Hin­ter­grund läuft) lässt zeit­ba­sier­te Aus­füh­run­gen von anderen Prozessen zu – cron ist bei Ubuntu grund­sätz­lich enthalten. Zunächst öffnen Sie also wieder einen Text­edi­tor und erstellen Ihr Skript:

#!/bin/bash
BACKUP_DIR="/zielverzeichnis/backup"
ROTATE_DIR="/zielverzeichnis/backup/rotate"
TIMESTAMP="timestamp.dat"
SOURCE="$HOME/quellverzeichnis "
DATE=$(date +%Y-%m-%d-%H%M%S)
EXCLUDE="--exclude=/mnt/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/*"
cd /
mkdir -p ${BACKUP_DIR}
set -- ${BACKUP_DIR}/backup-??.tar.gz
lastname=${!#}
backupnr=${lastname##*backup-}
backupnr=${backupnr%%.*}
backupnr=${backupnr//\?/0}
backupnr=$[10#${backupnr}]
if [ "$[backupnr++]" -ge 30 ]; then
mkdir -p ${ROTATE_DIR}/${DATE}
mv ${BACKUP_DIR}/b* ${ROTATE_DIR}/${DATE}
mv ${BACKUP_DIR}/t* ${ROTATE_DIR}/${DATE}
backupnr=1
fi
backupnr=0${backupnr}
backupnr=${backupnr: -2}
filename=backup-${backupnr}.tar.gz
tar -cpzf ${BACKUP_DIR}/${filename} -g ${BACKUP_DIR}/${TIMESTAMP} -X $EXCLUDE ${SOURCE]

Auch für dieses Backup-Skript erklären wir Ihnen Schritt für Schritt, was passiert:

  • Zunächst de­fi­nie­ren Sie wieder den In­ter­pre­ter.
  • An­schlie­ßend legen Sie die Variablen fest. Neu hin­zu­ge­kom­men sind ein Ver­zeich­nis für Ro­ta­tio­nen der Backups (eine Art Archiv der Backups) und eine Datei für einen Timestamp.
  • In unserem Beispiel il­lus­trie­ren wir, dass es nicht immer sinnvoll ist, alle Ver­zeich­nis­se in das Backup zu über­neh­men. Aus­ge­schlos­sen haben wir in diesem Fall die Inhalte der Ordner (und nicht die Ordner selbst, daher das „*“) mnt, proc, sys und tmp. Denn die Daten in diesen Ver­zeich­nis­sen sind temporär oder werden bei jedem Sys­tem­start neu erstellt.
  • Damit die Pfade alle richtig in­ter­pre­tiert werden, wechselt das Skript mit cd / in das Root-Ver­zeich­nis.
  • Mit mkdir legen Sie das Backup-Ver­zeich­nis an, falls es noch nicht existiert.
  • Nun werden alle Variablen ein­ge­le­sen. Da Sie Ihre Backups durch­num­me­rie­ren wollen, ermittelt der Code-Block die Nummer des letzten Backups. Dies geschieht, indem das Skript die anderen Be­stand­tei­le des Da­tei­na­mens entfernt.
  • Sie nehmen immer nur 30 Backups auf, danach ver­schiebt das Skript alle Ar­chiv­da­tei­en in den Ro­ta­ti­ons­ord­ner. Dieser wird zuerst erstellt und dann werden mit mv alle Dateien, die mit den Buch­sta­ben b und t beginnen, in den neuen Ordner ver­scho­ben. Die Be­schrän­kung der Buch­sta­ben erklärt sich dadurch, dass ohnehin nur damit ge­kenn­zeich­ne­te Dateien in dem Ordner sein sollten: nämlich backup und timestamp. Schließ­lich setzt das Skript die Backup-Nummer wieder auf 1. Stellt Ihr Skript fest, dass noch keine 30 Backups erstellt wurden, erhöht es die Da­tei­num­mer einfach um 1 (++).
  • Jetzt macht das Skript quasi wieder das rück­gän­gig, was es am Anfang vor­ge­nom­men hat: Die Befehle sorgen dafür, dass der Dateiname wieder – jetzt mit der neuen Nummer – voll­stän­dig ist.
  • Schließ­lich führt das Skript den ei­gent­li­chen tar-Befehl aus: Im Vergleich zum Kommando des einfachen Voll-Backups ist hier eine weitere Option hin­zu­ge­kom­men. Mit -g wird das in­kre­men­tel­le Backup er­mög­licht. Dazu liest tar den Timestamp jeder Datei aus, gleicht diesen mit den bislang in timestamp.dat auf­ge­zeich­ne­ten Daten ab und kann so ent­schei­den, welche Än­de­run­gen seit dem letzten Backup ent­stan­den sind. Nur diese werden Teil des neuen Archivs.
Hinweis

Das Skript ver­schiebt (bei täglicher Ar­chi­vie­rung) jeden Monat die Backup-Dateien in einen neuen Ar­chiv­ord­ner, damit das ei­gent­li­che Back­up­ver­zeich­nis nur die ak­tu­ells­ten Daten enthält. Es ist al­ler­dings keine Funktion eingebaut, die die Anzahl der Ar­chiv­ord­ner begrenzt. Das bedeutet, dass Sie diese manuell löschen müssen.

Damit ist das Skript zum Erstellen eines in­kre­men­tel­len Backups mit tar fertig: Speichern Sie die Datei als backup im bin-Ver­zeich­nis. Auch hier müssen Sie den Pfad ex­por­tie­ren und das Skript aus­führ­bar machen:

PATH=$PATH:$HOME/bin
chmod u+x $HOME/bin/backup

Theo­re­tisch können Sie jetzt Ihr Backup-Skript mit sudo backup starten. Die Idee hinter dem in­kre­men­tel­len Backup ist aber ja, dass der Vorgang au­to­ma­ti­siert und täglich durch­ge­führt wird. Dafür greift man zu cron und ändert die so­ge­nann­te Crontab. Dies ist die Tabelle, nach der cron Aufgaben ausführt. Sie hat sechs Felder:

Minuten (0-59) Stunden (0-23) Tage (1-31) Monate (1-12) Wo­chen­ta­ge (0-7) Auftrag

In die Felder können Sie entweder Zahlen ent­spre­chend des Wer­te­be­reichs (in Klammern angegeben) oder einen Asterisk (*) eingeben. Letzterer bedeutet so viel wie: zu jedem möglichen Wert. Eine Be­son­der­heit stellt die Spalte Wochentag dar. Hiermit können Sie festlegen, dass ein Auftrag zum Beispiel jeden Montag (1) oder nur an Werktagen (1–5) aus­ge­führt wird. Den Sonntag kann man durch zwei un­ter­schied­li­che Werte angeben: Sowohl 0 als auch 7 beziehen sich auf Sonntag, da für einige Menschen die Woche mit diesem Tag beginnt und für andere damit endet.

In der Kom­man­do­zei­le öffnen Sie den Edi­tor­mo­dus von cron mit:

sudo crontab –e

Hier fügen Sie folgende Zeile ein:

30 7 * * * /home/bin/backup

Damit haben wir ver­an­lasst, dass das Backup jeden Tag (und jeden Monat, un­ab­hän­gig vom Wochentag) um 7.30 Uhr morgens aus­ge­führt wird. Speichern Sie Ihre Än­de­run­gen ab und Ihr tägliches in­kre­men­tel­les Backup ist ein­satz­be­reit.

Hinweis

Cron funk­tio­niert nur dann, wenn Ihr System läuft. Bei Web­ser­vern sollte das ohnehin der Fall sein. Wenn Sie aber planen, das Skript für die Sicherung Ihres PC oder Laptops ein­zu­set­zen, müssten Sie ga­ran­tie­ren, dass die Geräte auch jeden Tag um 7.30 Uhr laufen. Ist das Gerät nicht ein­ge­schal­tet, fällt das Backup einfach aus. Eine Mög­lich­keit, dies zu umgehen, bietet anacron. Dieses Programm ver­schiebt bei einem nicht laufenden System die geplante Aus­füh­rung auf einen Moment, in dem das Gerät wieder aktiv ist.

System aus einem Backup wie­der­her­stel­len

Man möchte es niemandem wünschen, aber der Ernstfall kann eintreten und Ihr System muss wie­der­her­ge­stellt werden. Mit tar geht auch das relativ leicht und benötigt zudem kein zu­sätz­li­ches Skript. Ein einzelner Befehl wie bei einem einfachen Voll-Backup ist aber nicht möglich: Es liegt in der Natur des in­kre­men­tel­len Backups, dass mehrere Dateien entpackt werden müssen. In die Konsole geben Sie diese Be­fehls­zei­len ein:

BACKUP_DIR=/zielverzeichnis/backup
cd /
for archiv in ${BACKUP_DIR}/backup-*.tar.gz; do
tar -xpzf $archiv -C /
done
Hinweis

Bei Wie­der­her­stel­lung des Systems aus dem Backup werden alle Ver­zeich­nis­se und damit eventuell auch wichtige Dateien über­schrie­ben.

Damit Sie nicht jede Ar­chiv­da­tei einzeln ex­tra­hie­ren müssen, verwenden Sie eine for-Schleife:

  1. Im ersten Schritt de­fi­nie­ren Sie das Ver­zeich­nis, in dem die Backups liegen.
  2. Mit cd / wechseln Sie in das Root­ver­zeich­nis, damit si­cher­ge­stellt ist, dass das Archiv auch am korrekten Platz ex­tra­hiert wird.
  3. Nun starten Sie eine for-Schleife: Dieser Befehl wie­der­holt alle Aktionen, die zwischen do und done stehen, bis alle Mög­lich­kei­ten durch­lau­fen sind. Zur Spe­zi­fi­ka­ti­on des Befehls geben Sie den Pfad Ihrer Backups wieder mit einem Asterisk als Wildcard an, denn Sie möchten alle Ar­chiv­da­tei­en in diesem Ver­zeich­nis entpacken.
  4. Den tar-Befehl spe­zi­fi­ziert man fol­gen­der­ma­ßen: Sie ex­tra­hie­ren (-x), bei Bei­be­hal­tung der Zu­griffs­rech­te (-p), und de­kom­pri­mie­ren (-z) das Archiv (-f $archiv) in das Wur­zel­ver­zeich­nis (-C /).
  5. Mit done legen Sie den Endpunkt der Schleife fest.

Da Sie beim Erstellen der Archive diese durch­num­me­riert haben, werden die Backups nach­ein­an­der wieder auf­ge­spielt – und zwar beginnend mit dem ältesten. Das ist wichtig: In den Archiven, die nach dem Voll-Backup ent­stan­den sind, befinden sich jeweils neuere Versionen von Dateien. Das bedeutet, dass während der Schleife zunächst die alte Version ex­tra­hiert wird, um dann, beim nächsten Durchlauf, mit einer neueren Fassung über­schrie­ben zu werden. Am Ende haben Sie das komplette System mit dem Backup über­schrie­ben und die neuste, ar­chi­vier­te Version jeder einzelnen Datei wie­der­her­ge­stellt.

Dies ist der ei­gent­li­che Sinn, eines in­kre­men­tel­len Backups: die komplette Wie­der­her­stel­lung des Systems. Mit einem kleinen Umweg ist es aber sogar möglich, nur eine einzelne Datei zu retten und die zuvor ar­chi­vier­te, letzte Version zu­rück­zu­ho­len. Dafür gehen Sie in zwei Schritten vor:

BACKUP_DIR=/zielverzeichnis/backup
ls -l ${BACKUP_DIR}
for archiv in ${BACKUP_DIR}/backup-*tar.gz; do
tar -tzf $archiv | grep gesuchte-datei;
done

Auch in diesem ersten Schritt greifen Sie auf eine for-Schleife zurück, die al­ler­dings zum Suchen und nicht zum Ex­tra­hie­ren verwendet wird:

  1. Sie de­fi­nie­ren erneut Ihr Backup-Ver­zeich­nis.
  2. Mit dem Kommando ls lassen Sie sich alle Dateien und Ordner im Backup-Ver­zeich­nis anzeigen. Die Option -l er­mög­licht de­tail­lier­te In­for­ma­tio­nen.
  3. Sie eröffnen eine Schleife wie beim Wie­der­her­stel­len des kom­plet­ten Archivs.
  4. Die wichtige Änderung ist in den Optionen des tar-Befehls zu finden: Statt ein Archiv zu erstellen (c) oder zu ex­tra­hie­ren (x), lassen Sie den Inhalt der Archive anzeigen (t). Da aber nicht Sie selbst nach der Datei suchen wollen, leiten Sie die Ausgabe mit einem Pipe (senk­rech­ter Strich) an den Befehl grep weiter. Dieser sucht innerhalb der Ausgabe (also dem Inhalt der Archive) nach der Datei, die Sie suchen.
  5. Beenden Sie die Schleife.

Nun zeigt Ihnen das Terminal die gesuchte Datei an – und viel­leicht sogar mehrfach, wenn Sie diese re­gel­mä­ßig be­ar­bei­tet haben und sie daher in jedem in­kre­men­tel­len Backup auftaucht. Merken Sie sich nun den Pfad zu der Datei und bauen Sie eine weitere Schleife, die dann die letzte ge­spei­cher­te Version wie­der­her­stellt:

for archiv in ${BACKUP_DIR}/backup-*.tar.gz; do
tar –xzf $archiv -C / zielverzeichnis/backup/gesuchte-datei
done

Nun wird die Datei an ihrem ur­sprüng­li­chen Ort wie­der­her­ge­stellt und über­schreibt dabei auch eine mögliche ak­tu­el­le­re Version.

Zum Hauptmenü