Diskussion:Tar

Aus Foxwiki

TMP

Backup mit tar

tar (tape archiver) verwaltet Dateiarchive

tar [-Acdrtux] [-delete] [-b N] [-BgGhiklmMoOpPPsSvwWz] [-C Verzeichnis] [-f Datei] [-F Datei][-K Datei] [-L Länge] [-N Datum] [-T Datei] [-V Name] [-X Datei] [0-7] [{lmh}]

tar ist ursprünglich ein Tool zur Verwaltung von Bandarchiven. Das GNU-tar kann aber auch auf ,,rohen`` Disketten oder in normalen Dateien Archive im tar Format anlegen und verwalten. Normalerweise werden Archive mit tar nicht komprimiert. Das GNU-tar kann aber die Ein- und Ausgabe durch einen Kompressor leiten. Die neuen Versionen (ab 1.11.2) unterstützen sowohl compress als auch gzip.

Wenn auf der Kommandozeile keine Datei und kein Gerät angegeben ist, versucht tar auf die Gerätedatei eines Magnetbandgerätes zuzugreifen. Je nach Konfiguration ist das meist /dev/tape oder /dev/rmt0. Sie können eine andere Voreinstellung wählen, indem Sie die Umgebungsvariable TAPE mit dem Pfadnamen der entsprechenden Gerätedatei belegen.

Optionen

