web-dev-qa-db-fra.com

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

J'ai toujours utilisé GNU tar. Cependant, toutes les distributions GNU/Linux que j'ai vues sont expédiées bsdtar dans 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 l'exige dans le cadre de basedevel (peut-être base, mais je ne suis pas sûr), comme je l'ai vu dans PKGBUILDs.

Pourquoi voudriez-vous utiliser bsdtar au lieu de GNU tar? Quels sont les avantages?

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

49
strugee

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

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

Lorsque visualisation a collé le texte de présentation d'Ubuntu, il y a quelques éléments spécifiques à libarchive:

  1. libarchive est par définition une bibliothèque, et diffère à la fois du classique bsdtar et GNUtar de cette façon.
  2. libarchive ne peut pas lire certaines anciennes versions obscures GNU tar, la plus notable étant le codage de certains en-têtes en base64, de sorte que le fichier tar soit 7 bits propre ASCII (ce fut le cas pour 1.13.6-1.13.11 et changé en 1.13.12, ce code n'était officiellement dans tar que pendant 2 semaines)
  3. libarchive _ bsdtar lira les fichiers non tar (par exemple Zip, iso9660, cpio), mais pas bsdtar classique.

Maintenant que nous avons mis libarchive à l'écart, cela se résume principalement à ce qui est pris en charge dans le bsdtar classique.

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

Dans votre question initiale, vous avez demandé quels sont les avantages du bsdtar classique, et je ne suis pas sûr qu'il y en ait vraiment. La seule fois où 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 transmettez à tar est réellement valide dans toutes les variantes.

GNUtar, libarchive's bsdtar, classique bsdtar, star et BusyBox's tar sont certainement les implémentations tar que vous rencontrerez la plupart du temps, mais je suis certain qu'il y en a d'autres (au début QNX par exemple). libarchive/GNUtar/star sont les plus riches en fonctionnalités, mais à bien des égards, ils ont longtemps dévié des normes d'origine (peut-être pour le mieux).

30
robbat2

BSDTAR vs TAR et bien plus encore

Voici un avantage !!

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

  1. bsdtar vs tar
  2. fichiers clairsemés vs non
  3. fichiers/luns épais et fins avec btrfs
  4. fichiers/luns épais et fins sans btrfs
  5. diff entre épais et mince et comment cela ne s'applique pas seulement aux luns

bsdtar gère mieux les fichiers clairsemés que réguliers tar

  • bsdtar prendra tous les zéros et juste les métadonnées
  • goudron traitera en fait chaque zéro

* exemple: imaginez un fichier clairsemé de 20 tb (appelé biglun) avec 10 mégaoctets de données dans le fichier sparsefile de 20 tb (biglun) ... maintenant depuis ce est un fichier clairsemé, il ne prendra que 10 Mo sur le disque.

Comment créer un fichier clairsemé:

Fichier clairsemé - comment le faire - le détecter - tout Les fichiers clairsemés sont comme des lunes "minces" (si vous deviez l'utiliser pour un lun). les lunes "épaisses" seraient une autre histoire.

* retour au sujet:

  • tarer le biglun fera goudron passer par tous les 10 mégas avec tous les pires ~ 20tb de zéros répartis sur le lun ... cela prendra un certain temps je présume, et le fichier tar sera assez gros. Aussi - en l'extrayant - je n'ai jamais fait d'extrait d'un fichier tar d'un fichier clairsemé, mais ce n'est peut-être pas joli; Je me trompe peut-être ici.

  • bsdtarring le biglun ne traitera que les 10 mégas de données et créera de petites métadonnées pour les ~ 20 To de zéros.

Avantage? Eh bien, beaucoup d'entre eux; Je viens d'en écrire ci-dessus.

C'est similaire à rsync vs cp

  • De plus, si vous resynchronisez un fichier géant clairsemé, il se comportera comme tar
  • Si vous cp un fichier géant, il se comportera automatiquement comme bsdtar (vous pouvez changer le comportement de cp pour passer au dessus des zéros, ou ne pas passer au dessus des zéros)

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

Le sujet suivant est [~ # ~] btrfs [~ # ~] luns mince vs épais:

  • Avec des systèmes de fichiers comme [~ # ~] btrfs [~ # ~] , les lunes minces sont des fichiers clairsemés (faites-le avec tronqué, comme dans le wiki wiki) .

     truncate -s <size in kilobytes> filename
    

    astuce: sauvegarde avec bsdtar , copie avec cp

  • les lunes épaisses sont des fichiers normaux avec l'attribut + C (+ C de façon à ce qu'il n'y ait pas de vache, copie à l'écriture, de sorte que toutes les écritures restent essentiellement là où elles sont allouées, et aucune nouvelle écriture ne se produit pour ce fichier lorsqu'il y a des écrasements ou supprime - recherche [~ # ~] vache [~ # ~] et [~ # ~] btrfs [ ~ # ~] ). Au lieu de faire le fichier avec tronquer, 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:

  • des lunes minces et clairsemées

    truncate -s <size in kilobytes> filename
    

    astuce: sauvegarde avec bsdtar , copie avec cp

  • les lunes épaisses sont des fichiers normaux avec l'attribut + C (+ C de sorte qu'il ne se transforme pas en COW, copie en écriture, de sorte que toutes les écritures restent essentiellement là où elles sont allouées, et aucune nouvelle écriture ne se produit pour ce fichier lorsqu'il y a des écrasements ou supprime - recherche [~ # ~] vache [~ # ~] et [~ # ~] btrfs [ ~ # ~] ). Au lieu de faire le fichier avec tronquer, 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

  • fichiers/fichiers épais, remplissez leurs données de 0 à la taille allouée, les métadonnées prétendent où se trouvent les 0. lorsque vous remplissez des données, les données se remplissent
  • fichiers/fichiers épais: remplissez leurs données au début avec 0 ou autre chose (zéro paresseux ou zéro impatient) - ces réservations définies (ou comme ZFS aiment appeler les rafraîchissements)

L'ARTICLE DE VMWARE ICI décrit le paresseux contre le zéro enthousiaste avec des fichiers/fichiers épais: https://communities.vmware.com/message/2199576

pointe

rappelez-vous que l'épaisseur et la fin ne s'appliquent pas seulement aux luns, ils peuvent également être sur des fichiers, des systèmes de fichiers zfs (partages/volumes/luns), et je suis sûr que d'autres choses (regardez simplement zfs).

15
kobbsoss

Depuis 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 tar précédentes:

  • Bibliothèque. Étant donné que 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 de format. Libarchive détecte automatiquement la compression (none/gzip/bzip2) et le format (old 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 d'échange Pax. 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 GNU tar, 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 à l'aide d'une technique facilement extensible. Les chemins d'accès arbitraires, les noms de groupe, les noms d'utilisateur, les tailles de fichiers font partie de la norme POSIX; libarchive étend cela avec la prise en charge des indicateurs de fichiers, des ACL et des numéros de périphériques arbitraires.
  • Prise en charge de tar GNU. Libarchive lit la plupart des archives GNU tar. S'il y a une demande, cela peut encore être amélioré. "
14
visualication

Ce qui suit est basé sur la lecture, pas sur l'expérience - je ne fais que commencer avec Freebsd donc je n'ai pratiquement aucune expérience réelle avec lui (je viens principalement de Linux). Je m'excuse (et sollicite humblement la correction) si j'ai raté quelque chose d'important et ce que je dis ici est des ordures ...

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

Je ne sais pas avec certitude si le tar Gnu incorporera toutes les métadonnées UFS comme le dit le tar Freebsd, et c'est un problème important. Mais à mon goût, je ne peux JAMAIS considérer un vidage comme terminé tant que je n'ai pas stocké une somme MD5 du fichier de sortie, ET PUIS comparer le fichier de vidage avec les données que je viens de supposément vider. Divers problèmes peuvent entraîner une différence entre les données sauvegardées et celles présentes sur le disque. (Pas seulement des changements de fichiers, mais des erreurs de disque, des erreurs de mémoire, des défauts de machine, etc.). Tout cela 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 véritables sauvegardes sur un système Freebsd standard.

J'aimerais beaucoup apprendre le contraire, FWIW. Je préfère utiliser les utilitaires natifs au moins pour le clonage de partition et les sauvegardes de récupération matérielle. Mais si l'on ne peut pas vérifier l'exactitude d'un vidage, je ne vois pas l'intérêt de prendre la peine d'en créer un.

2
LOC
  • bsdtar peut lire et tarer les membres provenant d'autres archives en utilisant le @archive syntaxe

  • GNU tar a le --delete option - mais récemment, j'ai trouvé que cela pouvait corrompre l'archive.

1
bart