Welches Tar-Dateiformat soll ich verwenden?

8

tar kann das Archiv in verschiedenen Formaten erstellen. GNU Teer, Ustar, Pax, v7. Was wäre das Beste für eine Langzeitarchivierung? Gibt es signifikante Unterschiede in diesen Formaten?

Ich würde das beste Format für allgemeine Sicherungen verwenden, und ich möchte nicht, dass ich die Daten möglicherweise extrahieren kann, da Formatprobleme auftreten. (v7 verschwindet zum Beispiel aus der Implementierung)

Glendyr
quelle

Antworten:

7

Das GNU-Tar-Handbuch enthält tatsächlich einen ganzen Abschnitt, der den Tar-Archivformaten gewidmet ist . Die Formate ustarund paxbasieren auf POSIX-Standards und gnusind sehr verbreitet. Ich würde mich von den anderen fernhalten.

Mein Vorschlag wäre zu wählenpax , das ist POSIX.1-2001 . GNU tar macht es in Zukunft zum Standard und selbst alte ustarImplementierungen können es dekomprimieren. Es ist auch das am wenigsten einschränkende Format.

Sie können POSIX.1-2001- Archive erstellen, z. B. mit GNU tar durch Angabe --format paxoder mit einem separaten Pax-Archivierer .

StackExchange macht Dancek traurig
quelle
1
Paradoxerweise unterstützt Keith Mullers Dienstprogramm pax (1), das üblicherweise unter BSD und Linux verwendet wird, das POSIX-2001- paxFormat nicht! In der Zwischenzeit unterstützt BSD pax (1) POSIX.1-1988 ustarund cpioGNU und BSD tar (1) unterstützen das POSIX-2001- paxFormat.
Alex Shpilkin
4

Einige technische Vergleiche unter v7, ustarund paxFormate:

v7

Das Format vor POSIX.1-1988.

  • Die maximale Länge eines Dateinamens beträgt 99 Zeichen. (100 Bytes minus ein abschließendes Nullbyte.)
  • Die maximale Länge eines Linkziels beträgt 99 Zeichen.
  • Zulässige Dateitypen: reguläre Datei (Typeflag '\0'), Verzeichnis, Hardlink (Typeflag 1), symbolischer Link (Typeflag 2). Verzeichnis wird durch den Schrägstrich in dem identifizierten Namen Feld. Referenz 1
  • Die maximale Dateigröße beträgt 8589934591 Byte (8 GiB - 1).
  • Speichert numerische Benutzer-IDs und Gruppen-IDs. Speichert keine Benutzer- und Gruppennamen. Die maximale UID und GID beträgt 2097151 (oktal 7777777).
  • Speichert die Änderungszeit. Der maximal zulässige Zeitstempel im Format beträgt 2242-03-16 12:56:31 UTC (8589934591 Sekunden seit der Epoche). Teerleser können sie jedoch aufgrund des Problems des Jahres 2038 in 32-Bit-Systemen möglicherweise nicht erkennen .

ustar

ustar erweitert den Headerblock aus dem v7-Format, und wenn es nicht komprimiert ist, ist die Größe eines ustar-Tarballs identisch mit der von v7-Tarball. Es gibt keinen großen Grund, das v7-Format zu bevorzugen, es sei denn, Sie entfernen absichtlich Informationen, die ustar archivieren würde.

  • Die maximale Länge eines Dateinamens beträgt 256 ASCII-Zeichen, wenn der Pfad perfekt in ein 155-Byte- Präfix , einen Schrägstrich und einen 100-Byte- Namensteil aufgeteilt werden kann . ustar bietet zusätzlichen Präfix Feld zusätzliche Komponenten des Wegs zum Speichern, aber die Felder haben Split auf den Verzeichnis - Separatoren sein, so dass Sie nicht erlaubt sind länger einen Dateinamen zu haben , als 100 Bytes, noch einen Verzeichnisnamen länger als 155 Bytes.
  • Die maximale Länge eines Linkziels beträgt 100 Zeichen. (Dh es ist nicht mehr erforderlich, das Null-Byte zu beenden.)
  • Zulässige Dateitypen: reguläre Datei (Typflag '\0'oder 0), Verzeichnis (mit Typflag markiert 5), fester Link, symbolischer Link, Zeichengerät ( 3), Blockgerät ( 4), FIFO ( 6). (Vendor Erweiterungen auf Dateitypen werden in erlaubt Adurch Z.)
  • Maximale Dur und Moll- Zahlen für Gerätedateien sind beide 2097151 (Oktal 7777777).
  • Speichert Benutzer- und Gruppennamen sowie UID und GID. Benutzer- und Gruppennamen sind in ASCII und enthalten jeweils maximal 32 Zeichen.
  • Das Dateigrößenlimit, das UID / GID-Limit und das Zeitstempellimit bleiben dieselben wie im v7-Format.

