¿Cuáles son las diferencias entre bsdtar y GNU tar?

46

Siempre he usado GNU tar. Sin embargo, todas las distribuciones de GNU / Linux que he visto se envían bsdtaren sus repositorios. Incluso lo he visto instalado por defecto en algunos, IIRC. Sé con certeza que Arch GNU / Linux lo requiere como parte de basedevel(tal vez base, pero no estoy seguro), como lo he visto en PKGBUILD.

¿Por qué querrías usar en bsdtarlugar de GNU tar? ¿Cuáles son las ventajas?

Tenga en cuenta que soy la persona que preguntó ¿Cuáles son las principales diferencias entre BSD y GNU / Linux userland? .

Strugee
fuente
1
Esta respuesta a ¿Por qué extraer este tgz arroja un error en mi Mac pero no en Linux? en Apple.SE también es relevante para esta pregunta.
Adam Liter

Respuestas:

29

Ubuntu bsdtares en realidad la implementación de tar incluida libarchive; y eso debería diferenciarse de lo clásico bsdtar. Algunas variantes de BSD utilizan libarchivepara su implementación de tar, por ejemplo, FreeBSD.

GNUtaradmite las otras variantes de alquitrán y la detección de compresión automática.

A medida que la visualización pegaba la propaganda de Ubuntu, hay algunas cosas allí que son específicas para libarchive:

  1. libarchivees, por definición, una biblioteca, y diferente de la clásica bsdtary GNUtarde esa manera.
  2. libarchive no puede leer algunas variaciones oscuras antiguas de GNU tar, lo más notable fue la codificación de algunos encabezados en base64, por lo que el archivo tar sería ASCII limpio de 7 bits (este fue el caso para 1.13.6-1.13.11 y cambió en 1.13.12 , ese código solo estuvo oficialmente en alquitrán durante 2 semanas)
  3. libarchive's bsdtarleerá archivos que no sean tar (por ejemplo, zip, iso9660, cpio), pero bsdtar clásico no lo hará.

Ahora que nos hemos salido libarchivedel camino, todo se reduce a lo que se admite en la clásica bsdtar.

Puede ver las páginas de manual usted mismo aquí:

En su pregunta original, preguntó cuáles son las ventajas de la clásica bsdtar, y no estoy seguro de que realmente existan. El único momento en el que realmente importa es si está intentando escribir scripts de shell que necesitan funcionar en todos los sistemas; debe asegurarse de que lo que pasa tarsea ​​realmente válido en todas las variantes.

GNUtar, libarchive'S bsdtar, clásicos bsdtar, stary BusyBox' s tarson sin duda las implementaciones de alquitrán que se encontrará con la mayor parte del tiempo, pero estoy seguro de que hay otros por ahí (QNX temprana, por ejemplo). libarchive/ GNUtar/ starson los más completos, pero en muchos aspectos se han desviado de los estándares originales (posiblemente para mejor).

robbat2
fuente
15

BSDTAR vs TAR y mucho más

¡Aquí hay un beneficio!

Voy a entrar en 5 temas aquí (y saldré del tema, pero también cubrirá lo que quieras):

  1. bsdtar vs tar
  2. archivos dispersos vs no
  3. archivos / luns gruesos y delgados con btrfs
  4. archivos / luns gruesos y delgados sin btrfs
  5. diferencia entre grueso y delgado y cómo no se aplica a solo luns

bsdtar maneja los archivos dispersos mejor que el alquitrán regular

  • bsdtar tomará todos los ceros y solo los metadatará
  • tar procesará realmente cada cero

* ejemplo: imagine un archivo disperso de 20 tb (llamado biglun) con 10 megas de datos en todo el archivo disperso de 20 tb (biglun) ... ahora, dado que es un archivo disperso, solo ocupará 10 megas en la unidad.

Cómo hacer un archivo disperso:

Archivo disperso - cómo hacerlo - detectarlo - todo Los archivos dispersos son como luns "delgadas" (si fuera a usarlo para un lun). las monjas "gruesas" serían una historia diferente.

* volver al tema:

  • tarar el biglun hará que el alquitrán atraviese los 10 megas junto con todos los ~ 20tb de ceros peores repartidos por el lun ... supongo que llevará un tiempo, y el archivo tar será bastante grande. Además, extrayéndolo, nunca he hecho un extracto de un archivo tar de un archivo disperso, pero puede que no sea bonito; Podría estar equivocado aquí.

  • bsdtarring el biglun solo procesará los 10 megas de datos y creará pequeños metadatos para ~ 20tb de ceros.

¿Beneficio? Bueno, muchos de ellos; Acabo de escribir algunos arriba.

Es similar a rsync vs cp

  • Además, si sincroniza un archivo disperso gigante, se comportará como tar
  • Si copia un archivo gigante, se comportará automáticamente como bsdtar (puede cambiar el comportamiento de cp para ir sobre los ceros, o no sobre los ceros)

Personalmente, me gusta imaginar archivos dispersos como luns delgadas y archivos regulares como luns gruesas ...

El siguiente tema es BTRFS delgadas contra gruesas:

  • Con sistemas de archivos como BTRFS , las luns delgadas son archivos dispersos ( hazlo con truncamiento , como en el documento wiki).

     truncate -s <size in kilobytes> filename
    

    consejo: copia de seguridad con bsdtar , copia con cp

  • las luns gruesas son archivos normales con el atributo + C (+ C para que no sea COW, copie al escribir, de modo que todas las escrituras permanezcan esencialmente donde está asignado, y no ocurran nuevas escrituras para ese archivo cuando hay sobrescrituras o elimina - investigación COW y BTRFS ). En lugar de truncar el archivo, hágalo con "Fallocate -l"

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

    consejo: copia de seguridad con bsdtar o tar, copia con rsync o cp

