Daten sichern mit GNU Tar und Gzip
Datensafe
Daten sichern
Daten sichern mit GNU Tar und Gzip
Als Bestandteil vieler Linux-Distributionen und kommerzieller Unix-Systeme ist Tar zu finden. Das Tool eignet sich für private Anwender, die schnell ein Verzeichnis für den Versand per E-Mail archivieren wollen. Aber auch Administratoren, die täglich eine Datensicherung durchführen, bekommen mit Tar ein ausgereiftes Werkzeug mit hoher Flexibilität. Allerdings macht die verwirrend große Anzahl an Optionen den Einstieg nicht ganz leicht. Per Tar lassen sich Verzeichnisse samt Unterverzeichnissen oder komplette Dateisysteme sichern. Der seltsame Name ist die Abkürzung von »Tape Archiver«, da Tar ursprünglich nur für die Verwendung mit Bandlaufwerken vorgesehen war. Aber auch Datensicherungen auf Festplatte sind problemlos möglich. Laden Sie Software wie die Kernel- Quellen aus dem Internet, sind diese meist in einem Tar-Archiv verpackt und tragen die Endung »tar.gz« oder »tgz«. Das »gz« signalisiert, dass das Archiv zusätzlich mit »Gzip« komprimiert ist.
Mit Tar einsteigen
Selbst wenn Sie nicht vorhaben, eigene Backups zu erstellen, liefert Ihnen dieser Workshop das notwenige Basiswissen, um heruntergeladene Archive korrekt in Ihrem Dateisystem zu entpacken. Mit Tar experimentieren Sie anfangs am besten als normaler Benutzer. Ein Fehler schleicht sich bei der Eingabe auf der Kommandozeile schnell ein, was sich bei einem vorschnellen Test mit Root-Rechten fatal auswirken kann. Das Programm überschreibt beim Entpacken eines Archivs standardmäßig gleichnamige Dateien, ohne den Benutzer dies vorher bestätigen zu lassen. Kopieren Sie für den Einstieg einige kleinere Dateien wie Textdokumente oder Grafiken in ein neues Verzeichnis »test« im Home-Directory. Als Arbeitsverzeichnis benutzen Sie das Verzeichnis »/tmp« im Root-Directory. Nun ist alles bereit, um das erste Archiv zu erzeugen: tar cvf /tmp/test.tar test Hinter dem Tar-Befehl kommen die Kommandos und Optionen (cvf). Es folgen der Pfad und der Name des fertigen Archivs (»/tmp/test.tar«). Den Schluss macht das Verzeichnis, das Sie archivieren (»test«). Die Kommandos und Optionen lassen sich in einem Rutsch angeben, Sie müssen allerdings eine bestimmte Reihenfolge beachten. Zuerst kommt immer das Kommando, das Tar mitteilt, was es zu tun hat. Dass Sie ein Archiv erzeugen wollen, signalisieren Sie mit »c« (create). Die wichtigsten Kommandos zeigt die Tabelle »Tar: Kommandos« unten. Mit der Option »v« (verbose) zeigt Tar, welche Dateien es in das Archiv integriert. Als letztes Kommando kommt »f« (file), hinter dem Sie durch ein Leerzeichen getrennt den Pfad und den gewünschten Namen des Archivs angeben. Ein Archiv anzulegen ist ungefährlich, denn die Originaldateien lässt Tar unberührt. Es füllt das Archiv stattdessen mit Kopien.
Archiv entpacken
Daten sichern mit GNU Tar und Gzip
Nun haben Sie das Archiv »test.tar« im Verzeichnis »/tmp« liegen und möchten es wieder entpacken. Normalerweise kennen Sie den genauen Inhalt eines Archivs nicht und so sollten Sie sich diesen schon vor dem eigentlichen Auspacken in einer Listenansicht vorher anzeigen lassen. Hierzu benutzen Sie das Kommando »t« (list), das das »c« vom obigen Beispiel ersetzt:
tar tvf /tmp/test.tar
Zusammen mit der Verbose-Option erhält der Anwender eine Liste aller Dateien im Archiv. Auch Besitzer, Rechte, Datum und Dateigröße fördert die Kombination »tv« zu Tage. Die Ausgabe entspricht somit dem List-Befehl »ls -l«, der den Inhalt eines Verzeichnisses ausgibt. Interessant ist das Kommando vor allem bei Archiven, die Sie aus dem Internet geladen haben. Da sie nun über den Inhalt des Archivs Bescheid wissen, entpacken Sie die Tar-Datei. Wechseln Sie dazu in das Verzeichnis »/tmp« und benutzen Sie folgenden Befehl:
tar xvf /tmp/test.tar
An erster Stelle der Kommandos steht das »x« (extract), das Tar das Archiv auspacken lässt. Sehen Sie sich nun das Verzeichnis »/tmp« an. Tar hat das Verzeichnis »test« mitsamt der darin liegenden Dateien in »/tmp« extrahiert. Das Archiv »test.tar« bleibt für eine eventuelle weitere Benutzung ebenfalls am selben Ort.
Relative und absolute Pfade
Das Archivierungsprogramm benutzt relative Pfade und legt die im Archiv gespeicherten Verzeichnisse im gleichen Verzeichnis an, in dem Sie Tar aufrufen. Dies ist zwar nützlich, aber auch nicht ungefährlich. Eventuell gleichnamige Dateien überschreibt Tar ohne Rückfrage. Falls Sie im falschen Verzeichnis entpacken, müssen Sie zudem alles an die richtige Stelle im Verzeichnisbaum verschieben. Dies kann bei großen Archiven, etwa den Kernel- Quellen, durchaus einige Minuten dauern. Trotzdem erlaubt es Tar, Dateien mit der Angabe eines absoluten Pfads zu archivieren. Diese wandelt es dann in relative Pfade um. Das folgende Beispiel soll dies verdeutlichen. Wechseln Sie nach »/tmp« und sichern Sie als Benutzer »root« von dort aus die Datei »/etc/hosts«:
tar cvf ./hosts.tar /etc/hosts
Die meisten Tar-Versionen informieren Sie daraufhin, dass sie den führenden Slash »/« (das Root-Verzeichnis) entfernen. Übrig bleibt »etc/hosts« und genauso entpackt Tar die Datei »hosts« auch wieder. Befinden Sie sich dabei im Verzeichnis »/«, überschreibt das Programm eine vorhandene »hosts«-Datei in »/etc«. Entpacken Sie das Archiv hingegen in »/tmp«, legt Tar zudem noch das Verzeichnis »etc« an. Das Ergebnis in diesem Fall: »/tmp/etc/hosts«.
Tar für Fortgeschrittene
Daten sichern mit GNU Tar und Gzip
Tar leistet deutlich mehr, als nur ein paar Dateien zu einem Archiv zu verschnüren. Es kann Einträge aus einem Archiv löschen, eine Tar-Datei aktualisieren oder weitere Dateien an ein vorhandenes Archiv anhängen. Auch die Kommandos und Optionen lassen sich auf drei verschiedene Arten angeben: Kurz, lang oder Old- Style. Wichtig ist die Old-Style-Form, da diese auch Tar-Versionen auf anderen Unix-Versionen wie Solaris beherrschen:
tar cvf test.tar
Die Old-Style-Form stellt maximale Kompatibilität zwischen den verschiedenen Linux- und Unix-Varianten sicher. Die Optionen gibt der Anwender dabei nacheinander ohne Leerzeichen an, etwa »cfv«. Gehört zu einer Option ein Argument wie bei »f« (file) oder »b« (Anzahl der Blöcke), steht dieses an derselben Stelle in der Reihe wie die Optionen:
tar cvfb test.tar 20
Zuerst kommt im Optionenblock das »f«, dann das »b«. Genauso verhält es sich mit den Argumenten: Zuerst der Name des Archivs (»test.tar«) für »f«, danach die Anzahl der Blöcke (»20«) für die Option »b«. Die Kurzversion (short style) ist leichter zu handhaben, da sie übersichtlicher ist. Hier stellt der Anwender jeder Option ein Minus-Zeichen voran. Das Argument schließt durch ein Leerzeichen getrennt an die jeweilige Option an:
tar -c -v -f test.tar -b 20
Die lange Schreibweise (long style) eignet sich hingegen weniger für die Kommandozeile, ist jedoch in Skripten ratsam. Der Anwender kann sich dadurch den Sinn der Option erschließen und muss sich nicht mit Kürzeln plagen:
tar –list –verbose –file test.tar
Hier macht die Langform sofort deutlich, dass Tar den Inhalt des Archivs ausgeben soll. Aus der Kurzform oder dem Old-Style-Format wäre dies nicht auf Anhieb ersichtlich, da hier »–list« zu »-t« respektive »t« schrumpft. Alle drei Schreibweisen lassen sich auch kombinieren. Zu beachten ist hierbei allerdings, dass Anweisungen in Old- Style zuerst kommen müssen.
Selten benötigte Kommandos
Daten sichern mit GNU Tar und Gzip
Benutzen Sie Tar, um regelmäßig Backups anzulegen, benötigen Sie irgendwann mehr Kommandos als nur die Basisbefehle »create« und »extract«. Interessant ist vor allem das Kommando »–compare« (auch »–diff«): Es vergleicht die Dateien
im Filesystem mit denen im Archiv. So lässt sich leicht feststellen, ob und welche Dateien sich seit der letzten Datensicherung geändert haben. Die Kommandos »–append«, »–update «, »–concatenate und »–delete« sind allerdings mit ein wenig Vorsicht zu genießen. Der »append«-Befehl hängt neu im Dateisystem dazugekommene Dateien einfach an das Ende eines Archivs an. Dies ergibt nur dann Sinn, wenn sich der Inhalt der Dateien, die bereits im Archiv vorhanden sind, nicht ändert. Auch das »update«-Kommando bringt nicht wirklich etwas, da es geänderte Dateien ebenfalls hinten an das Archiv hängt, ohne die älteren Dateiversionen zu überschreiben. Dadurch bläht sich das Archiv unnötig auf. Ein inkrementelles Backup ist hier besser. Dazu später mehr. Die »delete«-Funktion löscht alle angegebenen Dateien aus dem Archiv. Der Befehl ist nur für Notfälle gedacht, denn die Dateien in einer Datensicherung sollte der Anwender ja gerade nicht löschen.
Tar im täglichen Einsatz
Niemand braucht so viele Optionen, schon gar nicht im täglichen Einsatz. Der Anwender kommt in den meisten Fällen mit Standardeinstellungen aus. Die Mehrzahl der Optionen kommt bei Spezialfällen oder in komplexen Umgebungen zum Einsatz. Wir konzentrieren uns daher auf den folgenden Seiten auf die üblichen Anwendungsfälle. Mit diesem Wissen ausgestattet sollte es ihnen nicht schwer fallen, eine auf ihre Bedürfnisse zugeschnittene Sicherungsstrategie auszutüfteln. Eine Standardaufgabe für Tar ist das Sichern eines Verzeichnisses. Da der Anwender Platz auf dem Backupmedium sparen will, komprimiert er das Archiv mit dem Programm »Gzip«.
tar cvzf doku-2005-12-24.tgz doku
Der Benutzer befindet sich im übergeordneten Verzeichnis von »doku«. Somit erhält er beim Entpacken das gleiche Verzeichnis samt Inhalt. Die Option »z« weist Tar an, das fertig verpackte Archiv anschließend mit Gzip zu komprimieren. Dies sollte der Anwender auch über die Dateiendung signalisieren (»tgz« oder »tar.gz«). Alternativ nutzen Sie das Programm »Bzip2«, das je nach Zustand der Daten eine bis zu 10 Prozent bessere Komprimierrate erreicht. Allerdings gehört es nicht bei allen Distributionen zur Standardausstattung. Soll Tar Bzip benutzen, ersetzen Sie das »z« durch die Option »j« und nennen die Dateiendung »tbz2« oder »tar.bz2«. Der Archivname ist absichtlich so sprechend gewählt und folgt dem ISO-Format «yyyy-mm-dd« für year, month und day (Jahr, Monat, Tag). So lassen sich regelmäßig angefertigte Backups leicht zuordnen. Um sich so eine Datensicherung anzusehen, benutzen Sie die Option »t«. Da das Archiv komprimiert ist, geben Sie zusätzlich die Option »z« an, damit Gzip das Archiv im Speicher dekomprimieren kann:
tar tvzf doku-2005-12-24.tgz
Als normaler Nutzer entpacken
Daten sichern mit GNU Tar und Gzip
Extrahiert ein normaler Benutzer ein Archiv, das ein anderer Anwender angelegt hat, treten einige Besonderheiten auf. Das Verzeichnis sowie die darin liegenden Dateien sind dann Eigentum dieses Benutzers und der Gruppe, der dieser Nutzer angehört. Ebenso ändern sich die Zugriffsrechte. Grund: Die »Umask« ändert die Rechte entsprechend, da die Dateien neu angelegt werden (siehe Kasten »Umask-Wert setzen« auf Seite 59). Extrahieren Sie ein Archiv ohne die gespeicherten Zugriffsrechte zu berücksichtigen, passt Umask alle Dateien automatisch an. Sind sowieso schon geringere Rechte eingestellt, bleiben diese unberührt. Um die Rechte unabhängig vom Umask-Wert erhalten, benutzen Sie die Option »–preserve-permissions« oder kurz »p« als normaler User:
tar xzpf doku.tgz
Die ursprünglichen Rechte sind wieder vorhanden und sogar das SGID-Bit des Verzeichnisses bleibt so erhalten. Wer mit dem Account root im System angemeldet ist, darf alles ändern, lesen oder schreiben. Daher sind die Optionen »–sameowner « und »–preserve-permissions« für root gleich voreingestellt. Löschen Sie die Dateien vom vorherigen Beispiel und entpacken Sie das Archiv »doku.tgz« als Systemverwalter. Sie werden sehen, dass Verzeichnis und Dateien exakt dieselben Rechte, Eigentümer und Gruppenzugehörigkeit aufweisen wie vor der Archivierung.
Archiv teilweise entpacken
Daten sichern mit GNU Tar und Gzip
Häufig kommt es vor, dass der Anwender nur bestimmte Dateien aus einem Archiv benötigt. Insbesondere bei großen Archiven kommt die Funktion sehr gelegen. Zuerst verschaffen Sie sich mit dem Kommando »t« (list) einen Überblick zum Inhalt des Archivs. Anschließend geben Sie die Dateien explizit an, die Sie aus dem Archiv extrahieren möchten: tar xzf doku.tgz doku/rot doku/blau Da alle Zugriffsrechte sowie Eigentümer und Gruppe erhalten sind, hat der Systemverwalter root die Dateien entpackt. Das Verzeichnis legt Tar mit den Einstellungen des Administrators neu an. Sie können auch Verzeichnisse angeben, dann extrahiert das Programm den gesamten Verzeichnisteilbaum. Achten Sie außerdem darauf, dass der Pfad exakt mit dem im Archiv übereinstimmt. Ansonsten verweigert Tar die Zusammenarbeit.
Verzeichnis auf Band sichern
Daten sichern mit GNU Tar und Gzip
Bis jetzt haben Sie in den Beispielen ausschließlich auf die Festplatte gesichert. Nun soll das Backup eines Servers auf ein Bandlaufwerk wandern. Das einfachste Backup ist wieder das Sichern eines einzelnen Verzeichnisses. Im Prinzip funktioniert das Backup auf Band wie das auf der Festplatte. Sie müssen darüber hinaus den Device-Namen des Bandlaufwerks kennen. Zudem geben Sie den zum Laufwerk passenden Blocking-Faktor (»b«) an, der die Größe der logischen Blöcke als Vielfaches von 512 Byte spezifiziert. Voreingestellt hat Tar den Wert 20, was 10 KByte entspricht. DLT-Laufwerke nutzen meist 64 KByte, demnach ist hier ein Blocking- Faktor von 128 richtig. Allerdings sollten Sie den Wert nicht blind übernehmen, sondern die Blockgröße der Gerätedokumentation entnehmen.
tar czf /dev/nst0 –blockingfactor= 128 doku
Beim Device »/dev/nst0« handelt es sich um das erste (0) SCSI-Tape (st), das im System vorhanden ist. Das »n« signalisiert, dass das Gerät nicht automatisch zurückspult (norewind). Somit lassen sich mehrere Archive hintereinander auf das Band bannen. Möchte der Anwender den Inhalt eines früheren Archivs betrachten, spult er mit dem Befehl »mt« das Band zurück. Anschließend lässt sich mit dem »list«-Kommando das Inhaltsverzeichnis auf die Konsole bringen:
tar tvzf /dev/nst0 –blockingfactor= 128
Das Listing des Archivs erscheint genauso, als läge es im Dateisystem. Achten Sie auf jeden Fall darauf, dass Sie die gleiche Blockgröße wie beim Archivieren verwenden. Ungefährlich sind auch größere Blöcke. Kleinere Blockgrößen führen hingegen unweigerlich zu Fehlern. Ausnahme: Das Bandlaufwerk verwendet eigene, fest eingestellte Blockgrößen.
Archivteile zurücksichern
Daten sichern mit GNU Tar und Gzip
Wie bei einem Archiv auf der Festplatte lassen sich mit Tar auch einzelne Dateien vom Band in das System übertragen. Dabei gehen Sie jedoch ein wenig anders vor, da das Medium langsamer und unflexibler ist. Wichtig ist vor allem, dass Pfad und Dateiname richtig geschrieben sind. Ansonsten müssen Sie von vorne beginnen, was bei großen Datenmengen unter Umständen Stunden dauern kann. Um solche Fehler zu vermeiden, legen Sie ein Inhaltsverzeichnis des Archivs an. Dazu leiten Sie den Inhalt in eine Textdatei um. Diese lässt sich entsprechend editieren und mit der Option »–filesfrom « als Eingabe für Tar verwenden. Idealerweise erstellen Sie die Liste gleich zusammen mit der Datensicherung:
tar cvzf /dev/nst0 –blockingfactor= 128 doku> liste.txt
Falls Sie dies vergessen, können Sie das Inhaltsverzeichnis auch nachträglich erstellen. Wie lange das dauert, hängt wieder vom Umfang der Daten ab.
tar tzf /dev/nst0 –blockingfactor= 128 doku> liste.txt
Beach
ten Sie, dass dabei die Option »–verbose« nicht zum Einsatz kommt. Diese würde eigene Kommentare in die Datei »liste.txt« einfügen, die Sie im nächsten Schritt per Hand entfernen müssten. Die Datei »liste.txt« speichern Sie unter einem anderen Namen, etwa »zurueck. txt«, und löschen daraus alle Dateien, die Sie nicht zurücksichern möchten. Jetzt ist alles bereit, die gewünschten Dateien aus dem Archiv zu entpacken:
tar xvzf /dev/nst0 –blockingfactor= 128 –files-from=zurueck.txt
Dateisystem sichern
Daten sichern mit GNU Tar und Gzip
Vor umfangreichen Wartungsarbeiten oder Systemupdates legt ein gewissenhafter Administrator ein vollständiges Backup des Dateisystems an. Geht bei der Aktualisierung etwas schief, lässt sich dieses einfach zurückspielen. Dabei sollten Sie jedes Dateisystem (Partition, logisches Laufwerk oder Software-Raid-Device) separat sichern. Von einem Crash ist in der Regel nur ein Dateisystem betroffen, das sich dann bequem und schnell zurücksichern lässt. Im folgenden Beispiel existieren zwei Partitionen (neben swap) im System: »/dev/hda2« ist auf »/« gemountet und »/dev/hda3« auf »/home«. Normal aufgerufen würde Tar alle Partitionen in die Datensicherung einschließen, da »/home« als Unterverzeichnis im Root-Directory verankert ist. Um nur das Root-Dateisystem ohne »/home« zu sichern, verwenden Sie die Option »–one-file-system«.
tar cvzf /dev/nst0 –blockingfactor= 128 –one-file-system /
So gehen Sie für jedes Dateisystem vor. Natürlich lassen sich die Backups statt auf Band auch auf einer Festplatten ablegen. Um das Dateisystem zurückzusichern, benutzen Sie die Optionen »xzf«.
Dateisystem inkrementell sichern
Daten sichern mit GNU Tar und Gzip
Bei einer inkrementellen Sicherung fließen immer nur neue oder geänderte Dateien in das Backup ein. So lassen sich unter der Woche ressourcenschonende Datensicherungen anlegen. Die langwierige Vollsicherung kommt dann erst am Wochenende.
Für diese spezielle Art des Backups enthält Tar die Option »–listed-incremental «. Damit aufgerufen fertigt Tar einen so genannten Snapshot an. Anhand dieser Zustandsangabe des Dateisystems kann Tar herausfinden, welche Dateien sich seit dem letzten Backup-Durchlauf geändert haben. Tar soll das Samba- Share »/tausch« inkrementell sichern und dazu einen Snapshot anlegen:
tar czf tausch-voll-2005-12-24.tgz –listed-incremental=/tausch/ snapshot.tausch /tausch
Beim ersten Aufruf sucht Tar nach einer Snapshot-Datei. Ist keine vorhanden, führt es eine Vollsicherung durch. Der Snapshot muss nicht im Hauptverzeichnis des zu sichernden Verzeichnisses liegen. Dies macht jedoch die Kommandozeile kürzer. Den nächsten Sicherungslauf führt Tar dann bereits inkrementell durch. Nur den Namen des Archivs sollten Sie entsprechend anpassen.
tar czf tausch-inkr-2005-12-31.tgz – -listed-incremental=/tausch/snapshot. tausch /tausch
Möchten Sie wieder eine Vollsicherung des Verzeichnisses erstellen, verschieben Sie die Snapshot-Datei in ein anderes Verzeichnis und starten das Backup ganz normal wie oben. Den alten Snapshot sollten Sie sicherheitshalber noch ein paar Tage aufbewahren, bevor Sie ihn entgültig löschen.
Um einen bestimmten Zustand wiederherzustellen, spielen Sie die Sicherungen nacheinander ein. Beginnen Sie dabei mit der Vollsicherung und geben Sie den Namen der Snapshot-Datei an:
tar xzf tausch-voll-2005-12-24.tgz –listed-incremental=/tausch/ snapshot.tausch
Danach entpacken Sie nacheinander alle inkrementellen Sicherungen, bis der gewünschten Zustand erreicht ist:
tar xzf tausch-inkr-2005-12-31.tgz – -listed-incremental=/tausch/snapshot. tausch
Archiv auf CD kopieren
Daten sichern mit GNU Tar und Gzip
Wer kein Bandlaufwerk besitzt, kann Archive auch auf CD sichern. Tar selbst enthält allerdings kein Werkzeug, um zu große Archive passend zu teilen. Hier springt das Tool »split« ein, das sich auf jeder Distribution befindet. Um ein Archiv für 700-MByte-Rohlinge passend zu zerstückeln, verwenden Sie folgendes Kommando: split -b 695000000 riesen-backup.tgz Split fertigt aus dem Archiv »riesenbackup. tgz« 695 MByte große Teilstücke an. Diese nennt es einfach »xaa«, »xab« und so weiter. Um das ursprüngliche Archiv auf die Festplatte zu entpacken, mounten Sie zuerst die CD. Dann kopieren Sie die erste Datei »xaa« auf die Festplatte und benennen die Datei gleich passen um: cp /mnt/cdrom/xaa riesen-backup.tgz Nun legen Sie die CD mit dem nächsten Teil ein, mounten diese und hängen die Datei »xab« an das Archiv an:
cat /mnt/cdrom/xab>> riesenbackup. tgz
Dies wiederholen Sie für alle Teile und am Ende erhalten Sie das ursprüngliche Archiv zurück.
Tar: Optionen & Frontend
Daten sichern mit GNU Tar und Gzip
Short Long Beschreibung
v –verbose gibt die gerade bearbeitete Datei auf die Konsole aus
l –one-file-system sichert nur das angegebene Dateisystem, keine darin eingeh?ngten
T –files-from=
X –exclude-from=
h –dereference folge symbolischem Link und sichere die Datei
k –keep-old-files existierende Dateien nicht ?berschreiben
p –preserve-permissions erh?lt die Zugriffsrechte beim Extrahieren
z –gzip (de-)komprimiert das Archiv mit Gzip
j –bzip2 (de-)komprimiert das Archiv mit Bzip2
f –file=
b –blocking-factor=
i –ignore-zeros ignoriert leere Bl?cke
g –listed-incremental=
n/v –atime-preserve erh?lt die letzte Zugriffszeit
n/v –ignore-failed-read bricht bei bei Leseproblemen nicht ab
n/v –help Hilfe auf der Konsole anzeigen