tar (Tape ARchiver) ist ein Linux-Befehl mit dem man seine Daten und Verzeichnisse sichern kann. Er komprimiert auf Wunsch mit Hilfe von gzip oder bzip2.

Inhalt

1. Verwendung

Tar-Datei erstellen: tar cvzf zieldatei.tar.gz Quellverzeichnis/

Wer bzip2 zum Komprimieren verwendet, sollte seine Dateien sinnvollerweise *.tar.bz2 nennen. Für tar-gzip Archive ist auch *.tgz häufig in Verwendung.

Tar-Datei Inhalt anzeigen: tar tvzf Dateiname.tar.gz

less Dateiname.tar.gz
less Dateiname.tar.bz2

Tar-Datei entpacken: tar xvzf Dateiname.tar.gz [zuentpackendeDatei] (bei gzip) oder tar xvjf Dateiname.tar.bz2 (bei bzip2)

2. Tipps

3. Praktische Beispielanwendungen

3.1. Verzeichnis mit allen Unterverzeichnissen auf Disketten sichern

3.2. Komplettes System auf andere Partition/Festplatte umkopieren oder sichern

Ähnlich wie Partition Image aber auf Datei-Ebene.

  1. Computer von Rescue CD/Floppy/ starten. (Damit die Dateisysteme nicht in Verwendung sind)
  2. Quell Root-Partition auf /mnt/alt mounten (ggf. auch weitere einzubeziehende separate Partitionen wie /usr etc. darunter einhängen) und formatierte Zielpartition auf /mnt/neu.
  3. In Quell Verzeichnis gehen:  cd /mnt/alt 

  4. Folgender Befehl erzeugt nun in /mnt/neu genau die gleichen Daten wie unterhalb des aktuellen Verzeichnisses:
    tar -cSp --numeric-owner --atime-preserve -f - . | ( cd /mnt/neu && tar -xSpv --atime-preserve -f - )
    • Dabei gelten folgene Bedeutungen
    • -c create archive
    • S beachtung von sparse files.
    • p preserve permissions
    • --numeric-owner Verwendung der UIDs des Dateisystems und nicht der gerade gültigen Benutzernamen.
    • --atime-preserve Zeit des letzen Zugriffs beim Kopieren nicht ändern.
    • "-f -" Option -f gibt die Ziel/Quelldatei an, "-" bedeutet Standard Ein/Ausgabe (je nach dem ob gerade c oder x angegeben ist).
    • "." Aktuelles Verzeichnis wird eingepackt.
    • | Die Standardausgabe des letzten Befehls wird an die Standardeingabe des nächsten Befehls geleitet (gepiped)
    • In den Klammern wird das Verzeichnis gewechselt und die reingepipeten Daten wieder ausgepackt (tar -xSp)
    • v sorgt zusätzlich für die Anzeige des Dateinamens, der gerade ausgepackt wird.
  5. /mnt/neu/etc/fstab auf die zukünftigen Verhältnisse anpassen.
  6. Bootloader Konfiguration anpassen (/mnt/neu/etc/lilo.conf oder grub) und neu schreiben.

Zum Sichern nur den ersten tar Befehl verwenden und einen Dateinamen anstatt - für die Standardausgabe angeben.

3.3. Homeverzeichnisse sichern und (in anderes System) einspielen

Sichern:

  1. root werden: su

  2. In das zu sichernde Verzeichnis gehen:  cd /home 

    tar -cSpv --atime-preserve -f /Sicherungverzeichnis/home.tar .
    • Hier werden im Archiv die Benutzernamen verwendet (Standard), so das die Daten auch in einem anderem System eingespielt werden können, vorausgesetzt die verwendeten Benutzernamen sind dort vorher angelegt worden.