Die Optionen können aus Gründen der Kompatibilität mit anderen, älteren Versionen von tar auch in Abweichung von den [../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node23.html#goldenrules POSIX-Regeln] ohne das für Optionen übliche Minuszeichen angegeben werden. tar interpretiert den ersten Kommandoparameter immer als Optionsblock. Optionsargumente müssen dann im Anschluß an den Optionsblock in der Reihenfolge angegeben werden, in der die Optionen im Optionsblock erscheinen.

Einige wenige spezielle Optionen des GNU-tar sind nicht als einfache Buchstabenoptionen erreichbar. Diese Schalter und Regler können Sie nur in der für GNU-Kommandos spezifischen verbalen Form erreichen.

-A hängt ein komplettes Archiv an ein anderes Archiv an (nicht für Magnetbänder)
-c erzeugt ein neues Archiv
-d vergleicht das Archiv mit dem Dateisystem
- -delete Datei löscht die Datei aus dem Archiv (nicht für Magnetbänder)
-r hängt Dateien an das Archiv an (nicht für Magnetbänder)
-t zeigt den Inhalt des Archivs
-u ersetzt Dateien, die neuer als eine bereits archivierte Version sind; ist eine Datei noch nicht archiviert, so wird sie eingefügt (nicht für Magnetbänder)
-x kopiert Datei oder alle Dateien aus dem Archiv
Weitere Optionen
-atime-preserve veranlaßt tar, die Zugriffszeit nach der Archivierung zurück zu setzen
-b N setzt die Blockgröße auf Nx512 Bytes (Voreinstellung ist N=20)
-B unterdrückt den Abbruch von tar beim Lesen unvollständiger Blöcke; zum Lesen von 4.2BSD Pipes
-C Verzeichnis wechselt während der Ausführung in das Verzeichnis, um von dort weitere Dateien zu archivieren
-f Datei benutzt Datei oder das damit verbundenen Gerät als Archiv
-F Datei bei mehrteiligen Archiven (Option -M) wird das Shellscript Datei ausgeführt, wenn das Medium voll ist
-G erzeugt am Anfang des Bandarchives einen speziellen Eintrag für jedes archivierte Verzeichnis; spezielles GNU Format
-g Datei erzeugt eine Datei mit einer Liste der archivierten Verzeichnisse als Zeitmarke der Archivierung; wenn die Datei bereits existiert, werden nur die Dateien archiviert, die nach dieser Zeitmarke erzeugt oder verändert wurden (spezielles GNU Format: 1. Zeile = Zeitmarke, 1. Feld = Nr. der Partition, 2. Feld = Inode des Verzeichnisses, 3. Feld = Name des Verzeichnisses)
-h archiviert die referenzierten Dateien anstelle der Links
-i ignoriert Blöcke mit Nullbytes im Archiv
-k existierende Dateien werden beim Auspacken von Archiven nicht überschrieben
-K Datei beginnt eine Aktion bei Datei im Archiv
-l verhindert Archivierung von Dateien aus anderen Dateisystemen
-L Länge wartet auf Medienwechsel nach Länge Bytes
-m das Datum der letzten Änderung wird nicht mitarchiviert
-M das Archiv ist auf mehrere Medien verteilt (Multi-Volume)
-N Datum archiviert nur Dateien, die neuer sind als Datum
-o benutzt das alte V7 tar-Format anstelle des ANSI Formates
-O schreibt die Dateien in die Standardausgabe
-p erhält die Zugriffsrechte der Dateien
-P archiviert mit absoluten Dateinamen
-R gibt zu jeder Meldung die Blocknummer des Archivblocks aus, von dem die Meldung verursacht wurde
-s zeigt an, daß die Liste von Dateien im Argument die gleiche Reihenfolge hat wie die Dateien im Archiv
-T Datei holt die Namen der zu archivierenden Dateien aus Datei
-v meldet jede Aktion
-V Name erzeugt ein Archiv mit dem (internen) Label Name
-w erwartet interaktiv Bestätigung jeder Aktion
-W verifiziert die geschriebenen Daten im Archiv
-X Datei liest aus der Datei Namen oder reguläre Ausdrücke vonoder für Dateien, die nicht archiviert werden sollen
-z erzeugt ein mit gzip komprimiertes Archiv
-Z erzeugt ein mit compress komprimiertes Archiv
-{0..7}{lmh} spezifiziert das Gerät und die Dichte des Speichermediums (für Diskettenarchive ohne Bedeutung); 0 ist der erste Streamer, 1 der zweite und so weiter; die Dichte bestimmt den Bandtyp

Beispiel

Der Tape Archiver ist das verbreitetste Werkzeug zur Datensicherung in Unix-Systemen. Ursprünglich rein zur Datenübertragung auf Bänder konzipiert, mit deren Hilfe der Datenaustausch zwischen verschiedenen Computern zu Zeiten fehlender Netzwerke ermöglicht werden sollte, hat sich gerade durch die Eignung von Bändern als Backupmedium das Programm quasi zum Standardwerkzeug für das Backup in kleineren Netzwerken etabliert, trotz des Fehlens einer brauchbaren Unterstützung von inkrementellen Backups.

Als Werkzeug zur Archivierung wurde tar im Kapitel Nutzerkommandos bereits vorgestellt.

  • Hier soll nun der Schwerpunkt auf den Einsatz des Kommandos zum Backup von Daten liegen.
tar [ OPTION... ] [ DATEI... ]

tar arbeitet auf Dateiebene, kann also beliebige Dateien und Verzeichnisse in eine einzige Zieldatei verpacken. Zieldatei kann dabei alles bedeuten, was unter Unix als Datei betrachtet wird, also ein Gerät, eine normale Datei, eine Pipe...

Die drei wichtigsten Optionen sind c zum Erzeugen eines Archivs, t zum Betrachten des Archivinhalts und x zum Entpacken desselben.

Volles Backup

tar wird alle angegebenen Dateien (oder rekursiv den Inhalt von Verzeichnissen) in ein Archiv verpacken. Per Voreinstellung versucht das Kommando das Archiv auf einen Streamer zu schreiben (/dev/tape oder /dev/rmt0), ist kein solcher im System installiert, schreibt tar das Ergebnis auf die Standardausgabe. Um das Archiv in einer Datei zu sichern, ist die Option -f Datei zu wählen.

Eine angenehme Eigenschaft ist der Umgang mit »Multivolumes« (Option -M) . Speichert man zum Beispiel das Archiv auf eine Diskette und reicht deren Speicherkapazität nicht aus, so fordert tar automatisch zum Wechsel des Mediums auf:

$ tar -Mcf /dev/fd0h1440 ~/Books/
tar: Removing leading `/' from absolute path names in the archive
Prepare volume #2 for /dev/fd0h1440 and hit return:
Prepare volume #3 for /dev/fd0h1440 and hit return:
Prepare volume #4 for /dev/fd0h1440 and hit return:

Im Beispiel schreibt tar die Daten auf eine (unformatierte) Diskette, weswegen dem Kommando genau mitgeteilt werden muss, wie groß die Speicherkapazität dieser ist (es ist das entsprechende Device anzugeben). Als erstes entfernt tar in allen Pfadnamen den führenden Slash (-P forciert die Verwendung absoluter Pfadnamen), so dass das Archiv bei einem späteren Entpacken an beliebiger Stelle im Dateisystem extrahiert werden kann - bei Beibehaltung der Verzeichnisstruktur. Nachfolgend wird der Benutzer zum Wechsel der Disketten aufgefordert. Alternativ zu »-M« kann mit -L Anzahl der Medienwechsel nach Archivierung von Anzahl Bytes erzwungen werden.

Es ist allerdings furchtbar uneffizient, das Archiv unkomprimiert abzulegen. tar kann zum Glück mit mehreren [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung Packern ]zusammen arbeiten. Mit -z wird das Archiv mit [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#gzip_-_Dateien_komprimieren gzip ]komprimiert; -Z nutzt das (veraltete) Werkzeug [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#compress_-_Dateien_komprimieren compress ]und -j (alt: -I) den derzeit effektivsten Packalgorithmus des Kommandos [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#bzip2_-_Dateien_komprimieren bzip2. ]Wurde ein Archiv einmal gepackt, ist bei allen weiteren Operationen die Option für den jeweiligen Packer anzugeben! Das Packen funktioniert allerdings nicht bei Multilevel-Archiven. Ein Ausweg wäre das »vorab«-Komprimieren einer jeden Datei (zum Beispiel mittels eines Skripts) mit anschließender Archivierung.

Inkrementelles Backup

tar unterstützt nur eine rudimentäre Variante des inkrementellen Backups, in dem Daten zur Archivierung ausgewählt werden können, die »neuer« als ein anzugebendes Datum sind. Das Datum (-n Datum) ist hierbei im Format »Jahr-Monat-Tag« anzugeben. Um zum Beispiel alle Dateien zu erfassen, die in den letzten 7 Tagen (ab aktuellem Zeitpunkt) modifiziert wurden, kann folgender Kommandoaufruf verwendet werden:

$ tar -n $(date -d "now 7 days ago" +%Y-%b-%d) -czf /tmp/backup.tgz ~/Books/

Im Beispiel wurde bewusst die etwas verwirrende Kalkulation des Datums mit Hilfe von [../../../../index.php%3Ftitle=Linuxfibel_-_Sytem-Administration_-_Zeit_und_Steuerung&action=edit date ]gewählt, da dessen Einsatz das Schreiben eines Skripts zum automatischen Erzeugen von inkrementellen Backups vereinfacht.

Überprüfung des Archives

Um sich von einer ordnungsgemäßen Archivierung zu überzeugen, sollte das resultierende Archiv einem Test unterzogen werden. Da der Slash automatisch entfernt wurde, ist zuvor ins Wurzelverzeichnis zu wechseln oder das Arbeitsverzeichnis mit -C Pfad zu ändern und (in Bezug auf obiges Beispiel) Folgendes aufzurufen:

$ tar -C / -d -f /dev/fd0h1440

tar überzeugt sich nun, dass alle Dateien des Archivs auch im Dateisystem existieren. Sobald eine Unstimmigkeit festgestellt wird, wird das Kommando den Fehler ausgeben:

Um einen Fehler zu provozieren, wurde eine Datei verschoben
$ tar -df /dev/fd0h1440
home/user/Books/linuxfibel.pdf: File does not exist
Recovery

Zu einem Backup gehört natürlich auch eine Möglichkeit, dieses wieder zurückzuspielen. Hier gelangt die Option -x (extract) zum Einsatz. Im Falle von relativen Pfadangaben im Archiv wird die Verzeichnisstruktur unterhalb des aktuellen Verzeichnisses erzeugt. Sie sollten also entweder zuvor ins Zielverzeichnis wechseln, oder dieses mit -C Pfad explizit angeben:

$ tar -C / -x -f /dev/fd0h1440

Handelt es sich um ein auf mehrere Medien verteiltes Archiv, muss die Option -M angegeben werden. tar fordert dann zum Medienwechsel auf.

Möchten Sie nur einzelne Dateien extrahieren, sind deren Namen mit vollständiger Pfadangabe auf der Kommandozeile anzugeben. Hier hilft eventuell die Option -t, um den korrekten Namen, so wie er im Archiv gespeichert ist, zu erfahren:

$ tar tf /dev/fd0h1440
home/user/Books/access.htm
home/user/Books/index.htm
home/user/Books/stuff.htm
home/user/Books/test.htm
...
$ tar -C / -x -f /dev/fd0h1440 home/user/Books/index.htm