ustar weist geringfügige, abwärtskompatible Unterschiede zum vorstandardisierten v7-Format auf - den Typflags 0und 5für reguläre Dateien bzw. Verzeichnisse. In Version 7 gibt das Typflag- Feld nur Links und keine anderen Dateitypen an.

pax

pax erweitert das ustar-Format um (optionale) Extended-Header-Blöcke. Diese Extended-Header sehen beim Extrahieren durch alte Tar-Programme wie normale Textdateien aus. Die erweiterten Header werden intern mit Typflags x(erweiterter Datei-Header) und g(globaler erweiterter Header) identifiziert . Ihre unbegrenzte Erweiterbarkeit bedeutet auch, dass Pax Tarball normalerweise größer als Ustar ist. Es ist gut für die Archivierung, aber ein bisschen aufgebläht für ein Format für die Softwareverteilung.

pax ist eine Obermenge des Ustar-Formats - ein Pax-Tarball unterscheidet sich nicht von Ustar, wenn alle erweiterten Header entfernt werden.

Sie können lesen , diese für das, was in pax - Format erweitert werden. Aber im Vergleich zu Ustar zusammenfassend:

  • Dateinamen und Pfadnamen können unbegrenzt lang sein (über das path=Schlüsselwort im erweiterten Header).
  • Linkziele können unbegrenzt lang sein ( linkpath=Schlüsselwort)
  • size(Dateigröße), uid(Benutzer-ID), uname(Benutzername), gid(Gruppen-ID), gname(Gruppenname) sind alle auf unbegrenzte Länge erweiterbar.
  • UTF-8 - Kodierung für die path, linkpath, unameund gname.
  • Zeitstempel ermöglichen eine Genauigkeit von weniger als einer Sekunde und möglicherweise eine unbegrenzte Länge, können jedoch (noch) keine Schaltsekunden speichern , da das Format "Anzahl der Sekunden seit der Epoche" lautet . Sekundenbruchteile sind dezimal.
  • Die Dateizugriffszeit ( atime) kann zusammen mit der Änderungszeit ( mtime) gespeichert werden .

Hinweis: POSIX schreibt kein Dateinamenmuster zum Speichern erweiterter Header vor, sodass Implementierungen frei sind, beliebige Namensmuster zu erstellen. In GNU tar wird beispielsweise das Namensmuster über die --pax-option=exthdr.name=Option gesteuert . Wenn Sie vorhaben, einen deterministischen Tarball (unter tar/ paxImplementierungen) zu erstellen , achten Sie darauf.

Gnu- und Oldgnu-Formate

Laut GNU-Teerhandbuch basierte GNU-Teer auf dem frühen Entwurf des POSIX.1- ustarStandards. Aber GNU-Erweiterungen tarmachen es mit dem ustarFormat inkompatibel . Wenn Sie ein tragbares Archiv machen wollen, sollten Sie GNU tar - Format vermeiden und die Gunst paxoder ustarstatt.

Das GNU-Teerformat kann mit dem magischen Feld (8 Bytes) von identifiziert werden ustar<space><space><nul>, verglichen mit den magischen Feldern und Versionsfeldern von ustar ustar<nul>00.

