web-dev-qa-db-ja.com

Zipおよびtar.gzファイルをディレクトリとしてファイルシステムに統合することは可能ですか

圧縮ファイルをディレクトリとしてファイルシステムに統合する方法(マウントとは少し異なると思います)はあるのでしょうか。

たとえば、compressed-file.tar.gzをローカルハードドライブにダウンロードしてから、cd compressed-file.tar.gzを実行して圧縮フォルダ内からスクリプトを実行するか、cp some-file ..を実行してファイルの1つを抽出します。

Btrfs は圧縮をサポートしていますが、この機能をサポートするために(ext3)が持っているファイルシステムを変更したくありません。

14
Helium

コマンドarchivemountを使用して、.tar.gzなどのアーカイブをマウントできます。

$ ls
files.tgz    mnt/

$ archivemount files.tgz mnt

$ ls mnt
file1    file2

[... Perform desired read/write operations on the archive via mnt/ ...]

$ umount mnt

[... Any changes are saved to the archive ...]

詳細については、archivemountのマニュアルページを参照してください。多くの場合、インストールされないため、パッケージをインストールする必要があります。 archivemountとも呼ばれます。 Fedora 19では、例えば:

$ Sudo yum install archivemount

参考文献

20
slm

あなたはFuseファイルシステム(ユーザースペースのファイルシステム-Linus それらをおもちゃと呼ぶまたはカスタムコンパイルされたカーネルOR squashfs. Squashは、説明どおりではありません。たとえば、tarballを単純にマウントすることはできません。カーネルでサポートされているVFSを使用しない場合は、とにかく、ファイルまたはディレクトリをいくつでもmksquashできます。結果のアーカイブを読み取り専用でマウントします。 xz, lzma, or gz圧縮を選択できます。 Squashは常に使用されます-ライブLinuxイメージを使用したことがある場合は、squashed.である可能性が非常に高いです。

squashfs.で使用する1つのトリックを紹介します。btrfsイメージファイルを作成し、btrfstune -S 1を使用して seedボリュームにするのが好きです。 。次に、そのイメージをsquashfsアーカイブに入れました。そこからmount -o loop the image.sfsを実行し、そのmount -o loopからbtrfs画像を取得できます。

btrfs seedボリュームは最初はread-onlyとしてマウントされます。これは、squashedループマウント内に含まれていることを考慮すると予想されます。しかし、私がそうするなら:

GB_tmp_loop=$(
    fallocate -l $((1024*1024*1024)) /tmp/1GB_tmp.img &&
    losetup -f --show $_
)
btrfs device add "$GB_tmp_loop" "${btrfs_seed=/path/to/btrfs_image_mount}"
umount "$btrfs_seed"
mount -o compress-force=lzo,autodefrag,rw "$GB_tmp_loop" "$btrfs_seed"

突然、btrfsscopy-on-write機能と自動書き込み圧縮[〜#〜]および[〜#〜]squashfss優れた圧縮RAMですべて[〜#〜]および[〜#〜]カーネル内。

8
mikeserv