解決策 1:
tar (および cpio と afio と pax および同様のプログラム) は、ストリーム指向の形式です。これらは、テープに直接ストリーミングするか、別のプロセスにパイプすることを目的としています。理論的には、ファイル/ストリームの末尾にインデックスを追加することは可能ですが、それを行うバージョンは知りません (ただし、これは便利な拡張機能になります)。
既存の tar または cpio アーカイブには役に立ちませんが、別のツール dar (「ディスク アーカイブ」) があり、そのようなインデックスを含むアーカイブ ファイルを作成し、アーカイブ内の個々のファイルにすばやく直接アクセスできます。 .
dar が unix/linux-dist に含まれていない場合は、次の場所で見つけることができます:
http://dar.linux.free.fr/
解決策 2:
そのようなアーカイブには SquashFS を使用できます。です
- ヒューズ ドライバを使用してアクセスするように設計されています (ただし、従来のインターフェイスは存在します)
- 圧縮 (ブロックサイズが大きいほど効率的)
- Linux カーネルに含まれています
- UID/GID と作成時刻を保存
- エンディアンに対応しているため、移植性が高い
私が知っている唯一の欠点は、読み取り専用であることです。
http://squashfs.sourceforge.net/http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
解決策 3:
インデックスを格納しませんが、star
tar
よりも速いと言われています .さらに、より長いファイル名をサポートし、ファイル属性のサポートが向上しています。
ご承知のとおり、ファイルの解凍には時間がかかり、インデックスがあったとしても解凍速度の要因になる可能性があります。
編集: xar
も参照してください。 .アーカイブ内のファイルに関する情報を含む XML ヘッダーがあります。
参考ページより:
<ブロック引用>Xar の XML ヘッダーを使用すると、アーカイブ内に含まれるファイルに関する任意のメタデータを含めることができます。ファイルのサイズ、変更および作成時間などの標準の UNIX ファイル メタデータに加えて、xar は、ext2fs および hfs ファイル ビット、UNIX フラグ、拡張属性への参照、Mac OS X Finder 情報、Mac OS などの情報を保存できます。 X リソース フォーク、およびファイル データのハッシュ。
解決策 4:
Thorbjørn Ravn Anderser は正しいです。 GNU tar はデフォルトで「シーク可能な」アーカイブを作成します。ただし、-n オプションが指定されていない場合、これらのアーカイブを読み取るときにその情報は使用されません。 -n オプションを使用すると、7GB の読み取り/書き込みに必要な時間内に、300GB のアーカイブから 7GB のファイルを抽出できました。 -n がないと、1 時間以上かかり、結果も得られませんでした。
圧縮がこれにどのように影響するかわかりません。アーカイブが圧縮されていません。 現在の (1.26) GNU tar は圧縮を外部プログラムにオフロードするため、圧縮されたアーカイブは「シーク可能」ではありません。
解決策 5:
破損したインデックスを複数回再構築する必要があったため、インデックスを格納するアーカイブ形式として私が知っているのは ZIP だけです。