为什么它比 archivemount 快?

为什么它比 archivemount 快?

目前我正在用来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甚至不计为已用内存。freehtop
  • 对于空文件,使用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 上运行时,将显示存档的内容层次结构(类似于在目录上运行时显示文件层次结构的方式)。通过选择列表中的文件之一,它将在只读缓冲区中打开所选文件。

同样,这不一定提供对图像或其他媒体的访问,但如果您需要的只是查看内容或仅访问基于文本的文件,那么这应该会有所帮助。

笔记:这不适用于所有存档格式。

相关内容