Was sind die Unterschiede zwischen BSDTAR und GNU TAR?

46

Ich habe immer GNU verwendet tar. Alle GNU / Linux-Distributionen, die ich gesehen habe, werden jedoch bsdtarin ihren Repositorys ausgeliefert. Ich habe sogar gesehen, dass es in einigen, IIRC, standardmäßig installiert ist. Ich weiß mit Sicherheit, dass Arch GNU / Linux es als Teil von basedevel(vielleicht base, aber ich bin mir nicht sicher) benötigt, wie ich es in PKGBUILDs gesehen habe.

Warum sollten Sie bsdtaranstelle von GNU verwenden tar? Was sind die Vorteile?

Beachten Sie, dass ich die Person bin, die gefragt hat: Was sind die Hauptunterschiede zwischen BSD und GNU / Linux Userland? .

strugee
quelle

Antworten:

29

Das Ubuntu bsdtarist eigentlich die Tar-Implementierung, mit der es gebündelt ist libarchive. und das sollte von der klassischen unterschieden werden bsdtar. Einige BSD-Varianten verwenden sie libarchivefür ihre Tar-Implementierung, zB FreeBSD.

GNUtarunterstützt die anderen Teervarianten und die automatische Komprimierungserkennung.

Als Visualisierung den Klappentext von Ubuntu eingefügt hat, gibt es einige Dinge, die spezifisch sind für libarchive:

  1. libarchiveist per definitionem eine bibliothek und unterscheidet sich sowohl klassisch bsdtarals auch GNUtarauf diese weise.
  2. libarchive Einige ältere obskure GNU-Tar-Variationen konnten nicht gelesen werden. Am bemerkenswertesten war die Codierung einiger Header in base64, sodass die Tar-Datei 7-Bit-Clean-ASCII lautete (dies war für 1.13.6-1.13.11 der Fall und wurde in 1.13.12 geändert) , dieser Code war offiziell nur für 2 Wochen in Teer)
  3. libarchive‚s bsdtarwird nicht-tar - Dateien lesen (zB ZIP, ISO9660, cpio), aber klassischer bsdtar nicht.

Jetzt, da wir libarchiveaus dem Weg sind, kommt es hauptsächlich auf das an, was in der Klassik unterstützt wird bsdtar.

Sie können die Hilfeseiten hier selbst sehen:

In Ihrer ursprünglichen Frage haben Sie gefragt, was die Vorteile gegenüber der Klassik sind bsdtar, und ich bin nicht sicher, ob es wirklich welche gibt. Das einzige, was wirklich zählt, ist, wenn Sie versuchen, Shell-Skripte zu schreiben, die auf allen Systemen funktionieren müssen. Sie müssen sicherstellen, dass das, an das Sie übergeben, tarin allen Varianten tatsächlich gültig ist.

GNUtar, libarchive‚S bsdtar, klassisch bsdtar, starund BusyBox‘ s tarsind sicherlich die tar - Implementierungen , die Sie in den meisten Zeit laufen werden, aber ich bin sicher , es gibt andere , da draußen (frühen QNX zum Beispiel). libarchive/ GNUtar/ starSind die funktionsreiche, aber in vielerlei Hinsicht sie sind seit langem von den ursprünglichen Standards (möglicherweise zum Besseren) abgewichen.

robbat2
quelle
15

BSDTAR vs TAR und vieles mehr

Hier ist ein Vorteil !!

Ich gehe hier auf 5 Themen ein (und gehe weit vom Thema weg, aber es behandelt auch, was Sie wollen):

  1. bsdtar vs tar
  2. spärliche Dateien vs nicht
  3. dicke und dünne Dateien / Luns mit BTRFS
  4. dicke und dünne dateien / luns ohne btrfs
  5. Unterscheide zwischen dick und dünn und wie es nicht nur auf Luns zutrifft

bsdtar handhabt spärliche Dateien besser als normales tar

  • bsdtar wird alle Nullen aufnehmen und sie nur mit Metadaten versehen
  • TAR verarbeitet tatsächlich jede Null

* Beispiel: Stellen Sie sich eine 20-tb-Sparse-Datei (BigLun) mit 10 Megadaten in der 20-tb-Sparse-Datei (BigLun) vor. Da es sich um eine Sparse-Datei handelt, nimmt sie nur 10 Megadaten auf dem Laufwerk auf.

So erstellen Sie eine Sparse-Datei:

Sparse-Datei - wie man es macht - erkennt es - alles Sparse-Dateien sind wie "dünne" Luns (wenn Sie es für eine Lun verwenden würden). "dicke" Luns wären eine andere Geschichte.

