Por que eu tararia um único arquivo?

101

Na minha empresa, baixamos um instantâneo de banco de dados de desenvolvimento local como um db.dump.tar.gzarquivo. A compactação faz sentido, mas o tarball contém apenas um único arquivo ( db.dump).

Existe algum motivo para arquivar um único arquivo ou é .tar.gzapenas um idioma tão comum? Por que não apenas .gz?

Gardenhead
fonte
5
É apenas uma questão de convenção na minha opinião. Quando as pessoas veem um arquivo com extensão gz, seu pensamento padrão é usar tar -zxvf. Mas para quem olha o nome do arquivo e vê que ele não tem .tgzextensão, é perfeitamente bom compactar com gzip o arquivo db dump. Como eu não conheço os algoritmos de compactação em detalhes, não tenho certeza se o tar faz alguma compactação em arquivos esparsos, como db dump, mas para arquivos de texto sem formatação, o gzip direto do arquivo tem uma vantagem de tamanho muito pequena sobre o taring first e o gzip ao
iniciar
3
Tudo que o tarar um único arquivo fará é adicionar alguns blocos de metadados no início e no final do arquivo. Os dados reais do arquivo passam pelo alcatrão para o compressor intocados. Portanto, para um arquivo grande, a diferença de tamanho entre a compactação e o tarar será insignificante.
Plug
No passado, ao tentar vários métodos de compactação, achei .tar.gzsuperior à maioria dos outros métodos comuns. Lembro-me que era superior ao justo, .tarmas não consigo lembrar se era melhor do que justo .gz. Ironicamente, o .cabformato do Windows foi o melhor dos métodos que tentei, o que foi muito inesperado.
Pharap
@Pharap tarnão é um algoritmo de compressão, é um formato de arquivo
gardenhead
1
@ Gardenhead Bem, isso explicaria por que não funcionou muito bem.
Pharap

Respostas:

163

As vantagens de usar em .tar.gzvez de .gzsão

  • tararmazena mais meta-dados (permissões UNIX etc.) que gzip.
  • a configuração pode ser mais facilmente expandida para armazenar vários arquivos
  • Os arquivos .tar.gz são muito comuns, os arquivos compactados apenas com gzip podem confundir alguns usuários. (cf. comentário de MelBurslans )

A sobrecarga de uso tartambém é muito pequena.

Se não for realmente necessário, ainda não recomendo tar um único arquivo. Existem muitas ferramentas úteis que podem acessar arquivos únicos compactados diretamente (como zcat, zgrepetc. - também existentes para bzip2e xz).

jofel
fonte
35
Não considerei o aspecto de metadados. Muito bom ponto
gardenhead 20/04
5
Se eu vejo um .gz, meu primeiro instinto é tar -zxf foo.gz. Lembrar que o gzip é mesmo um comando leva mais alguns segundos.
bgStack15
2
@ bgStack15 FWIW você não precisa do z(ou, se -for o caso), a maioria dos tars modernos detectará automaticamente que o arquivo precisa ser descompactado.
precisa saber é o seguinte
2
Por padrão gzip, armazenará o nome do arquivo original e o registro de data e hora. Você pode usar a -Nopção ao descompactar para restaurá-los.
Ross cume
@RossRidge obrigado, removi novamente o texto sobre o nome do arquivo original.
Jofel
63

Você está realmente fazendo apenas metade da pergunta. A outra pergunta é: "Por que eu compactaria um arquivo tar com o gzip?". E a resposta não é apenas que gziptorna o arquivo menor (na maioria dos casos):

tar:

  • armazena o nome do arquivo e outros metadados : modo, ID do proprietário, ID do grupo, tamanho do arquivo, hora da modificação
  • armazena uma soma de verificação (somente para o cabeçalho)

gzip:

  • pode armazenar o nome do arquivo original, mas isso é opcional
  • possui uma soma de verificação CRC-32 sobre os dados originais
  • comprime o arquivo

Com apenas tarvocê não pode ter certeza de que seus dados não foram corrompidos. Com apenas gzipvocê não pode restaurar o ID do usuário / grupo, a hora da modificação e, possivelmente, o nome do arquivo original.

A combinação é mais poderosa do que os comandos / formatos individuais fornecem, porque complementam os recursos um do outro .

Anthon
fonte
Obrigado por esclarecer isso! Quando eu estava lendo a tarpágina da Wikipedia, entendi mal a descrição como significando que a soma de verificação era para o arquivo inteiro.
precisa saber é o seguinte
Isso me parece a resposta correta. Eu também adicionaria mais alguns motivos, que você pode editar se concordar. 1) não há custo adicional para o administrador para .tgz somente .tar ou .gz: todos são apenas um comando 2) Os administradores fazem backup, copiam, realocam, movem MUITOS arquivos, por várias razões diferentes; Os backups de banco de dados são apenas um deles. Eles podem usar o mesmo fluxo de trabalho, ferramentas e comandos, seja fazendo backup de um ou vários arquivos; então por que specialcase usando a sintaxe do comando gzip, para o caso em que há um arquivo?
Dewi Morgan
30

Há um muito grande vantagem de usar arquivos de texto somente gzipped - o conteúdo pode ser acessado diretamente com as ferramentas de linha de comando, como less, zgrep, zcat.

