다음 명령을 사용하여 대용량(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
유효한 데이터가 생성되지만 관련이 없고 무시된 데이터에 대한 경고가 인쇄됩니다.
결국 압축된 원본 데이터는 그대로인데, 파일 끝부분에서 이상한 일이 벌어집니다. 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
(대용량 파일의 경우 어려울 수 있음)