* zurück zum Thema:

  • Das Tarieren des Bigluns wird dazu führen, dass der Teer alle 10 Megabyte durchläuft, zusammen mit all den ~ 20-tb-Nullen, die über den Lun verteilt sind. Ich nehme an, es wird einige Zeit dauern, und die Teerdatei wird ziemlich groß sein. Außerdem - extrahiere ich es - habe ich noch nie eine Teer-Datei aus einer spärlichen Datei extrahiert, aber es könnte nicht schön sein; Ich könnte mich hier irren.

  • bsdtarring the biglun verarbeitet nur die 10-Megabyte-Daten und erstellt kleine Metadaten für die ~ 20-TB-Nullen.

Vorteil? Nun, viele von ihnen; Ich habe oben nur ein paar geschrieben.

Es ist ähnlich wie rsync vs cp

  • Wenn Sie eine Riesen-Sparse-Datei synchronisieren, verhält sich diese ebenfalls wie tar
  • Wenn Sie eine riesige Datei cp, verhält sie sich automatisch wie bsdtar (Sie können das Verhalten von cp ändern, um die Nullen zu überschreiten oder nicht).

Persönlich stelle ich mir gerne spärliche Dateien wie dünne Luns und normale Dateien wie dicke Luns vor ...

Das nächste Thema ist BTRFS Thin vs Thick Luns:

  • Bei Dateisystemen wie BTRFS sind Thin Luns spärliche Dateien (machen Sie es mit Truncate, wie im Wiki-Dokument).

     truncate -s <size in kilobytes> filename
    

    tipp : sichern mit bsdtar , kopieren mit cp

  • Thick-Luns sind reguläre Dateien mit dem Attribut + C (+ C, damit es keine COW gibt, beim Schreiben kopieren, damit alle Schreibvorgänge im Wesentlichen an der Stelle bleiben, an der sie zugewiesen sind. Beim Überschreiben werden für diese Datei keine neuen Schreibvorgänge ausgeführt oder löscht - Forschung COW und BTRFS ). Anstatt die Datei mit Truncate zu erstellen, erstellen Sie sie mit "fallocate -l".

    fallocate -l <size in kilobytes> filename
    chattr +C filename
    

    tipp : sichern mit bsdtar oder tar, kopieren mit rsync oder cp

Das nächste Thema ist EXT Thin vs Thick Luns:

  • dünne luns, die spärlich sind

    truncate -s <size in kilobytes> filename
    

    tipp : sichern mit bsdtar , kopieren mit cp

  • Thick-Luns sind reguläre Dateien mit dem Attribut + C (+ C, damit es keine COW gibt, beim Schreiben kopieren, sodass alle Schreibvorgänge im Wesentlichen an der zugewiesenen Position bleiben und keine neuen Schreibvorgänge für diese Datei stattfinden, wenn Überschreibungen vorliegen oder löscht - Forschung COW und BTRFS ). Anstatt die Datei mit Truncate zu erstellen, erstellen Sie sie mit "fallocate -l".

    touch filename
    fallocate -l <size in kilobytes> filename
    

    tipp : sichern mit bsdtar oder tar, kopieren mit rsync oder cp

Was ist eine dicke vs dünne Datei

  • dicke Luns / Dateien, füllen ihre Daten von 0 bis zur zugewiesenen Größe auf, Metadaten geben vor, wo die 0en sind. Wenn Sie Daten auffüllen, werden die Daten aufgefüllt
  • dicke Luns / Dateien: Füllen Sie ihre Daten am Anfang mit 0en oder was auch immer (träge Null oder eifrige Null) - diese setzen Reservierungen (oder wie ZFS gerne Aktualisierungen aufrufen)

In VMWARE ARTIKEL HIER wird Faul gegen Eifrige Null mit dicken Luns / Dateien beschrieben: https://communities.vmware.com/message/2199576

Spitze

Denken Sie daran, dass dick und dünn nicht nur für Luns gilt, sondern auch für Dateien, zfs-Dateisysteme (Shares / Volumes / Luns) und andere Dinge (siehe zfs).

