나에게는 아카이브가 기록된 테이프가 있습니다 .tar.lzma
. .tar.lzma
아카이브 크기를 결정하는 방법있는 그대로? 즉, 압축된 아카이브의 크기를 구하는 것이고,아니요저장되는 압축되지 않은 파일의 크기 .tar
- 이상적으로는 테이프에서 디스크로 아카이브를 복사하여 검사할 필요가 없습니다.
문제의 테이프(LTO-6)는아니요LTFS와 같은 특수 파일 시스템을 사용하여 포맷합니다.
내 시스템은 amd64에서 Debian 11 Bullseye를 사용하고 있습니다. 이것이 관련이 있는지 언급해주세요.
답변1
.tar.lzma는 실제로 lzma
압축기를 통과한 tar 파일이므로 내부적으로 tar인지 여부는 중요하지 않습니다.
그래서,lzma 파일 형식.txt이 파일 형식을 구문 분석하는 데 필요한 모든 정보가 포함되어 있으며 놀랍도록 간단한 헤더로 시작됩니다.
1. File Format
+-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+
| Header | LZMA Compressed Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+
The .lzma format file consist of 13-byte Header followed by
the LZMA Compressed Data.
…
1.1.헤더
+------------+----+----+----+----+--+--+--+--+--+--+--+--+
| Properties | Dictionary Size | Uncompressed Size |
+------------+----+----+----+----+--+--+--+--+--+--+--+--+
(각각 +---+
은 1바이트, 비고)
따라서 여기에는 압축된 크기 정보가 없습니다!
무슨 일이 일어났는지 맞춰보세요.https://github.com/jljusten/LZMA-SDK/blob/master/DOC/lzma-specation.txt지적
압축되지 않은 크기 필드에 64비트가 모두 포함되어 있으면 압축되지 않은 크기를 알 수 없으며 스트림에 디코딩 지점의 끝을 나타내는 "끝 마커"가 있음을 의미합니다.
반대의 경우, "압축되지 않은 크기" 필드의 값이 ((2^64) - 1)이 아닌 경우, 지정된 바이트 수(압축되지 않은 크기)만큼 디코딩한 후 LZMA 스트림 디코딩을 완료해야 합니다. "끝 마커"가 있으면 LZMA 디코더도 이 마커를 읽어야 합니다.
LZMA는 다음을 알려주는 스트림 디코더입니다.
X 양의 데이터를 생성한 후 데이터 압축 해제를 중지해야 합니다. 또는 X가 2⁶⁴-1인 경우 "중지"라고 말하면 중지합니다.
따라서 압축 해제(압축 해제된 데이터 폐기) 외에는 압축된 아카이브의 길이를 이해하는 데 사용할 수 있는 정보가 없습니다.
(그런데 이것이 tar
내가 아카이브 형식이 나쁘다고 말하는 이유 중 하나입니다. 압축이 아카이브 컨테이너 주변이 아닌 내부에서 이루어졌다면 문제가 되지 않을 것입니다. 하지만 이것이 데이터의 모습이므로, 본질적으로 당신이 할 수 있는 일에는 아무런 문제가 없습니다...)