Quelles sont les différences entre bsdtar et GNU tar?

46

J'ai toujours utilisé GNU tar. Cependant, toutes les distributions GNU / Linux que j'ai vues sont livrées bsdtardans leurs référentiels. Je l'ai même vu installé par défaut dans certains, IIRC. Je sais avec certitude que Arch GNU / Linux en a besoin basedevel(peut base- être , mais je ne suis pas sûr), comme je l’ai vu dans PKGBUILD.

Pourquoi voudriez-vous utiliser à la bsdtarplace de GNU tar? Quels sont les avantages?

Notez que je suis la personne qui a demandé Quelles sont les principales différences entre les versions BSD et GNU / Linux? .

combattant
la source
1
Cette réponse à Pourquoi l'extraction de ce tgz génère-t-il une erreur sur mon Mac mais pas sur Linux? sur Apple.SE est également pertinent pour cette question.
Adam Liter

Réponses:

29

Ubuntu bsdtarest en fait l’implémentation de tar fournie libarchive; et cela devrait être différencié du classique bsdtar. Certaines variantes de BSD utilisent libarchivepour leur implémentation tar, par exemple FreeBSD.

GNUtarprend en charge les autres variantes de tar et la détection de compression automatique.

Lorsque la visualisation est collée dans le texte de présentation d’Ubuntu, elle contient quelques éléments spécifiques libarchive:

  1. libarchiveest par définition une bibliothèque, et différente du classique bsdtaret GNUtarde cette manière.
  2. libarchive ne peut pas lire certaines versions plus anciennes obscures de GNU, le plus notable était le codage de certains en-têtes en base64, de sorte que le fichier tar soit au format ASCII propre 7 bits (c'était le cas pour 1.13.6-1.13.11 et modifié dans 1.13.12 , ce code n'était officiellement dans le goudron que pendant 2 semaines)
  3. libarchive's bsdtarlira les fichiers non-tar (par exemple, zip, iso9660, cpio), mais pas bsdtar classique.

Maintenant que nous sommes libarchivesortis du processus, cela revient essentiellement à ce qui est supporté en classique bsdtar.

Vous pouvez voir les pages de manuel vous-même ici:

Dans votre question initiale, vous avez demandé quels sont les avantages du classique bsdtar, et je ne suis pas sûr qu'il y en ait vraiment. La seule fois que cela compte vraiment, c’est si vous essayez d’écrire des scripts shell qui doivent fonctionner sur tous les systèmes; vous devez vous assurer que ce que vous passez à tarest réellement valable dans toutes les variantes.

GNUtar, libarchive« S bsdtar, classique bsdtar, staret BusyBox» s tarsont certainement les implémentations de goudron que vous tomberez dans la plupart du temps, mais je suis certain qu'il y en a d' autres là - bas (début QNX par exemple). libarchive/ GNUtar/ starsont les plus riches en fonctionnalités, mais à bien des égards, ils ont longtemps dévié des normes d'origine (peut-être pour le mieux).

robbat2
la source
15

BSDTAR vs TAR et bien plus encore

Voici un avantage !!

Je vais entrer dans 5 sujets ici (et aller très loin du sujet, mais cela couvrira aussi ce que vous voulez):

  1. bsdtar vs tar
  2. fichiers rares vs pas
  3. Limes / Luns épais et minces avec btrfs
  4. Limes / Luns épais et minces sans btrfs
  5. diff entre épais et mince et comment cela ne s'applique pas aux luns

bsdtar gère mieux les fichiers fragmentés que les fichiers tar classiques

  • bsdtar prendra tous les zéros et juste les méta-données
  • le goudron traite en réalité chaque zéro

* exemple: imaginez un fichier fragmenté de 20 To (appelé biglun) avec 10 Mo de données sur le fichier Sparsefile de 20 To (biglun) ... maintenant, ce fichier étant clairsemé, il ne prendra que 10 Mo sur le lecteur.

Comment faire un fichier fragmenté:

Sparse File - comment le fabriquer - le détecter - tout - Les fichiers fragmentés ressemblent à des fichiers "minces" (si vous deviez l’utiliser pour un lun). "épais" luns serait une histoire différente.

