Возможно ли интегрировать файлы zip и tar.gz как каталог в файловую систему

14

Интересно, есть ли способ интегрировать (думаю, немного отличается от монтирования) сжатые файлы как каталоги в файловую систему?

Например, можно загрузить файл compressed-file.tar.gzна свой локальный жесткий диск, затем выполнить cd compressed-file.tar.gzи запустить скрипт из сжатой папки или выполнить cp some-file ..извлечение одного из файлов.

Я знаю, что Btrfs поддерживает сжатие, но я не хочу менять имеющуюся у меня файловую систему (ext3) для поддержки этой функции.

гелий
источник

Ответы:

20

Вы можете использовать команду 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 ...]

Смотрите man-страницу для archivemountполучения дополнительной информации. Часто он не устанавливается, поэтому вам, вероятно, потребуется установить пакет. Это также называется archivemount. На Fedora 19, например:

$ sudo yum install archivemount

Ссылки

SLM
источник
8

Вы либо говорите о FUSEфайловой системе (файловая система в пользовательском пространстве - Линус называет их игрушками ), либо о специально скомпилированном ядре ИЛИ squashfs. Squashне совсем так, как вы описали - вы не можете просто смонтировать tarball, например - не с VFS, поддерживаемой ядром, в любом случае - но Вы можете, конечно, mksquashлюбое количество файлов или каталогов и смонтировать полученный архив только для чтения. У вас есть выбор xz, lzma, or gzсжатия. Squashиспользуется все время - если вы когда-либо использовали живые образы Linux, шансы очень хороши, это былоsquashed.

Я расскажу вам одну хитрость, с которой squashfs.мне нравится создавать btrfsфайл изображения и использовать его btrfstune -S 1для создания seedтома . Затем я положил это изображение в squashfsархив. От там я могу и изнутри , что на изображении. mount -o loopimage.sfsmount -o loopbtrfs

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"

Внезапно я пользуясь btrfsей copy-on-writeфункциональность и сжатия автоматической записи и squashfs преимущественного сжатие все в оперативной памяти и в ядре.

mikeserv
источник
спасибо, mikeserv, это хороший ответ, и я многому у него научился, но я принял другой ответ, потому что он более важен.
Гелий
2
@ Mohsen - я полностью понимаю, и я, вероятно, сделал бы то же самое - это было более важно. Иногда ответы, которые мы просим, ​​- это не те ответы, которые мы получаем, и это, вероятно, хорошо, так как именно мы должны спрашивать в первую очередь. В любом случае, я очень ценю этот комментарий.
mikeserv