Como depurar isso? Esse problema apareceu repentinamente nos últimos dias. Todos os backups de um site estão corrompidos.
Se o backup for deixado como tar
, não há problemas, mas assim que o alcatrão é compactado gz
ou xz
não posso descompactá-los.
Há muito disco livre
Local disk space 2.68 TB total / 2.26 TB free / 432.46 GB used
erro
tar: Skipping to next header[===============================> ] 39% ETA 0:01:14
tar: A lone zero block at 2291466===============================> ] 44% ETA 0:01:13
tar: Exiting with failure status due to previous errors
878MiB 0:00:58 [15.1MiB/s] [===================================> ] 44%
E por que diz isso Skipping to next header
? Isso nunca foi feito antes. Algo está terrivelmente errado em alguns dos arquivos.
Existem cerca de 15k arquivos pdf, jpg ou png nos diretórios.
comando
pv $backup_file | tar -izxf - -C $import_dir
Deve haver alguns dados que corrompem a compactação.
Eu também tentei verificar a saúde do HDD fazendo o seguinte:
# getting the drives
lsblk -dpno name
smartctl -H /dev/sda
smartctl -H /dev/sdb
Nas duas unidades, recebo o seguinte:
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Como posso descobrir quais arquivos estão corrompendo o tar.gz? Eu só quero excluí-los.
atualizar
Agora copiei todos os arquivos para outro servidor e eu tenho exatamente o mesmo problema. Posso tar tudo e extraí-lo sem problemas, mas assim que quero compactar os arquivos, não consigo descompactá-los (gz / xz).
fonte
tar -cf xxx.tar ...
sem a compactação, entãogzip xxx.tar
? Esse tarball é extraído de forma limpa? Estápv
causando problemas? O que acontece se você deixar cair apv ... | ...
tubulação e apenas executado diretamentetar -cvzf xxx.tar.gz ...
depoistar -xvzf xxx.tar ...
?pv
.Respostas:
Seu arquivo está truncado ou corrompido; portanto,
xz
não é possível chegar ao final dos dados.tar
reclama porque o arquivo para no meio, o que é lógico, poisxz
não conseguiu ler todos os dados.Execute os seguintes comandos para verificar onde está o problema:
Se houver
cat
reclamação, o arquivo está corrompido no disco e o sistema operacional detectou a corrupção. Verifique os logs do kernel para mais informações; geralmente o disco precisa ser substituído neste momento. Se apenasxz
reclamar, o sistema operacional não detectou nenhuma corrupção, mas o arquivo não é válido (corrompido ou truncado). De qualquer forma, você não poderá recuperar este arquivo. Você precisará recuperá-lo dos seus backups offline.fonte
cat
ou qualquer outra coisa informaria que uma parte do arquivo é ilegível). Os arquivos podem ter sido truncados (por exemplo, porque o disco ficou cheio enquanto os gravava).cat
exzcat
não devolve quaisquer erros ..Não vejo nenhuma menção de como os arquivos tar quebrados são criados?
Você diz que são backups de um site, mas os problemas que você está mostrando são todos ao restaurar / descompactar, então é aí que (a fonte) é onde você precisa fazer o esforço para solucionar problemas.
Se os arquivos não puderem ser descompactados depois de mover o backup para outra máquina / local, eles deverão ser criados com defeito ou danificados no transporte.
Para localizar a fonte do erro:
pv
e sem-i
)pv
e sem-i
)Se nenhum problema encontrado até agora:
pv
e sem-i
)Se nenhum problema foi encontrado até agora, o script de backup não cria o arquivo da mesma maneira que você criou ao fazê-lo manualmente (e provavelmente deve ser modificado para fazer o que você fez manualmente).
Além disso, certifique-se de usar os caminhos absolutos de todos os comandos envolvidos. Se você tem uma variável ruim
$PATH
e / ou$LD_LIBRARY_PATH
variável e um invasor no sistema, pode estar usando binários de Trojan, o que pode causar efeitos colaterais não intencionais.É claro que também pode haver
tar
versões incompatíveis envolvidas, a menos que ambos os sistemas sejam debian. Você pode tentar forçar o modo POSIX nos dois lados.fonte
Você está usando a bandeira
-i
que, em sua forma longa, é--ignore-zeros
. É por isso que o tar não reclama dos arquivos que estão corrompidos. Portanto, se você deseja depurar seu arquivo tar, basta remover a-i
opção e você obterá a lista de arquivos corrompidos.Existem também duas outras maneiras de encontrar arquivos corrompidos no unix (em geral). Cito uma resposta dada em outra pergunta.
Como referência: Localizando arquivos corrompidos
fonte
A linha de raciocínio em resposta de @MattBianco é o que eu metodicamente seguiria para resolver esse problema específico.
Blocos zerados indicam EOF, mas isso depende do fator de bloqueio (o padrão é uma constante compilada, geralmente 20). Tar's
--compare
|--diff
parecem executar implicitamente com--ignore-zeros
(-i
).Dada a complicação extra de
pv
, suspeito quetar -i
esteja causando problemasxz
, olhando para o alcatrão no fator de bloqueio, sugiro que remova primeiro-i
Então, se isso não ajudar, substitua por:
Se você está lendo este artigo no Google "tar: um bloco zero solitário em N" e não está canalizando nada, tente
--ignore-zeros
.fonte