Quais são as diferenças entre o bsdtar e o GNU tar?

46

Eu sempre usei o GNU tar. No entanto, todas as distribuições GNU / Linux que eu vi são enviadas bsdtarem seus repositórios. Eu já o vi instalado por padrão em alguns, IIRC. Eu sei com certeza que o Arch GNU / Linux exige isso como parte de basedevel(talvez base, mas não tenho certeza), como eu já vi em PKGBUILDs.

Por que você gostaria de usar em bsdtarvez do GNU tar? Quais são as vantagens?

Observe que eu sou a pessoa que perguntou Quais são as principais diferenças entre a área de usuário do BSD e do GNU / Linux? .

strugee
fonte
1
Esta resposta para Por que a extração deste tgz está causando um erro no meu Mac, mas não no Linux? no Apple.SE também é relevante para esta questão.
Adam Liter

Respostas:

29

O Ubuntu bsdtaré na verdade a implementação do tar incluída libarchive; e isso deve ser diferenciado do clássico bsdtar. Algumas variantes do BSD usam libarchivepara sua implementação tar, por exemplo, FreeBSD.

GNUtarsuporta outras variantes de alcatrão e detecção automática de compactação.

Como a visualização colou o anúncio no Ubuntu, existem algumas coisas específicas para libarchive:

  1. libarchiveé por definição uma biblioteca e diferente da clássica bsdtare GNUtardessa maneira.
  2. libarchive não consegue ler algumas variações obscuras de tar GNU mais antigas, o mais notável foi a codificação de alguns cabeçalhos em base64, para que o arquivo tar seja ASCII limpo de 7 bits (esse foi o caso de 1.13.6-1.13.11 e alterado em 1.13.12 , esse código estava oficialmente oficialmente no alcatrão por 2 semanas)
  3. libarchive's bsdtarvai ler arquivos não-tar (por exemplo, zip, ISO9660, cpio), mas bsdtar clássica não vai.

Agora que saímos libarchivedo caminho, tudo se resume ao que é suportado no clássico bsdtar.

Você pode ver as páginas do manual aqui:

Na sua pergunta original, você perguntou quais são as vantagens do clássico bsdtare não tenho certeza de que realmente haja alguma. O único momento realmente importante é se você está tentando escrever scripts de shell que precisam funcionar em todos os sistemas; você precisa garantir que o que você transmite tarseja realmente válido em todas as variantes.

GNUtar, libarchive'S bsdtar, clássicos bsdtar, stare BusyBox' s tarsão, certamente, as implementações de alcatrão que você vai correr em maior parte do tempo, mas estou certo que há outros lá fora (QNX cedo por exemplo). libarchive/ GNUtar/ starsão os mais cheios de recursos, mas em muitos aspectos eles se desviaram dos padrões originais (possivelmente para melhor).

robbat2
fonte
15

BSDTAR vs TAR e muito mais

Aqui está um benefício !!

Vou abordar 5 tópicos aqui (e sair do tópico, mas também abrangerá o que você deseja):

  1. bsdtar vs tar
  2. arquivos esparsos vs não
  3. arquivos grossos e finos / luns com btrfs
  4. arquivos grossos e finos / luns sem btrfs
  5. difere entre grosso e fino e como ele não se aplica a apenas luns

O bsdtar lida com arquivos esparsos melhor que o tar comum

  • O bsdtar pegará todos os zeros e apenas os metadará
  • alcatrão realmente processa todos os zero

* exemplo: imagine um arquivo esparso de 20 tb (chamado biglun) com 10 megs de dados em todo o arquivo esparso de 20 tb (biglun) ... agora como esse é um arquivo esparso, ele ocupará apenas 10 megas na unidade.

Como criar um arquivo esparso:

Arquivo esparso - como fazê-lo - detectá-lo - tudo Os arquivos esparsos são como luns "finos" (se você fosse usá-lo para um almoço). luns "grossos" seria uma história diferente.

* voltar ao tópico:

  • aumentar o biglun fará com que o tar passe por todos os 10 megas, juntamente com todos os ~ 20 tb de zeros espalhados pelo lun ... levará algum tempo, presumo, e o arquivo tar será bem grande. Além disso - extraindo - eu nunca fiz uma extração de um arquivo tar de um arquivo esparso, mas pode não ser bonito; Eu posso estar errado aqui.

  • bsdtarring o biglun apenas processará os 10 megs de dados e criará pequenos metadados para os ~ 20tb de zeros.

Benefício? Bem, muitos deles; Eu acabei de escrever alguns acima.

É semelhante ao rsync vs cp

  • Além disso, se você sincronizar novamente um arquivo esparso gigante, ele se comportará como tar
  • Se você copiar um arquivo gigante, ele se comportará automaticamente como bsdtar (você pode alterar o comportamento do cp para ultrapassar os zeros ou não os zeros)

Pessoalmente, eu gosto de imaginar arquivos esparsos, como luns finos, e arquivos regulares, como luns espessos ...

O próximo tópico é BTRFS thin vs thick luns:

  • Com sistemas de arquivos como o BTRFS , luns finos são arquivos esparsos (torne-os truncados, como no documento do wiki).

     truncate -s <size in kilobytes> filename
    

    dica: faça backup com bsdtar , copie com cp

  • luns grossos são arquivos regulares com o atributo + C (+ C, para que ele não seja COW, copie na gravação, de modo que todas as gravações permaneçam essencialmente no local a que estão alocadas, e nenhuma nova gravação ocorra nesse arquivo quando houver sobrescrições ou exclui - pesquisa COW e BTRFS ). Em vez de tornar o arquivo truncado, faça-o com "fallocate -l"

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

    dica: faça backup com bsdtar ou tar, copie com rsync ou cp

