次のコマンドを使用して、大容量(3.9GB)tar.bz2ファイルを抽出しました。
tar -xjvf archive.tar.bz2
抜粋はうまくいきますが、印刷は終了します。
bzip2: (stdin): trailing garbage after EOF ignored
保管/検索に問題がありますか?私のデータの整合性が壊れていますか?
答え1
末尾のごみとは、ファイルの末尾に形式の一部ではない外部データがあるため、追加データを理解できないことを意味します(したがってごみです)bz2
。bz2
エラーを引き起こしたい場合:
$ 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
(大容量ファイルの場合は難しい場合があります)