* retour au sujet:

  • tarer le biglun fera passer tous les 10 Mo de goudron avec tous les ~ 20tb de zéros de plus en plus répandus à travers le lun ... cela prendra un certain temps, je présume, et le fichier tar sera assez volumineux. De plus, en l'extrayant, je n'ai jamais extrait le fichier tar d'un fichier fragmenté, mais ce n'est peut-être pas joli; Je peux me tromper ici.

  • bsdtarring the biglun ne fera que traiter les 10 Mo de données et créer de petites métadonnées pour les ~ 20 To de zéros.

Avantage? Bien beaucoup d'entre eux; Je viens d'écrire certains ci-dessus.

C'est similaire à rsync vs cp

  • De plus, si vous synchronisez un fichier fragmenté géant, il se comportera comme un fichier tar.
  • Si vous cp un fichier géant, il se comportera automatiquement comme bsdtar (vous pouvez changer le comportement de cp pour aller sur les zéros, ou ne pas aller sur les zéros)

Personnellement, j'aime bien imaginer des fichiers clairsemés comme des minces luns et des fichiers réguliers comme des luns épais ...

Le sujet suivant est BTRFS thin vs thick luns:

  • Avec des systèmes de fichiers tels que BTRFS , les LUN FINS sont des fichiers fragmentés (faites-le avec troncature, comme dans le document wiki).

     truncate -s <size in kilobytes> filename
    

    Astuce : sauvegarde avec bsdtar , copie avec cp

  • Les luns épais sont des fichiers normaux avec l'attribut + C (+ C pour qu'il n'en soit pas une VAC, copie en écriture, pour que toutes les écritures restent essentiellement à l'endroit où elles sont allouées, et aucune nouvelle écriture ne se produit pour ce fichier lorsqu'il y a des écrasements. ou supprime - recherche COW et BTRFS ). Au lieu de rendre le fichier tronqué, faites-le avec "fallocate -l"

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

    Astuce : sauvegarde avec bsdtar ou tar, copie avec rsync ou cp

Le sujet suivant est EXT mince vs épais luns:

  • luns minces qui sont rares

    truncate -s <size in kilobytes> filename
    

    Astuce : sauvegarde avec bsdtar , copie avec cp

  • Les luns épais sont des fichiers normaux avec l'attribut + C (+ C pour qu'il ne soit plus une vache, une copie en écriture, pour que toutes les écritures restent essentiellement à l'endroit où elles sont allouées, et aucune nouvelle écriture ne se produit pour ce fichier lorsqu'il y a des remplacements. ou supprime - recherche COW et BTRFS ). Au lieu de rendre le fichier tronqué, faites-le avec "fallocate -l"

    touch filename
    fallocate -l <size in kilobytes> filename
    

    Astuce : sauvegarde avec bsdtar ou tar, copie avec rsync ou cp

Quel est un fichier épais vs mince

  • épais luns / fichiers, remplissent leurs données de 0 à la taille allouée, les métadonnées prétendent où se trouvent les 0. lorsque vous remplissez les données, les données se remplissent
  • Luns épais / fichiers: remplissez leurs données au début avec des 0 ou autre (zéro paresseux ou zéro enthousiaste) - ceux-ci définissent des réservations (ou comme ZFS aiment appeler des rappels)

ARTICLE VMWARE ICI décrit paresseux ou avide zéro avec des fichiers / fichiers épais: https://communities.vmware.com/message/2199576

pointe

Souvenez-vous que "Thin and Thin" ne s'applique pas uniquement aux Luns, il peut également concerner des fichiers, des systèmes de fichiers zfs (partages / volumes / Luns) et, j'en suis sûr, d'autres choses (il suffit de regarder zfs).

