私の手に破損したターボールがあります。私の最初の回復の試みは次のようになりました。
$ 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
これは、問題が発生する前にタールボールから多くを抽出しません。終了ステータスは 2 で、tar のマニュアルページには致命的なエラーが表示されます。
出荷書類ビーチ」gzip回復ツールキット「提案は次のとおりです。
cpio -F tarball.tar -i -v
これは1.8Gタールボールの1.2Gを抽出し、これはかなり良い結果です。端末プロンプトに多くのゴミを入力すると停止します。画面に印刷されません。入力したがまだEnterキーを押していないのと同じです。
より良い方法がありますか? 「タールボールの不良ブロックをスキップする」方法はありますか?
tarを使用して--ignore-zeros
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
エラーが多く、Block of NULs
内容を回復できないようです。
答え1
tar
しかし、を使用していませんし、gtar
エラーメッセージは次のとおりです。
tar: Archive contains obsolescent base-64 headers
gtar
20年以上繰り返し報告されたよく知られたエラーに関連しています。過去にこの問題の発生の可能性を減らすためにソースコードを変更しましたが、これらの変更によってまだ問題は実際には解決されていませんgtar
。
アーカイブを確認するにはパッケージtartest
の内容を使用でき、starがエラーを報告した場合はstar
starを使用してアーカイブを抽出できます。star -i