tarが終了すると、bzip2:(stdin):抽出後のEOFの後の末尾のガベージ無視が表示されます。

tarが終了すると、bzip2:(stdin):抽出後のEOFの後の末尾のガベージ無視が表示されます。

次のコマンドを使用して、大容量(3.9GB)tar.bz2ファイルを抽出しました。

tar -xjvf archive.tar.bz2

抜粋はうまくいきますが、印刷は終了します。

bzip2: (stdin): trailing garbage after EOF ignored

保管/検索に問題がありますか?私のデータの整合性が壊れていますか?

答え1

末尾のごみとは、ファイルの末尾に形式の一部ではない外部データがあるため、追加データを理解できないことを意味します(したがってごみです)bz2bz2

エラーを引き起こしたい場合:

$ echo Hello World | bzip2 > helloworld.bz2
$ echo Something not bzip2... >> helloworld.bz2
$ bunzip2 < helloworld.bz2
Hello World

bunzip2: (stdin): trailing garbage after EOF ignored

最初のコマンドは、メッセージを含む有効なbzip2ファイルを作成しますHello World

2番目のコマンドはSomething not bzip2...bzip2ファイルに追加されます。これはbzip2に圧縮されていないので、後のゴミです。

これを実行すると、bunzip2有効なデータが生成されますが、無関係で無視されたデータに関する警告が出力されます。

結局、圧縮された元のデータはそのままですが、ファイルの終わりに奇妙なことが起こります。 16進エディタで見ることが価値があるかもしれません。時には何が起こっているのかがわかりますが、時にはそうではありません。

$ hexdump -C helloworld.bz2 
00000000  42 5a 68 39 31 41 59 26  53 59 d8 72 01 2f 00 00  |BZh91AY&SY.r./..|
00000010  01 57 80 00 10 40 00 00  40 00 80 06 04 90 00 20  |.W...@..@...... |
00000020  00 22 06 86 d4 20 c9 88  c7 69 e8 28 1f 8b b9 22  |."... ...i.(..."|
00000030  9c 28 48 6c 39 00 97 80  53 6f 6d 65 74 68 69 6e  |.(Hl9...Somethin|
00000040  67 20 6e 6f 74 20 62 7a  69 70 32 2e 2e 2e 0a     |g not bzip2....|

bzip2圧縮データでは通常、このようなプレーンテキストを見ることができないため、この例は明らかです。

最大の質問は、ガベージが追加されたか(上記の例のように元のデータはそのまま残ります)、またはどのような損傷が発生したかです。エラーメッセージでは明確ではありません(bzip2自体は実際にはわかりません)。ただし、破損がランダムな場合は、通常、一部のtarエラーメッセージも表示されます。

答え2

ファイルの正確な圧縮オプション(おそらくデフォルトの圧縮オプション)がわかっている場合は、実際の後続データを取得できます。

実際に圧縮されたtarアーカイブのサイズを取得するには、再圧縮します。

受信したファイルのサイズを使用してください。元のファイルのサイズより小さくなければなりません(おそらく1バイト程度)。実際のデータを取得した後:

tail -c +12345 witTrailingData.tar.bz2

(大容量ファイルの場合は難しい場合があります)

関連情報