Récupérer l'archive corrompue

J'ai un tarball corrompu sur mes mains. Ma première tentative de récupération s'est déroulée comme suit:

$ tar --ignore-failed-read --ignore-command-error -xf tarball.tar tar: Skipping to next header tar: Archive contains '180738 0' where numeric mode_t value expected tar: Archive contains '0.445647 -9.' where numeric time_t value expected tar: Archive contains '.259273 ' where numeric uid_t value expected tar: Archive contains obsolescent base-64 headers tar: Archive contains '-0.94874' where numeric gid_t value expected tar: text from a text file is here: implausibly old time stamp 1969-12-31 18:59:59 tar: more text file contents are here: Unknown file type 'p', extracted as normal file tar: Skipping to next header tar: Skipping to next header tar: Exiting with failure status due to previous errors 

Cela n'a pas beaucoup extrait de l'archive avant d'être erronée. Le statut de sortie est 2, ce que la page tar man indique est une erreur fatale.

La documentation de " gzip Recovery Toolkit " a suggéré ceci:

 cpio -F tarball.tar -i -v 

Cela a extrait 1,2G d'un tarball 1.8G, ce qui est plutôt bien. Il s'arrête avec un tas d'ordures entré après l'invite du terminal – il n'est pas imprimé à l'écran, c'est comme si je l'avais tapé et n'a pas frappé le return encore.

Y a-t-il un moyen de faire mieux? Y a-t-il un moyen d'essayer de "sauter par-dessus les mauvais morceaux" de l'archive?

Avec --ignore-zeros tar semble lire tout le file tar.

 tar -R --ignore-failed-read --ignore-command-error --ignore-zeros -xvf tarball.tar [...] block 3670356: ** Block of NULs ** block 3670357: ** Block of NULs ** block 3670358: ** Block of NULs ** block 3670359: ** End of File ** tar: Exiting with failure status due to previous errors 

Il y a beaucoup d'erreurs Block of NULs , donc il semble que le contenu soit irrécupérable.

    Vous n'utilisez pas tar mais gtar et le message d'erreur:

    tar: Archive contains obsolescent base-64 headers

    est liée à un bug bien connu dans gtar qui est rapporté à plusieurs resockets depuis plus de 20 ans. Il y a eu des changements de source dans le passé qui ont rendu ce problème less probable mais ces changements n'ont pas encore vraiment résolu le problème connexe dans gtar .

    Si vous voulez vérifier votre archive, vous pouvez utiliser le plus tartest du package d' star et vous pouvez essayer d'utiliser l'écanvas pour extraire l'archive et l' star -i au cas où cette écanvas rapporterait des erreurs.