私にはアーカイブが記録されたテープがあります.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
私がアーカイブ形式が悪いと言う理由の1つです。圧縮がアーカイブコンテナの周りではなく内部で行われた場合は問題になりません。しかし、これがデータの外観なので、本質的にあなたができることには何の問題もありません。ありません...)