我使用以下命令提取了一个大(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
(对于大文件来说这可能会很困难)