테이프에서 파일 크기 읽기

테이프에서 파일 크기 읽기

나에게는 아카이브가 기록된 테이프가 있습니다 .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내가 아카이브 형식이 나쁘다고 말하는 이유 중 하나입니다. 압축이 아카이브 컨테이너 주변이 아닌 내부에서 이루어졌다면 문제가 되지 않을 것입니다. 하지만 이것이 데이터의 모습이므로, 본질적으로 당신이 할 수 있는 일에는 아무런 문제가 없습니다...)

관련 정보