tar
を使用して、非常に大きな(マルチGB)bz2
ファイルのグループをアーカイブしています。
tar -tf file.tar
を使用してアーカイブ内のファイルを一覧表示すると、完了までに非常に長い時間がかかります(約10〜15分)。
同様に、cpio -t < file.cpio
の完了までにかかる時間は、プラスまたはマイナス数秒です。
したがって、(たとえば[tar -xf file.tar myFileOfInterest.bz2
を介して)アーカイブからファイルを取得するのと同じくらい時間がかかります。
アーカイブ内の個々のファイルをすばやく取得できるように、アーカイブですぐに利用できる「カタログ」を保持するアーカイブ方法はありますか?
たとえば、アーカイブ内の特定のバイトへのポインタと、取得するファイルのサイズ(およびその他のファイルシステム固有の詳細)を格納するある種のカタログ。
アーカイブ内のファイルを効率的に取得できるツール(またはtar
またはcpio
への引数)はありますか?
tar(およびcpioとafioとpaxと同様のプログラム)は、ストリーム指向の形式です。これらは、テープに直接ストリーミングするか、別のプロセスにパイプすることを目的としています。理論的には、ファイル/ストリームの最後にインデックスを追加することは可能ですが、実行できるバージョンはわかりません(ただし、これは便利な拡張機能です)
既存のtarまたはcpioアーカイブには役立ちませんが、そのようなインデックスを含むアーカイブファイルを作成し、アーカイブ内の個々のファイルにすばやく直接アクセスできる別のツールdar(「ディスクアーカイブ」)があります。 。
darがunix/linux-distに含まれていない場合は、次の場所にあります。
このようなアーカイブにはSquashFSを使用できます。です
私が知っている唯一の欠点は、それが読み取り専用であることです。
http://squashfs.sourceforge.net/http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
インデックスは保存されませんが、 star
はtar
よりも高速であるとされています。さらに、長いファイル名をサポートし、ファイル属性のサポートが向上しています。
ご存知のとおり、ファイルの解凍には時間がかかり、インデックスがあったとしても、抽出速度の要素になる可能性があります。
編集:xar
も参照してください。アーカイブ内のファイルに関する情報を含むXMLヘッダーがあります。
参照ページから:
XarのXMLヘッダーにより、アーカイブに含まれるファイルに関する任意のメタデータを含めることができます。 xarは、ファイルのサイズ、変更時間、作成時間などの標準的なUNIXファイルメタデータに加えて、ext2fsおよびhfsファイルビット、UNIXフラグ、拡張属性への参照、Mac OS X Finder情報、Mac OSなどの情報を保存できます。 Xリソースフォーク、およびファイルデータのハッシュ。
ThorbjørnRavn Anderser は正しいです。 GNU= tarはデフォルトで「シーク可能な」アーカイブを作成します。ただし、-nオプションが指定されていない場合、これらのアーカイブを読み取るときにその情報は使用されません。-nオプションを使用すると、300GBから7GBファイルを抽出しました7GBの読み取り/書き込みに必要な時間内のアーカイブ-nなしでは1時間以上かかり、結果は生成されませんでした。
圧縮がこれにどのように影響するかはわかりません。私のアーカイブは圧縮されていません。 現在の(1.26)GNU tarは、圧縮を外部プログラムにオフロードするため、圧縮アーカイブは「シーク可能」ではありません。
破損したインデックスを2回以上再構築する必要があったため、インデックスを保存する唯一のアーカイブ形式はZipです。
それは私が知っている索引付けではありませんが、大きなファイルでダンプと復元を使用し、ランダムファイルを選択するために対話モードで復元ツリーをナビゲートすることは非常に高速です。
p7Zip-full
パッケージにアクセスできる場合は、7z(7Zip)アーカイブ/圧縮形式を使用できます。
Ubuntuでは、次のコマンドを使用してインストールできます。
$ Sudo apt-get install p7Zip-full
アーカイブを作成するには、7z a <archive_name> <file_or_directory>
を使用できます。ファイルを圧縮せず、そのまま「保存」したい場合は、次のように-mx0
オプションを使用できます。
$ 7z a -mx0 myarchive.7z myfile.txt
Creating archive myarchive.7z
次に、7z e
を使用してファイルを抽出できます。
$ 7z e myarchive.7z
Processing archive: myarchive.7z
Extracting myfile.txt
または、grep
で検索するのに便利な7z l
を使用して、アーカイブのインデックスを一覧表示できます。
$ 7z l myarchive.7z | grep
2014-07-08 12:13:39 ....A 0 0 myfile.txt
これは、整合性をテストするt
オプション、アーカイブにファイルを追加/更新するu
、およびファイルを削除するd
でもあります。
重要な注意
Do not含まれるファイルの所有者とグループを保存しないため、Linuxファイルシステムのバックアップには7Zip形式を使用します。
私は信じるGNU= tarはあなたが望むことを実行することができますが、そう言っている決定的なリソースを見つけることができません。
いずれの場合も、インデックス付きのアーカイブ形式が必要です(これにより、必要な操作を実行できます)。残念ながら、Zipファイルはこれほど大きくなる可能性があります。