preenchimento de alcatrão com zeros

10

Ao executar um tar em um arquivo compactado bz2, encontro o seguinte erro,

tar: dump.sql: arquivo encolhido por 19573448400 bytes; preenchimento com zeros

Alguém pode apontar o que pode estar causando esse problema?

Obrigado.

Iliyas Shirol
fonte

Respostas:

8

Não é um erro. É INFO.

Estou disposto a apostar que você está compactando / descompactando uma imagem de Máquina Virtual ou um arquivo de alocação escassa.

O Bzip2 detectou que o arquivo é na sua maioria zeros e o compactou para que eles não estejam no arquivo compactado.

Essa é a diferença entre o tamanho real e o tamanho aparente dos arquivos esparsos.

Tom O'Connor
fonte
Encontrei um tópico que corrobora e explica mais detalhadamente: groups.google.com/d/msg/comp.os.linux.misc/RES9Kvw7kO4/…
Martin Eden
1
Se não for um erro, por que produzir um código de saída diferente de zero?
Ben Collins
No meu caso, o arquivo .tar.bz2 realmente continha dados corrompidos: continha um monte de NUL bytes no local indicado na mensagem, onde deveria conter dados diferentes de zero. Eu não tenho ideia do porquê. Quando tentei criar outro .tar.bz2 apenas desse arquivo, ele funcionou corretamente.
200_success
1
Isso aconteceu comigo ao criar um arquivo tar (não compactado) bruto. Definitivamente não relacionado ao bzip. De qualquer forma, a codificação do comprimento da execução não é exatamente incomum, portanto, não é algo que o bzip incomodaria nos relatórios.
precisa saber é o seguinte
1

O arquivo em questão foi chamado dump.sql, portanto, provavelmente não é um arquivo compactado bz2. - De qualquer forma, o problema não tem nada a ver com bz2 ou tipo de conteúdo do arquivo.

A mensagem significa que um stat()arquivo relatou um tamanho diferente da quantidade que realmente pode ser lida no arquivo. Isso pode acontecer, se o arquivo foi alterado enquanto tarestava funcionando.

Isso também acontece em “arquivos virtuais” como os do sistema de arquivos Linux / sys. Muitos deles são relatados com 4096 bytes de tamanho (um valor arbitrário). Uma vez read(), eles retornam apenas alguns bytes.

Robert Siemer
fonte