ejdi
fonte
ponto interessante, mas a questão é sobre um instantâneo de banco de dados, improvável que seja um arquivo de texto e não apenas com o gzip.
underscore_d
9
@underscore_d todos os meus despejos de banco de dados (principalmente mysql e pgsql) são despejos de texto, em parte porque são mais recuperáveis ​​se algo corrompe parcialmente o despejo, e em parte porque eu posso pré-processar qualquer restauração com as ferramentas usuais (sed , awk, perl, etc) se necessário. ou seja, mais confiável e mais útil do que despejos binários. A desvantagem é que os despejos de texto tendem a ser maiores (quem se importa? O espaço em disco é barato e temos boa compactação) e as restaurações são significativamente mais lentas (mas menos se você agrupar a restauração em uma transação).
21416
1
Qual é a vantagem dessas ferramentas em relação a simplesmente canalizar a saída de um descompressor para as ferramentas comuns?
CodesInChaos
21

Eu diria que é provável que as pessoas simplesmente não percebam que podem usar o gzip / bzip2 / xz sem tar. Possivelmente porque eles vêm de um plano de fundo do DOS / Windows, onde é normal que a compactação e o arquivamento sejam integrados em um único formato ( ZIP , RAR , etc).

Embora possa haver pequenas vantagens em usar o tar em algumas situações devido ao armazenamento de metadados ou à capacidade de adicionar arquivos extras, também existem desvantagens. Com um arquivo gzip / bzip2 / xz simples, você pode descompactá-lo e canalizar os dados descompactados diretamente para outra ferramenta (como o banco de dados) sem precisar armazenar os dados descompactados como um arquivo em disco. Com um tarball isso é mais difícil.

plugwash
fonte
2
Com o GNU tar, é preciso apenas -O switch para produzir o stdout, então eu não diria que é muito mais difícil!
Hyde
5
O primeiro parágrafo parece plausível o suficiente para arquivos usando a tgzextensão. No entanto, o caso do OP usa tar.gz- e se esses hipotéticos ex-usuários do Win / DOS são como eu, a primeira coisa que eles dizem ao olhar para um arquivo é: 'Por que ele tem 2 extensões?'. Eles pesquisam no Google e obtêm rapidamente a resposta, o que explica especificamente que a tarcompressão é distinta. ;-)
underscore_d
17

Há uma diferença importante que pode tornar o uso tarimportante em algumas circunstâncias: além dos "metadados" mencionados pelo @jofel em sua resposta, tar registra o nome do arquivo no arquivo morto . Ao extraí-lo, você obtém o nome do arquivo original, independentemente do nome do arquivo.

No seu caso, o arquivo tar e o arquivo contém os nomes relacionados db.dump.tar.gze db.tar, mas suponha que você renomeie o arquivo tar para 20-Apr-16.dump.tgz, ou o que for. Untar isso com tar xvfz, e você recebe db.dump. Para comparação, descompacte 20-Apr-16.dump.gze você tem 20-Apr-16.dump. (Edit: como apontado nos comentários, o gzip também registra o nome do arquivo; mas normalmente não é usado ao descompactar). Um tararquivo morto também pode conter um nome de caminho relativo que coloca o arquivo extraído em um subdiretório.

Seu caso de uso determinará se esse tipo de persistência de nome de arquivo é necessário, ou mesmo desejado , ou é realmente indesejável. Mas certamente, independentemente da compactação, um tararquivo viaja de maneira diferente de um arquivo comum.

alexis
fonte
6
O gzip também registra o nome do arquivo original.
Psusi
8
Sim. O nome é opcional no cabeçalho gzip - obviamente não haverá um se você compactar a saída de streaming de um comando - e a maioria das ferramentas não o restaurará por padrão (por exemplo, você deve usar gzip --nameexplicitamente ao descompactar), mas você não precisa usar o tar para obter a persistência do nome do arquivo.
Miles
Obrigado por apontar isso, eu não sabia disso. Ainda assim, como esse não é o comportamento padrão, a questão é a seguinte: distribuir um arquivo no formato tar preserva o nome do arquivo original (e possivelmente o caminho relativo), sem a intervenção do destinatário. Distribuir um arquivo compactado (g) não.
21716 Alexis
8

Além de todas as outras respostas, descobri recentemente uma situação de script em que apenas um arquivo era esperado, mas um funcionário anterior escreveu os scripts com a possibilidade de mais de um arquivo ser gerado. Então, os arquivos foram tarzados e compactados, depois transferidos e expandidos.

Quando o processo chegou ao ponto de criar um arquivo de 4,3 GB, ele rolou e criou um arquivo .dump.001, além de um arquivo .dump. Todos os scripts continuaram funcionando.

Essa é a preguiça do sysadmin proativa definida!

Criggie
fonte
2

Gostaria de tar um único arquivo, para copiá-lo preservando o carimbo de data / hora (que é facilmente esquecido nos downloads). Permissões de arquivo e propriedade são menos importantes: download é um termo que se aplica a sistemas que não estão bem integrados.

Seja tar ou não, é prática comum compactar o arquivo para tornar os downloads mais rápidos - e evitar ficar sem espaço em disco.

Thomas Dickey
fonte
-1

O Tar é especialmente útil para vários arquivos não gravados em um sistema de arquivos formal, sempre foi. Se, por alguma razão, houver ocasionalmente, apenas 1 arquivo a ser gravado, não terá conseqüências reais. Eu posso dd meu .tar.gz diretamente para / dev / sdx sem considerar a partição ou o sistema de arquivos. Pode muito bem ser fita.

Geralmente, isso é feito porque o script ou processo foi copiado do código de herança. É claro que não há necessidade de tar se houver apenas um arquivo, mas deixa espaço para aprimoramento em vários arquivos ......

mckenzm
fonte