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

尾随垃圾意味着文件末尾有不属于格式一部分的无关数据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

第二个命令附加Something not bzip2...到 bzip2 文件。这是尾随垃圾,因为它不是 bzip2 压缩的。

运行它bunzip2会产生有效数据,但会打印有关无关的、被忽略的数据的警告。

最后,原来压缩的数据仍然完好无损,但文件末尾发生了一些奇怪的事情。也许值得在十六进制编辑器中查看它;有时你可以说出发生了什么,有时则不能。

$ 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 存档的大小,请重新压缩它。

使用您获得的文件的大小 - 它应该小于原始文件的大小(可能仅一个字节)获取真实数据之后的部分:

tail -c +12345 witTrailingData.tar.bz2

(对于大文件来说这可能会很困难)

相关内容