目前我正在用来ArchiveMount
挂载一个 123,000 kb 的存档,其中包含超过 300 万个文件。到目前为止,已经安装了5个多小时了,仍然没有完成。
有没有更好的方法来挂载.tar.gz
文件?我正在尝试安装到一个文件夹,并且解压缩需要一些时间。我什至不需要写入模式,只需只读就足够了。
答案1
我写了一个更快的替代方案拉塔芒特,这“对我有用”,因为这个问题一直困扰着我。
您可以像这样安装和使用它:
pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level
完成后,您可以像任何 FUSE 安装一样卸载它:
fusermount -u mount-folder
为什么它比 archivemount 快?
这是内存占用和首次安装所需时间的基准,以及一个简单cat <file-in-tar>
命令和一个简单find
命令的访问时间。
每个包含 1k 个文件的文件夹被创建,并且文件夹的数量是变化的。
左下图显示误差条,指示cat <file>
10 个随机选择的文件的最小和最大测量时间。
优点
- 基准测试中未显示,但 Ratarmount 可以使用以下命令挂载文件预先存在的索引 sidecar 文件不到一秒钟就完成了效率大大提高与 archivemount 相比,每个后续安装。
- Ratarmount 配有进度指示器,因此与 archivemount 相比,用户不必尝试等待数小时而得不到任何反馈。
- 获取文件内容已安装存档的通常是快得多与 archivemount 和 fusion-archive 相比,并且不会随着存档大小或文件数量的增加而增加,导致观察到的最大加速约为 5 个数量级!
- 安装压缩包2,压缩包, 和xz档案实际上已经成为快点与大多数现代处理器上的 archivemount 和 fusion-archive 相比,
ratarmount -P 0
因为它使用多个内核来解码这些压缩。indexed_bzip2
支撑块并行解码从 1.2.0 版本开始,rapidgzip
. - 内存消耗拉塔蒙特的生长较少的与 archivemount 相比,对于不压缩,bzip2 根本不随存档大小而增长,因为文件名不保存在内存中,而是存储在 SQLite 数据库的磁盘上。
- 这压缩包后端随着存档大小线性增长,因为查找的数据比 bzip2 所需的简单两个 64 位偏移量大数千倍。如果这成为一个问题,您可以增加搜索点间距,以
--gzip-seek-point-spacing <spacing in MiB>
减少点的总数,从而减少要生成的数据。 - 的内存使用情况兹标准后端看起来很大只是因为它经常
mmap
打开。当使用或显示内存使用情况时,所使用的内存mmap
甚至不计为已用内存。free
htop
- 这压缩包后端随着存档大小线性增长,因为查找的数据比 bzip2 所需的简单两个 64 位偏移量大数千倍。如果这成为一个问题,您可以增加搜索点间距,以
- 对于空文件,使用ratarmount和archivemount挂载似乎不受解压或I/O带宽的限制,而是受创建内部文件索引的算法的限制。
缺点
- 获取大量元数据对于通过调用
find
挂载点演示的存档内容来说,是一个数量级慢点与 archivemount 相比,主要是因为 Python 和 Python 中的间接寻址。
有关更深入的基准测试,请参阅Github页面。
答案2
您还可以创建压缩的 squashfs 映像
mksquashfs /etc squashfs.img -comp xz
mkdir img
mount -o squashfs,ro squashfs.img img
为此,您需要提取 tar.gz archvie。
优点还在于图像比gz具有更好的容错能力。
答案3
这里的问题在于格式,TAR(磁带归档)格式是为顺序访问而不是随机访问而设计的。 gzip 是 tar 的一个很好的补充,因为它是基于流的压缩格式,也不用于随机访问。
因此,不直接与压缩块交互的高级工具,每次需要读取任何内容时都必须解析整个文件,首先获取文件列表,然后缓存可能会失效并再次读取它,然后对于您复制的每个文件,它可能会再次读取它。你能制作一个工具来记住每个文件的位置,以及需要解压缩哪些块才能获得它,但似乎很少有人为此烦恼。
如果您希望速度更快,请执行tar tzf file.tar.gz > filelist
,打开该文件列表维姆,编辑器或者其他什么,删除不需要的文件行,保存,然后使用tar xzf file.tar.gz -T filelist -C extracted/
.
要随机访问压缩文件,您应该使用带有 posix 扩展名的 zip、rar,或者如 dru8274 建议的那样,squashfs,甚至打开压缩的 ZFS,或者 btrfs(如果 btrfs 在读取时已启用压缩)。
答案4
这不会涵盖所有用例,因为它限制了文本编辑器的使用。但是,如果您只关心读取访问,您可能会发现这对某些情况很有帮助。vim
,当在 tarball 上运行时,将显示存档的内容层次结构(类似于在目录上运行时显示文件层次结构的方式)。通过选择列表中的文件之一,它将在只读缓冲区中打开所选文件。
同样,这不一定提供对图像或其他媒体的访问,但如果您需要的只是查看内容或仅访问基于文本的文件,那么这应该会有所帮助。
笔记:这不适用于所有存档格式。