Kobbsoss
la source
1
Nice et approfondie. Bienvenue sur le site ...
eyoung100
1
- Rare avec n'importe quel tar: passez simplement -S à la plupart des implémentations de tar, ils le supportent depuis longtemps. - Rare avec rsync: encore une fois, passez --sparse, ça marche. L'inconvénient de l'utilisation d'une détection fragmentée est que l'outil doit en réalité lire davantage les blocs, ce qui peut introduire beaucoup de ressources processeur (en cas d'alternance de cycles zéro / non-zéro).
Robbat2
Il est toujours préférable d’utiliser bsdtar, même si gnu tar prend en charge le drapeau sparse, car bsdtar sait comment ignorer les trous clairsemés, sans les traiter (par exemple, si vous avez un fichier fragmenté de 1 To avec seulement 1k de données, bsdtar traitera 1k de Gnu tar traitera 1 To.
moveaway00
13

A partir de la description du paquet Ubuntu ( http://packages.ubuntu.com/de/lucid/bsdtar )

"Le programme bsdtar présente un certain nombre d'avantages par rapport aux implémentations précédentes de tar:

  • Bibliothèque. Comme la fonctionnalité principale se trouve dans une bibliothèque, elle peut être utilisée par d'autres outils, tels que pkg_add.
  • Détection automatique du format. Libarchive détecte automatiquement la compression (none / gzip / bzip2) et le format (ancien tar, ustar, gnutar, pax, cpio, iso9660, zip) lors de la lecture des archives. Il le fait pour n'importe quelle source de données.
  • Prise en charge du format Pax Interchange. Il s’agit d’une extension POSIX / SUSv3 de l’ancien format tar "ustar" qui ajoute des attributs étendus arbitraires à chaque entrée. Fait tout ce que fait le format tar GNU, mais en mieux.
  • Gère les drapeaux de fichiers, les ACL, les chemins d'accès arbitraires, etc. Le format d'échange Pax prend en charge les attributs clé / valeur en utilisant une technique facilement extensible. Les chemins d'accès arbitraires, les noms de groupe, les noms d'utilisateur et les tailles de fichier font partie de la norme POSIX; libarchive étend cela avec la prise en charge des indicateurs de fichier, des ACL et des numéros de périphériques arbitraires.
  • Prise en charge de GNU tar. Libarchive lit la plupart des archives GNU tar. S'il y a une demande, cela peut encore être amélioré. "
visualisation
la source
1

Ce qui suit est basé sur la lecture, pas sur l'expérience - je viens juste de commencer avec Freebsd, donc je n'ai presque aucune expérience réelle avec ce logiciel (je viens principalement de Linux). Je m'excuse (et demande humblement une correction) si j'ai oublié quelque chose d'important et ce que je dis ici, c'est de la foutaise ...

D'après ma lecture des pages de manuel (la plus récente, celle mentionnée ci-dessus http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ), le fichier tar de Freebsd ne contient pas (-d, --diff , --compare) Ce n'est pas surprenant, car les auteurs de Freebsd dump / restore ne semblent pas avoir fourni quoi que ce soit du genre.

Je ne sais pas avec certitude si Gnu tar intégrera toutes les métadonnées UFS comme on dit que Freebsd tar, et c’est un problème important. Mais à mon goût, je ne peux JAMAIS considérer qu'un cliché soit terminé tant que je n'ai pas stocké une somme MD5 du fichier de sortie, ET ALORS comparé le fichier de cliché aux données que je viens de vider supposément. Divers problèmes peuvent amener les données sauvegardées à différer de ce qui se trouve sur le disque. (Pas simplement les modifications de fichiers, mais les erreurs de disque, les erreurs de mémoire, les erreurs de machine, etc., ce qui m'est réellement arrivé.)

À mon avis, cela fait de Gnu tar la seule option que j'ai trouvée jusqu'à présent pour créer de vraies sauvegardes sur un système Freebsd stock.

J'aimerais beaucoup apprendre autrement, FWIW. Je préférerais utiliser les utilitaires natifs au moins pour le clonage de partition et les sauvegardes de restauration. Mais si on ne peut pas vérifier l'exactitude d'un vidage, je ne vois pas l'intérêt de se donner la peine d'en créer un.

LOC
la source
1
  • bsdtar peut lire et utiliser les membres tar d’autres archives en utilisant la @archivesyntaxe

  • GNU tar a l' --deleteoption - bien que récemment, j'ai constaté que cela pouvait corrompre l'archive.

bart
la source