我想知道是否有一种方法可以将压缩文件作为目录集成到文件系统中(我认为这与挂载有点不同)?
例如,人们可以将文件下载compressed-file.tar.gz
到本地硬盘,然后cd compressed-file.tar.gz
从压缩文件夹中执行并运行脚本,或者cp some-file ..
提取其中一个文件。
我知道Btrfs支持压缩,但我不想更改我拥有的文件系统(ext3)来支持此功能。
答案1
您可以使用该命令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
参考
答案2
你要么在谈论FUSE
文件系统(用户空间中的文件系统 - Linus称它们为玩具)或自定义编译的内核或squashfs. Squash
不完全如您所描述的那样 - 例如,您不能简单地安装 tarball - 无论如何,不能使用内核支持的 VFS - 但您当然可以mksquash
任意数量的文件或目录并将生成的存档安装为只读。您可以选择xz, lzma, or gz
压缩方式。Squash
一直在使用 - 如果您曾经使用过实时 Linux 映像,那么很有可能它是squashed.
我会告诉你一个我使用的技巧,squashfs.
我喜欢创建一个btrfs
图像文件,并用btrfstune -S 1
它来制作一个seed
体积。然后我将该图像放入squashfs
档案中。从那里我可以mount -o loop
看到图像。 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"
突然我就利用了btrfs
scopy-on-write
功能和自动写入压缩和 squashfs
卓越的压缩全部存储在 RAM 中和在内核中。
答案3
您可以使用avfs
进而使用 shell 函数使其更易于使用(例如acd compressed-file.tar.gz
)。