スクリプトを解凍する必要があるときに圧縮アーカイブを使用する方法

スクリプトを解凍する必要があるときに圧縮アーカイブを使用する方法

私は現在、NCBI BlastデータベースをBLASTDB形式からFASTA形式に変換するスクリプトを呼び出すプログラムを開発しています。スクリプトは通常、圧縮されていないBLASTDBデータベースのディレクトリで実行されることを期待し、-dbオプションを使用して変換する必要があるデータベースを指定します(同じ名前ではあるが終わりの異なる複数のファイルで構成されています)。

サーバーのストレージ容量は非常に限られているので、データベースを圧縮アーカイブに保存したいと思います。だから私の質問は:そのアーカイブでスクリプトを使用する方法はありますか、それとも可能ですか(おそらくbashリダイレクトを介して?)圧縮されていないアーカイブをこのスクリプトに直接ストリーミングしますか?

よろしくお願いします:)

ベストアンサー1

次のコマンドを使用してアーカイブをマウントできます。ヒューズアーカイブ:

mkdir /mnt/some-directory
fuse-archive your-archive.tar.gz /mnt/some-directory

ただし、アーカイブの内容をSquashFSファイルに再パッケージすることができ、tarとは異なり、SquashFSはランダムアクセス用に設計された圧縮ファイルシステムなので、おそらくより良いパフォーマンスを得ることができます。使用tar2sqfsツール再包装:

zcat your-archive.tar.gz | tar2sqfs -c xz -b 1048576 mountable-archive.squashfs

次に、rootとして次のようにします。

mount -t squashfs mountable-archive.squashfs /mnt/some-directory

または、一般ユーザーとして以下を使用します。ヒューズを絞る:

squashfuse mountable-archive.squashfs /mnt/some-directory

ルートとしてインストールされたSquashFSは、3つの方法すべてで最高のパフォーマンスを提供します。


インストールされているディレクトリに/mnt/some-directoryアーカイブの内容を見つけ、すべてのスクリプトを実行できます。しかし、これが行われることに注意してください。読み取り専用目次。このディレクトリに書き込む必要がある場合(ファイルの作成や更新など)、次を使用してoverlayfs(または他のオーバーレイインストーラaufs)、次を追加する必要があります。

mkdir /mnt/upper
mkdir /mnt/work
mkdir /mnt/readwrite-directory

mount -t overlay -o upperdir=/mnt/upperdir,lowerdir=/mnt/some-directory,workdir=/mnt/work mountable-archive-rw /mnt/readwrite-directory

その後、この範囲内で作業してください/mnt/readwrite-directory。これはアーカイブ内のすべてのオブジェクトで埋められますが、読み取り/書き込みです。すべての新しいファイルまたはアップデートは、前のステップの読み取り専用squashfsまたはヒューズアーカイブマウントポイントに/mnt/upper書き込まれます。/mnt/some-directory

おすすめ記事