是否可以将zip和tar.gz文件作为目录集成到文件系统中


14

我想知道是否存在一种将压缩文件作为目录集成到文件系统中的方法(我认为这与挂载有点不同)?

例如,可以将A下载compressed-file.tar.gz到其本地硬盘驱动器,然后cd compressed-file.tar.gz从压缩文件夹中运行脚本并运行操作,或者cp some-file ..提取其中一个文件。

我知道Btrfs支持压缩,但是我不想更改具有(ext3)的文件系统来支持此功能。

Answers:


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 ...]

有关archivemount更多信息,请参见手册页。通常没有安装它,因此您可能需要安装该软件包。也称为archivemount。例如,在Fedora 19上:

$ sudo yum install archivemount

参考文献


8

您是在谈论FUSE文件系统(用户空间中的文件系统-Linus 称其为玩具),还是自定义的已编译内核,或者squashfs. Squash不完全是您所描述的-例如,您不能简单地挂载tarball-无论如何都不能使用内核支持的VFS-但您当然可以mksquash任意数量的文件或目录,并将生成的归档文件安装为只读。您可以选择xz, lzma, or gz压缩。Squash一直被使用-如果您曾经使用过实时Linux映像,那么机会非常好squashed.

我将告诉您squashfs.我喜欢使用的一个窍门,我想创建一个btrfs图像文件并btrfstune -S 1用来使其成为一个seed。然后,我将该图像保存在squashfs存档中。从那里,我可以mount -o loopimage.sfs,并从内mount -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,这是一个不错的答案,我从中学到了很多,但是我接受了另一个答案,因为这很重要。
Helium

2
@Mohsen-我完全理解,我可能会做同样的事情-重点在于。有时我们要求的答案不是我们得到的答案,这可能是一件好事,因为我们首先是需要提出的答案。无论如何,我非常感谢这个评论。
mikeserv 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.