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

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

私は現在、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

答え2

いいえ。関連文書具体的に定義:

ダウンロードした圧縮ファイルは、gzipまたは他の解凍ツールを使用して拡張する必要があります。その後、Unix / LinuxまたはWinZipのtarユーティリティとWindowsおよびMacintoshプラットフォームのStuffIt Expanderを使用して、結果のtarファイルからBLASTデータベースファイルを抽出できます。

これが実際にスクリプトである場合は、次のように無視できます。プロセスの交換シェルがそれをサポートしている場合:

command <(zcat file.gz)

これにより、解凍などのcommand処理が可能になります。file.gz残念ながら、データベースの使用はスクリプトではなく爆発的な実行可能ファイルであり、解凍されることを期待しており、データベースファイルをパラメータとして渡さないため、これは解決できません。


言い換えれば、Nikita Kiprianovのアドバイスsqshfsの重要性は非常に重要です!

関連情報