El siguiente tema es EXT.

  • chicas delgadas que son escasas

    truncate -s <size in kilobytes> filename
    

    consejo: copia de seguridad con bsdtar , copia con cp

  • las luns gruesas son archivos normales con el atributo + C (+ C para que no sea COW, copie al escribir, de modo que todas las escrituras permanezcan esencialmente donde está asignado, y no ocurran nuevas escrituras para ese archivo cuando hay sobrescrituras o elimina - investigación COW y BTRFS ). En lugar de truncar el archivo, hágalo con "Fallocate -l"

    touch filename
    fallocate -l <size in kilobytes> filename
    

    consejo: copia de seguridad con bsdtar o tar, copia con rsync o cp

¿Cuál es un archivo grueso vs delgado

  • luns / archivos gruesos, llenan sus datos desde 0 hasta el tamaño asignado, los metadatos fingen dónde están los 0. a medida que llena datos, los datos se llenan
  • Luns / archivos gruesos: llene sus datos al principio con 0s o lo que sea (cero perezoso o cero ansioso): estas reservas establecidas (o como ZFS desea llamar a las actualizaciones)

El ARTÍCULO DE VMWARE AQUÍ describe el vago vs cero ansioso con archivos / luns gruesos: https://communities.vmware.com/message/2199576

propina

recuerde que grueso y delgado no solo se aplica a las luns, también puede estar en archivos, sistemas de archivos zfs (recursos compartidos / volúmenes / luns), y estoy seguro de otras cosas (solo mire zfs).

kobbsoss
fuente
1
Agradable y minucioso. Bienvenido al sitio ...
eyoung100
1
- Escaso con cualquier tar: simplemente pase -S a la mayoría de las implementaciones de tar, todas lo han soportado durante mucho tiempo. - Escaso con rsync: nuevamente, pase --sparse, funciona. La desventaja de usar cualquier detección dispersa es que la herramienta realmente tiene que leer más los bloques, lo que puede introducir una gran cantidad de CPU (especialmente en casos de corridas alternativas de cero / no cero).
robbat2
Todavía es mejor usar bsdtar, aunque gnu tar admite la bandera dispersa, porque bsdtar sabe cómo omitir agujeros dispersos, sin procesarlos (por ejemplo, si tiene un archivo disperso de 1 TB con solo 1k de datos, bsdtar procesará 1k de datos. El alquitrán de
GNU
13

De la descripción del paquete de Ubuntu ( http://packages.ubuntu.com/de/lucid/bsdtar )

"El programa bsdtar tiene una serie de ventajas sobre implementaciones tar anteriores:

  • Biblioteca. Dado que la funcionalidad principal está en una biblioteca, puede ser utilizada por otras herramientas, como pkg_add.
  • Detección automática de formato. Libarchive detecta automáticamente la compresión (none / gzip / bzip2) y el formato (antiguo tar, ustar, gnutar, pax, cpio, iso9660, zip) al leer archivos. Hace esto para cualquier fuente de datos.
  • Soporte de formato de intercambio de Pax. Esta es una extensión POSIX / SUSv3 del antiguo formato tar "ustar" que agrega atributos extendidos arbitrarios a cada entrada. Hace todo lo que hace el formato GNU tar, solo que mejor.
  • Maneja banderas de archivo, ACL, nombres de ruta arbitrarios, etc. El formato de intercambio de Pax admite atributos de clave / valor utilizando una técnica fácilmente extensible. Los nombres de ruta arbitrarios, los nombres de grupos, los nombres de usuario y los tamaños de archivo son parte del estándar POSIX; libarchive extiende esto con soporte para marcas de archivo, ACL y números de dispositivo arbitrarios.
  • GNU alquitrán de apoyo. Libarchive lee la mayoría de los archivos tar de GNU. Si hay demanda, esto se puede mejorar aún más ".
visualización
fuente
1

Lo siguiente se basa en la lectura, no en la experiencia: recién estoy comenzando con Freebsd, así que casi no tengo experiencia real con él (vengo principalmente de Linux). Pido disculpas (y solicito humildemente la corrección) si me he perdido algo importante y lo que digo aquí es basura ...

De mi lectura de las páginas del manual (más recientemente la referenciada anteriormente http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ) el tar de Freebsd carece de (-d, --diff , --compare) capacidad. Esto no es sorprendente, ya que los autores de Freebsd dump / restore tampoco parecen haber proporcionado algo como esto.

No sé con certeza si el tar de Gnu incorporará todos los metadatos de UFS como se dice que hace el tar de Freebsd, y este es un tema importante. Pero para mi gusto, NUNCA puedo considerar que se complete un volcado hasta que haya almacenado una suma MD5 del archivo de salida, Y ENTONCES comparé el archivo de volcado con los datos que supuestamente volqué. Varios problemas pueden llevar a que los datos volcados sean diferentes de los que están en el disco. (No solo los cambios de archivo, sino también los errores de disco, errores de memoria, fallas de la máquina, etc.) Todo lo cual realmente me ha sucedido.

En mi opinión, esto hace que Gnu tar sea la única opción que he encontrado hasta ahora para crear copias de seguridad verdaderas en un sistema Freebsd estándar.

Me encantaría aprender lo contrario, FWIW. Preferiría usar las utilidades nativas al menos para la clonación de particiones y las copias de seguridad de recuperación de hardware. Pero si uno no puede verificar la exactitud de un volcado, no veo el punto de molestarme en crear uno.

LOC
fuente
1
  • bsdtar puede leer y tar miembros procedentes de otros archivos utilizando la @archivesintaxis

  • GNU tar tiene la --deleteopción, aunque recientemente descubrí que puede corromper el archivo.

bart
fuente