目前我正在使用ArchiveMount安装一个 123,000 kb 的存档,其中包含超过 300 万个文件。到目前为止,它已经安装了 5 个多小时,但仍未完成。
有没有更好的方法来挂载.tar.gz文件?我正在尝试挂载到一个文件夹,解压缩它需要一些演出。我什至不需要写模式,只读就足够了。
mxm*_*nkn 14
我写了一个更快的替代ratarmount,它“对我有用”,因为这个问题一直困扰着我。
您可以像这样安装和使用它:
pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level
Run Code Online (Sandbox Code Playgroud)
完成后,您可以像任何 FUSE 安装一样卸载它:
fusermount -u mount-folder
Run Code Online (Sandbox Code Playgroud)
这取决于你测量什么。
这是内存占用和首次挂载所需时间的基准,以及简单cat <file-in-tar>命令和简单find命令的访问时间。
创建了包含每个 1k 文件的文件夹,并且文件夹的数量各不相同。
左下图显示误差线,指示cat <file>10 个随机选择的文件的最小和最大测量时间。
ratarmount -P 0上最先进的处理器,因为archivemount只使用解码bzip2的一个核心。自 1.2.0 版起indexed_bzip2支持块并行解码。--gzip-seek-point-spacing <spacing in MiB>以减少点的总数,从而减少要生成的数据。mmap打开。通过所使用的存储器mmap示出了与存储器使用时甚至不计为使用的内存free或htop。find挂载点来获取存档内容的大量元数据通常比存档挂载慢一个数量级以上,这可能是因为 Python 和 SQLite 层与纯 C 实现相比,或者因为我正在使用FUSE 在单线程模式下。有关更深入的基准测试,请参阅Github 页面。
小智 7
您还可以创建一个压缩的 squashfs 图像
mksquashfs /etc squashfs.img -comp xz
mkdir img
mount -o squashfs,ro squashfs.img img
Run Code Online (Sandbox Code Playgroud)
为此,您需要提取 tar.gz archvie。
优点还在于图像具有比gz更好的容错性。
小智 6
这里的问题在于格式,TAR(磁带存档)格式是为顺序访问而设计的,而不是随机访问。gzip 是 tar 的一个很好的补充,因为它是一种基于流的压缩格式,也不适用于随机访问。
因此,一个不直接与压缩块交互的高级工具,每次需要读取任何内容时都必须解析整个文件,首先为您提供文件列表,然后缓存可能失效并再次读取它,然后对于您复制的每个文件,它可能会再次通读。您可以制作一个工具来记住每个文件的位置,以及它需要解压缩哪些块才能获得它,但似乎很少有人为此烦恼。
如果你想让它运行得更快,做一个tar tzf file.tar.gz > filelist,在vim、gedit或其他任何东西中打开那个文件列表,删除你不需要的文件行,保存,然后用tar xzf file.tar.gz -T filelist -C extracted/.
要随机访问压缩文件,您可能应该使用带有 posix 扩展名的 zip、rar 或如 dru8274 建议的那样、squashfs 或什至打开压缩的 ZFS,或者 btrfs(如果 btrfs 在阅读时已压缩工作)。
| 归档时间: |
|
| 查看次数: |
8949 次 |
| 最近记录: |