Zum Wiederherstellen (nach Neuinstallation und anlegen der Benutzer):

  1. Neu angelegte (und bis auf Vorkonfigurationen leere) Homeverzeichnisse verschieben. (z.B.  mv /home/* /home/neu.angelegte/ )

  2. In Zielverzeichnis wechseln:  cd /home 

     tar -xSpv --atime-preserve -f /Sicherungsverzeichnis/home.tar
  3. Vorkonfigurierte Konfigurationsdateien unter /home/neu.angelegte auf wichtige zu übernehmende Neuerungen überprüfen.

3.4. Einzelne Unterverzeichnisse ( Datei-Typen ) ausschließen

dazu gibt es den Parameter -X

nun eine Datei erstellen, die untereinander alle Unterordner und/oder Dateien anzeigt, welche nicht mit gesichert werden sollen.

Außerdem lassen sich einzelne Dateien oder Dateiarten mittels des Parameters "--exclude=" ausschließen. Dabei darf der Platzhalter "*" beliebig eingesetzt werden.

tar cvfz /data/archiv/Sicherungsdatei.tgz /home/MyLogin --exclude=*.log

4. Inkrementelle Backups

Hintergrund: Je öfter ein Rechner gesichert wird, desto besser! Wenn jedes Mal eine Vollsicherung gefahren würde, würden sehr schnell ungeheure Datenmengen zusammen kommen. Aber wozu? Reicht es nicht, einmal eine Vollsicherung zu machen und dann jeweils nur die Unterschiede zu dieser Sicherung zu sichern? Ja es reicht! So was nennt sich ein differenzielles Backup. Hier wird jede Änderung im Dateisystem gesichert. Ändert sich also eine Datei, so wird sie neu gesichert, wird sie gelöscht, so wird auch dies in einem differenziellen Backup vermerkt. Jetzt die schlechte Nachricht: So was können nur umfangreiche Backup-Umgebungen - tar leider nicht! Was tar aber sehr wohl kann, sind inkrementelle Backups. Diese funktionieren ähnlich wie differenzielle Backups, es werden auch alle geänderte sowie neue Dateien gesichert, wird eine Datei gelöscht, so hat dies jedoch keine Auswirkungen im Backup. Für inkrementelle Backups ist nur ein Bruchteil des Platzes von kompletten Backups nötig. Fiktives Beispiel: komplettes Backup: 5000 MB, inkrementelles Backup nach einem Tag: 10 MB - und dann muss sich schon sehr viel geändert haben! Es ist zu beachten, dass ein inkrementelles Backup ohne das zugehörige Vollbackup natürlich wertlos ist!

So, wie geht das nun: tar kennt den Schalter '-g', mit dem ein Log aller Verzeichnisse mit Prüfsummen angelegt wird. Anhand dieser Prüfsummen entscheidet tar dann später, welche Dateien bei einem inkrementellen Backup zu sichern sind. Ausgangspunkt ist das /home Verzeichnis, das gesichert werden soll. Die Archive und die Logs landen in /backup:

#Zuerst eine Vollsicherung:
tar -c -f /backup/vollbackup.tar -g /backup/backup.log .

So, jetzt ist das Backup von /home und die zugehörige Logdatei /backup/backup.log komplett. Jetzt kann ein inkrementelles Backup erstellt werden:

#jetzt eine inkrementelle Sicherung
cp /backup/backup.log /backup/backup.log.level1
tar -c -f /backup/inkrementell.tar -g /backup/backup.log.level1 .

Da nun die Datei backup.log.level1 existiert, sichert tar nur noch die Änderungen, in dem es die Prüfsummen des Logs mit den Prüfsummen aller zu sichernden Verzeichnisse vergleicht.

Generell ist bei inkrementellen Sicherungen darauf zu achten, dass diese nie aufeinander aufbauen, sondern sich immer auf das letzte Vollbackup beziehen sollten. Bauen sie aufeinander auf und eine inkrementelle Sicherung ist durch einen Fehler nicht mehr zu gebrauchen, sind auch alle folgenden Sicherungen wertlos. Da das inkrementelle Backup die Datei backup.log verändert und so eine weitere inkrementelle Sicherung auf der letzten inkrementellen aufbauen würde, wurde die Datei zuvor kopiert. Möchte man eine weitere inkrementelle Sicherung anlegen, so ist lediglich das Log wieder entsprechend zu kopieren.

Soll eine neue Vollsicherung angelegt werden, ist lediglich dafür zu sorgen, dass die Datei backup.log zuvor gelöscht wird. Sie wird dann von tar mit aktuellen Werten neu angelegt. Wurde ein neues Vollbackup gemacht, sind natürlich alle vorhergehenden inkrementellen Backups überflüssig und auch wertlos und können gelöscht werden.

Gleiches funktioniert natürlich auch wie gewohnt mit Bandlaufwerken oder komprimierten Archiven!

5. Tuning

Vor allem bei DLT- und anderen schnellen SCSI-Bandlaufwerken gibt es oft das Problem, dass das Laufwerk das Wienern anfängt (engl.: "shoe-shining", also Band läuft, stoppt, zurück, läuft, stoppt, zurück, ...), was die Transferrate ziemlich runter drückt und auch für das Laufwerk etwas stressig ist.

Praxis-Resultat: Sicherung läuft in ca. 3 statt in ca. 9 Stunden durch.

/!\ Wenn man viele kleine Dateien sichert, sollte man die Recordgröße nicht zu groß machen, da jede Datei mindestens einen Record belegt.

In LinuxKernel 2.4.22 ist ein Fix für st.c enthalten, der die Bandende-Behandlung verbessert - vorher konnte es üble Crashs geben.

6. Problembehebung

7. Pitfall

8. Einsatzhinweise

Immer wieder in Diskussion ist der Schwachpunkt, dass bei gezippten Archiven die Gefahr eines totalen Datenverlustes gegeben ist, sobald das Archiv geringste Fehler aufweist. Dies kann z.B. bei Bandlaufwerken recht schnell passieren, wenn Daten nicht mehr korrekt eingelesen werden können. Das Problem liegt darin begründet, dass das komplette Archiv gepackt wird. Ein einzelner Bitfehler kann unter Umständen dazu führen, dass das ganze Archiv nicht mehr entpackt und damit keine einzige Datei wieder hergestellt werden kann.

Oft wird deshalb für Backups dazu geraten, afio einzusetzen. Hier wird jede Datei einzeln gepackt, sodass ein Bitfehler sich immer nur auf eine Datei auswirkt. Die Chancen, bei Bitfehlern, Dateien wieder herzustellen, ist bei Verwendung von afio also wesentlich größer. Andererseits ist tar ein so weit verbreitetes Werkzeug und auf so vielen Plattformen verfügbar, das ich es als das Archivformat schlechthin bezeichnen würde. Schlechthin vielleicht auch im wortwörtlichen Sinne: Nicht optimal aber einfach unglaublich weit verbreitet. Die weite Verbreitung zeigt, dass das Problem nicht so ernst sein kann, dass alle umstellen würden. Kommt noch hinzu: Wenn man Archive verschlüsselt, geht eh wieder der Vorteil von afio verloren. Es sei denn, man würde jede Datei einzeln verschlüsseln. Das ist aber oft nicht sinnvoll, weil man ja auch die Dateinamen und Verzeichniss-Struktur verschlüsselt ablegen möchte. -- WinfriedMueller

Neue Erkenntnisse (21.03.2005): Auch bei einem mit gzip-gepackten tar-Archiv ist ein Restore gut möglich, auch wenn einzelne Bytes oder Sektoren defekt sind. Gzip packt Daten in 64KB lange Blöcke. Man kann also immer beim nächsten intakten Block wieder neu aufsetzen. Es fehlen dann lediglich 64KB lange Stücke. Alle Blöcke, die intakt sind, können auch wiederhergestellt werden. Man muss nur herausfinden, wo genau ein neuer Block beginnt. Danach muss man im tar-Archiv schauen, wo dort das nächste File beginnt, um dort aufzusetzen. Damit kann man also sagen, sind tgz-Archive für Backups recht sicher, auch wenn mal Sektoren defekt sind.

Bei bzip sieht es etwas problematischer aus, hier ist die Blockgröße 900KB, es würden dort also wesentlich größere Lücken entstehen, die sich nicht wieder herstellen lassen. Jedoch kann man mit dem Parameter -1 diese auf 100KB runtersetzen.

Auch verschlüsselte Archive sind gut wieder herstellbar, wenn Sektoren defekt sind. Zumindest wenn man aespipe zum Verschlüsseln einsetzt. Der Algorithmus ist hier so, dass bei jedem Sektor wieder neu aufgesetzt werden kann. Defekte Sektoren können also einfach ausgespart werden. Jeder 512-Byte Sektor wird sozusagen getrennt verschlüsselt. Wenn man also Archive verschlüsseln will, sollte man Verschlüsselungswerkzeuge einsetzen, die nicht versagen, wenn mal ein paar Sektoren defekt sind. -- WinfriedMueller

Übrigens: tar schreibt keine Checksumme über die Daten. Das bedeutet, dass Fehler in Archiven, solange sie nicht den jeweiligen File-Header betreffen, nicht erkannt werden. Gzip dagegen legt eine CRC-Checksum über jeden Block an, somit bekommt man immer mit, wenn Bitfehler auftreten. Gezippte tar-Archive haben hier also einen Vorteil. (siehe auch: http://en.wikipedia.org/wiki/Tar_file_format) -- WinfriedMueller

9. Vor- und Nachteile gegenüber vergleichbaren Programmen

10. Fragen

Frage: Kann es passieren, dass durch tar Umlaute in Dateinamen verloren gehen können oder verstümmelt werden? Oder kann ich mich drauf verlassen, dass umlautmäßig immer alles ok geht, wenn ich eine Platte mit tar sichere und dann wiederherstelle?

Frage: Wie kann ich Archive auf z.B. 4.4 GB Größe beschränken?

Frage: Wie greife ich auf ein nicht komprimiertes Archiv z.B. des Verzeichnisses /etc auf dem Bandlaufwerk /dev/nst0 bzw. stelle eine Datei wieder her?

Frage: Was bedeutet die Fehlermeldung: "tar: /dev/nst0: Cannot read: Cannot allocate memory" / "tar: At beginning of tape, quitting now" / "tar: Error is not recoverable: exiting now" ??? Wie kann ich sehen, ob überhaupt auf dem Band was gespeichert ist? Mit "tar t /dev/nst0" bekomme ich gar keine Meldung!?!?

KategorieDatensicherung KategorieAnleitung

tar (zuletzt geändert am 2011-02-18 18:11:55 durch mail)