Das GNU-Tar-Format ist dennoch abwärtskompatibel mit dem v7-Format.

  • GNU tar hat eine unbegrenzte Länge für Dateinamen und Linkziele. Im Gegensatz ustardass Verwendungen Präfix den Pfad erstreckt, GNU tar speichert die langen Dateinamen in einem (nicht Pax) erweiterte Header - Feld, das typeflag hat L. In ähnlicher Weise werden Verknüpfungsziele durch einen erweiterten Header mit Typeflag erweitert K.
  • Das GNU-Tar-Format speichert atime (Zugriffszeit) und ctime (Statusänderungszeit) in zusätzlichen Header-Feldern zusammen mit mtime, das bereits im v7-Format verfügbar ist.
  • Das GNU-Tar-Format unterstützt zusätzliche Dateitypen im Vergleich zu ustar ( Referenz 2 ):
    • Verzeichnis in inkrementeller Sicherung ( "dumpdir" , typeflag D). Siehe GNU-Teeroption --incremental.
    • Fortsetzung der Dateidaten für ein mehrbändiges Archiv (Typeflag M). Siehe GNU-Teeroption --multi-volume.
    • Sparse-Datei (Typflag S).
    • Volume-Header (Typeflag V) oder eine Bezeichnung für das Archiv-Volume. Siehe GNU-Teeroption --label.
  • Der Unterschied zwischen den Formaten oldgnu(GNU tar <= 1.12) und gnu(GNU tar> = 1.13.12) ist für Endbenutzer gering, jedoch gemäß Handbuch und create.c und NEWS aus dem Quellcode gibt es mindestens zwei Unterschiede:
    • oldgnuDas Format beendet die Dateinamen, Benutzernamen und Gruppennamen der Zeichenfolgen immer mit Null-Bytes. (Dies bedeutet, dass Dateinamen maximal 99 Zeichen enthalten, bevor ein erweiterter Header verwendet wird.)
    • GNU 1.13.12 und höher kann versuchen, die Felder uid , gid , mtime , devmajor und devminor zu "quetschen" , indem sie in vorzeichenbehafteten Big-Endian-Binärzahlen ausgegeben werden, wenn sie zu groß sind, um in ASCII-Oktalen innerhalb der Felder dargestellt zu werden. Dadurch wird die maximale UID- und GID-Grenze auf [-2 ^ 56, 2 ^ 56-1] und die Haupt- und Nebenzahlen des Geräts auf [-2 ^ 56, 2 ^ 56-1] erhöht. (Die Darstellungen im Quellcode reservieren einige Bits, um Kollisionen mit der ASCII-Darstellung zu verhindern.)
Explorer09
quelle
1
Schaltsekunden sind für "Anzahl der Sekunden seit der Epoche" irrelevant.
Michael Hampton
0

pax ist POSIX-konform ... Allerdings verwende ich nur tar, tar + gz und tar + bz2

JeffG
quelle
0

tar.gz ist der ziemlich normale.

tar archiviert alle Dateien in einer einzigen Datei, wie z. B. .iso, komprimiert diese jedoch nicht.

gzip (gz) komprimiert die TAR-Dateien.

Die * nix-Befehlszeile, um dies auszuführen, lautet:

tar -pczf name-of-new-archive.tar.gz /path/of/the/directory
Hyppy
quelle
tar -zcvf name-of-new-archive.tar.gz /path/of/the/directory
JeffG
Für Sicherungszwecke (wie im Q angegeben) verwenden wir im Allgemeinen -p, um die Aufbewahrung von Berechtigungen zu aktivieren. Das von Ihnen erwähnte -v ist optional, eignet sich jedoch für Protokollierungszwecke in automatisierten Prozessen.
Hyppy
1
@hyppy tar speichert immer Berechtigungen in seinem Archiv. Das -p wird beim Extrahieren verwendet, um sie beim Neuerstellen der Dateien beizubehalten.
Pinguin359