Kobbsoss
quelle
1
Schön und gründlich. Willkommen auf der Seite ...
eyoung100
1
- Mit jedem Teer sparsam umgehen: Übergeben Sie einfach -S an die meisten Teerimplementierungen, alle haben es schon lange unterstützt. - Mit rsync sparsam umgehen: Nochmals, pass --sparse, es funktioniert. Der Nachteil bei der Verwendung einer spärlichen Erkennung besteht darin, dass das Tool die Blöcke tatsächlich mehr lesen muss, was viel CPU einbringen kann (insbesondere in Fällen von abwechselnden Null- / Nicht-Null-Läufen).
robbat2
Es ist immer noch besser, bsdtar zu verwenden, obwohl gnu tar das Sparse-Flag unterstützt, weil bsdtar weiß, wie man spärliche Löcher überspringt, ohne sie zu verarbeiten (z. B. wenn Sie eine 1 TB-Sparse-Datei mit nur 1 KB Daten haben, verarbeitet bsdtar 1 KB Daten Gnu Teer wird 1 TB verarbeiten.
moveaway00
13

Aus der Ubuntu-Paketbeschreibung ( http://packages.ubuntu.com/de/lucid/bsdtar )

"Das bsdtar-Programm hat eine Reihe von Vorteilen gegenüber früheren tar-Implementierungen:

  • Bibliothek. Da sich die Kernfunktionalität in einer Bibliothek befindet, kann sie von anderen Tools wie pkg_add verwendet werden.
  • Automatische Formaterkennung. Libarchive erkennt beim Lesen von Archiven automatisch die Komprimierung (none / gzip / bzip2) und das Format (altes tar, ustar, gnutar, pax, cpio, iso9660, zip). Dies geschieht für jede Datenquelle.
  • Pax Interchange Format-Unterstützung. Dies ist eine POSIX / SUSv3-Erweiterung des alten "ustar" -Tar-Formats, die jedem Eintrag beliebige erweiterte Attribute hinzufügt. Tut alles, was das GNU-Tar-Format macht, nur besser.
  • Verarbeitet Dateiflags, ACLs, beliebige Pfadnamen usw. Das Pax-Austauschformat unterstützt Schlüssel- / Wertattribute mithilfe einer einfach erweiterbaren Technik. Beliebige Pfadnamen, Gruppennamen, Benutzernamen und Dateigrößen sind Teil des POSIX-Standards. libarchive erweitert dies mit Unterstützung für Dateiflags, ACLs und beliebige Gerätenummern.
  • GNU-Tar-Unterstützung. Libarchive liest die meisten GNU-Tar-Archive. Bei Bedarf kann dies weiter verbessert werden. "
Visualisierung
quelle
1

Das Folgende basiert auf Lesen, nicht auf Erfahrung - ich fange gerade mit Freebsd an, daher habe ich fast keine wirkliche Erfahrung damit (ich komme hauptsächlich von Linux). Ich entschuldige mich (und bitte demütig um Korrektur), wenn ich etwas Wichtiges verpasst habe und was ich hier sage, ist Müll ...

Aus meiner Lektüre der Manualseiten (zuletzt die über http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ) geht hervor, dass dem Freebsd-Teer das (-d, --diff) fehlt , --vergleichen). Dies ist nicht verwunderlich, da die Autoren von Freebsd dump / restore anscheinend auch nichts dergleichen geliefert haben.

Ich weiß nicht mit Sicherheit, ob der Gnu-Teer alle UFS-Metadaten enthält, wie es Freebsd-Teer tun soll, und dies ist ein wichtiges Thema. Nach meinem Geschmack kann ich NIEMALS davon ausgehen, dass ein Speicherauszug abgeschlossen ist, bis ich eine MD5-Summe der Ausgabedatei gespeichert habe, UND DANN die Speicherauszugsdatei mit den Daten verglichen habe, die ich angeblich gerade gespeichert habe. Verschiedene Probleme können dazu führen, dass sich die gespeicherten Daten von denen auf der Festplatte unterscheiden. (Nicht nur Dateiänderungen, sondern auch Festplattenfehler, Speicherfehler, Maschinenfehler usw.)

Meiner Meinung nach ist Gnu tar die einzige Option, die ich bisher gefunden habe, um echte Backups auf einem Freebsd-Standardsystem zu erstellen.

Ich würde sehr gerne etwas anderes lernen, FWIW. Ich würde es vorziehen, die nativen Dienstprogramme zumindest für das Klonen von Partitionen und für Backups mit Hard Recovery zu verwenden. Aber wenn man die Richtigkeit eines Dumps nicht überprüfen kann, sehe ich keinen Grund darin, sich die Mühe zu machen, einen zu erstellen.

LOC
quelle
1
  • bsdtar kann mithilfe der @archiveSyntax Mitglieder aus anderen Archiven lesen und taren

  • GNU tar hat die --deleteOption - obwohl ich kürzlich festgestellt habe, dass es das Archiv beschädigen kann.

Bart
quelle