Comment déboguer ça? Ce problème est soudainement apparu au cours des deux derniers jours. Toutes les sauvegardes d'un site Web sont corrompues.
Si la sauvegarde est laissée comme tar
, il n'y a pas de problème, mais dès que le tar est compressé en tant que gz
ou xz
je ne peux pas les décompresser.
Il y a beaucoup de disque libre
Local disk space 2.68 TB total / 2.26 TB free / 432.46 GB used
Erreur
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%
Et pourquoi ça dit Skipping to next header
? Il n'a jamais fait cela auparavant. Quelque chose ne va vraiment pas dans certains fichiers.
Il y a environ 15k fichiers pdf, jpg ou png dans les répertoires.
commander
pv $backup_file | tar -izxf - -C $import_dir
Il doit y avoir des données qui corrompt la compression.
J'ai également essayé de vérifier la santé du disque dur en procédant comme suit:
# getting the drives
lsblk -dpno name
smartctl -H /dev/sda
smartctl -H /dev/sdb
Sur les deux disques, j'obtiens ceci:
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Comment savoir quels fichiers corrompent tar.gz? Je veux juste les supprimer.
mise à jour
J'ai maintenant copié tous les fichiers sur un autre serveur et j'ai exactement le même problème. Je peux tout tarer et l'extraire sans problème, mais dès que je veux compresser les fichiers, je ne peux pas les décompresser (gz / xz).
la source
tar -cf xxx.tar ...
sans compression, alorsgzip xxx.tar
? Est-ce que l'extrait de tarball est propre? Causepv
des problèmes? Que se passe-t-il si vous laissez tomber lapv ... | ...
tuyauterie et que vous exécutez simplement directementtar -cvzf xxx.tar.gz ...
alorstar -xvzf xxx.tar ...
?pv
.Réponses:
Votre fichier est tronqué ou corrompu,
xz
vous ne pouvez donc pas atteindre la fin des données.tar
se plaint parce que l'archive s'arrête au milieu, ce qui est logique carxz
n'a pas réussi à lire l'ensemble des données.Exécutez les commandes suivantes pour vérifier où se situe le problème:
Si se
cat
plaint, le fichier est corrompu sur le disque et le système d'exploitation a détecté la corruption. Consultez les journaux du noyau pour plus d'informations; généralement, le disque doit être remplacé à ce stade. Si seulement sexz
plaint, le système d'exploitation n'a détecté aucune corruption, mais le fichier n'est néanmoins pas valide (corrompu ou tronqué). Dans tous les cas, vous ne pourrez pas récupérer ce fichier. Vous devrez le récupérer à partir de vos sauvegardes hors ligne.la source
cat
ou quoi que ce soit d'autre signalerait qu'une partie du fichier est illisible). Les fichiers peuvent avoir été tronqués (par exemple parce que le disque s'est rempli lors de leur écriture).cat
etxzcat
ne retournent aucune erreur ..Je ne vois aucune mention de la façon dont les fichiers tar cassés sont créés?
Vous dites que ce sont des sauvegardes à partir d'un site Web, mais les problèmes que vous montrez concernent tous la restauration / décompression, donc là (la source) est l'endroit où vous devez mettre l'effort de dépannage.
Si les fichiers ne peuvent pas être décompressés après avoir déplacé la sauvegarde vers un autre ordinateur / emplacement, ils doivent être soit créés défectueux, soit interrompus pendant le transport.
Pour localiser la source de l'erreur:
pv
et sans-i
)pv
et sans-i
)Si aucun problème n'a été détecté jusqu'à présent:
pv
et sans-i
)Si aucun problème n'a été détecté jusqu'à présent, le script de sauvegarde ne crée pas l'archive de la même manière que vous le faisiez à la main (et devrait probablement être modifié pour faire ce que vous avez fait manuellement).
Assurez-vous également d'utiliser les chemins absolus de toutes les commandes impliquées. Si vous avez une mauvaise
$PATH
et / ou$LD_LIBRARY_PATH
variable et un intrus dans le système, vous utilisez peut-être des fichiers binaires de Troie, ce qui pourrait provoquer des effets secondaires involontaires.Il pourrait bien entendu également s'agir de
tar
versions incompatibles , à moins que les deux systèmes ne soient Debian. Vous pouvez essayer de forcer le mode POSIX des deux côtés.la source
Vous utilisez le drapeau
-i
qui est sous sa forme longue--ignore-zeros
. C'est pourquoi tar ne se plaint pas des fichiers corrompus. Donc, si vous souhaitez déboguer votre fichier tar, supprimez simplement l'-i
option et vous obtiendrez la liste des fichiers corrompus.Il existe également 2 autres façons de trouver des fichiers corrompus sous Unix (en général). Je cite une réponse donnée dans une autre question.
Comme référence: trouver des fichiers corrompus
la source
Le raisonnement en réponse par @MattBianco est ce que je suivrais méthodiquement pour résoudre ce problème particulier.
Les blocs mis à zéro indiquent EOF, mais cela dépend du facteur de blocage (la valeur par défaut est une constante compilée, généralement 20). Tar's
--compare
|--diff
semblent s'exécuter avec--ignore-zeros
(-i
) implicitement.Étant donné la complication supplémentaire de
pv
, je soupçonne que celatar -i
cause des problèmesxz
, en regardant tar man sur le facteur de blocage, je suggère d'abord de supprimer-i
Si cela ne vous aide pas, remplacez par:
Si vous ne faites que lire ceci après avoir googlé "tar: un bloc nul à N" et que vous ne lancez rien, essayez
--ignore-zeros
.la source