O próximo tópico é EXT thin vs thick luns:

  • luns finos que são escassos

    truncate -s <size in kilobytes> filename
    

    dica: faça backup com bsdtar , copie com cp

  • luns grossos são arquivos regulares com o atributo + C (+ C, para que ele não seja COW, copie na gravação, de modo que todas as gravações permaneçam essencialmente no local onde estão alocadas, e nenhuma nova gravação ocorrerá para esse arquivo quando houver substituições ou exclui - pesquisa COW e BTRFS ). Em vez de tornar o arquivo truncado, faça-o com "fallocate -l"

    touch filename
    fallocate -l <size in kilobytes> filename
    

    dica: faça backup com bsdtar ou tar, copie com rsync ou cp

o que é um arquivo grosso vs fino

  • luns / arquivos espessos, preencha seus dados de 0 ao tamanho alocado, os metadados fingem onde estão os 0s. conforme você preenche os dados, os dados são preenchidos
  • luns / arquivos espessos: preencha seus dados no início com 0s ou o que for (zero lento ou zero ansioso) - essas reservas definidas (ou como o ZFS gosta de chamar atualizações de reserva)

O ARTIGO VMWARE AQUI descreve zero preguiçoso versus ansioso com luns / arquivos espessos: https://communities.vmware.com/message/2199576

gorjeta

lembre-se grosso e fino não se aplica apenas a luns, também pode estar em arquivos, sistemas de arquivos zfs (compartilhamentos / volumes / luns) e tenho certeza de outras coisas (basta olhar para zfs).

kobbsoss
fonte
1
Agradável e completo. Bem-vindo ao site ...
eyoung100 10/10
1
- Disparo com qualquer alcatrão: basta passar -S para a maioria das implementações de alcatrão, todos eles o suportam há muito tempo. - Esparso com o rsync: novamente, passe --sparse, funciona. A desvantagem de usar qualquer detecção esparsa é que a ferramenta precisa realmente ler mais os blocos, o que pode introduzir muita CPU (especialmente nos casos de alternância de execuções zero / diferente de zero).
robbat2
Ainda é melhor usar o bsdtar, mesmo que o gnu tar suporte a flag esparsa, porque o bsdtar sabe pular buracos esparsos, sem processá-los (por exemplo, se você tiver um arquivo esparso de 1 TB com apenas 1k de dados, o bsdtar processará 1k de O Gnu tar processará 1 TB.
moveaway00
13

Na descrição do pacote Ubuntu ( http://packages.ubuntu.com/de/lucid/bsdtar )

"O programa bsdtar possui várias vantagens em relação às implementações tar anteriores:

  • Biblioteca. Como a funcionalidade principal está em uma biblioteca, ela pode ser usada por outras ferramentas, como pkg_add.
  • Detecção automática de formato. O Libarchive detecta automaticamente a compactação (none / gzip / bzip2) e o formato (tar antigo, ustar, gnutar, pax, cpio, iso9660, zip) ao ler arquivos. Faz isso para qualquer fonte de dados.
  • Suporte ao formato Pax Interchange. Essa é uma extensão POSIX / SUSv3 para o antigo formato tar "ustar" que adiciona atributos estendidos arbitrários a cada entrada. Faz tudo que o formato tar do GNU faz, só que melhor.
  • Lida com sinalizadores de arquivo, ACLs, nomes de caminho arbitrários, etc. O formato de intercâmbio Pax suporta atributos de chave / valor usando uma técnica facilmente extensível. Nomes de caminhos arbitrários, nomes de grupos, nomes de usuários e tamanhos de arquivos fazem parte do padrão POSIX; libarchive estende isso com suporte para sinalizadores de arquivos, ACLs e números de dispositivos arbitrários.
  • Suporte a alcatrão GNU. Libarchive lê a maioria dos arquivos tar do GNU. Se houver demanda, isso poderá ser melhorado ainda mais. "
visualização
fonte
1

O seguinte é baseado na leitura, não na experiência - estou apenas começando com o Freebsd, por isso não tenho quase nenhuma experiência real com ele (eu venho principalmente do Linux). Peço desculpas (e humildemente solicito a correção) se perdi algo importante e o que digo aqui é lixo ...

Na minha leitura das páginas de manual (mais recentemente, a referência acima http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ), o tar do Freebsd não possui o (-d, --diff , - compare) capacidade. Isso não é surpreendente, pois os autores do dump / restore do Freebsd também não parecem fornecer nada parecido.

Não sei ao certo se o alcatrão Gnu incorporará todos os metadados do UFS, como é dito que o alcatrão Freebsd faz, e essa é uma questão importante. Mas, para o meu gosto, NUNCA posso considerar que um despejo seja concluído até que eu tenha armazenado uma soma MD5 do arquivo de saída, E ENTÃO compare o arquivo de despejo com os dados que supostamente despejei. Vários problemas podem fazer com que os dados despejados sejam diferentes do que está no disco. (Não apenas alterações de arquivo, mas erros de disco, memória, falhas na máquina e assim por diante. Tudo isso realmente aconteceu comigo.)

Na minha opinião, isso torna o Gnu tar a única opção que eu encontrei até agora para criar backups verdadeiros em um sistema Freebsd padrão.

Eu adoraria aprender de outra forma, FWIW. Eu preferiria usar os utilitários nativos pelo menos para clonagem de partição e backups de recuperação. Mas se não é possível verificar a correção de um despejo, não vejo sentido em criar um.

LOC
fonte
1
  • O bsdtar pode ler e tar membros provenientes de outros arquivos usando a @archivesintaxe

  • O tar do GNU tem a --deleteopção - embora recentemente, descobri que ele pode corromper o arquivo.

bart
fonte