【问题标题】:Archival filesystem or format档案文件系统或格式
【发布时间】:2011-09-03 02:07:33
【问题描述】:

我正在寻找一种用于存储已退役系统档案的文件类型。目前,我们主要使用 tar.gz,但从 200GB 的 tar.gz 存档中仅查找和提取几个文件并不方便,因为 tar.gz 不支持任何类型的随机访问读取配置。 (在你明白之前,使用 FUSE 安装 tgz 并不能让它变得更好。)

这是我们目前发现的——我想知道还有哪些其他选择:

  • tar.gz -- 糟糕的随机访问读取
  • zip -- 不支持某些高级文件系统功能(例如:硬链接、xattrs)
  • squashfs -- 创建大型存档(数小时)和糟糕的用户空间工具需要很长时间。

我正在尝试一种简单的方法,将功能齐全的文件系统映像创建到尽可能小的空间中——cloop 映像中的 ext2,但这似乎不是一个特别用户友好的解决方案。

大概这个问题之前已经解决了——有没有我遗漏的选项?

【问题讨论】:

  • 这是一道编程题吗?

标签: linux filesystems archive compression


【解决方案1】:

由于这是 Stack Overflow,我假设您正在寻找库/代码。我想你可以查看我们的SolFS 虚拟文件系统。它不支持硬链接,但支持备用流(对于 xattr)并且支持标签(对于 unix 属性)。接下来,支持符号链接,您可以在执行存档时将硬链接转换为符号链接。

【讨论】:

    【解决方案2】:

    Mksquashfs 是一个高度并行化的程序,它利用所有可用的内核来最大限度地提高性能。如果您发现构建时间非常长,那么您可能有很多重复文件,或者机器内存不足并出现抖动。

    要调查性能,你可以先

    在 Mkssquashfs 上使用 -no-duplicates 选项,例如

    mksquashfs xxx xxx.sqsh -no-duplicates

    重复检查是一项缓慢的操作,必须按顺序进行,并且在具有大量重复项的文件集上,这会成为其他并行程序的瓶颈。

    在 Mksquashfs 运行时检查内存使用/空闲内存,如果系统正在垃圾,将出现非常低的性能。研究 -read-queue、-write-queue 和 -fragment-queue 选项以控制 Mksquashfs 在运行时缓存多少数据。

    Tar 和 zip 没有并行化并且只使用一个内核,因此很难相信您对 Mksquashfs 压缩性能的抱怨。

    此外,我从未见过任何其他关于用户空间程序“差”的报告,Mksquashfs 和 Unsquashfs 具有一组高级选项,可以非常精细地控制压缩过程,并允许用户选择压缩哪些文件 -而且这些选项比 tar 之类的程序要早很多。

    除非你能给出具体的例子说明为什么工具不好,否则我会把它归结为工人指责工具的常见情况,而真正的问题在别处。

    正如我之前所说,您的系统可能正在抖动,因此性能很差。默认情况下,Mksquashfs 使用所有可用的内核,以及至少 600 MB 的 RAM(在大型文件系统上增加到 2 GB 或更多)。这是为了提高性能,因为在内存中缓存数据会减少磁盘 I/O。这种“开箱即用”的行为对于具有大量内存和空闲系统的典型用户来说是好的。这是大多数用户想要的,一个 Mksquashfs,它“最大化”系统以实现尽可能快的文件系统创建。

    它不适用于 RAM 低的系统,或具有消耗大量可用 CPU 和/或内存的活动进程的系统。当每个进程争用可用的 CPU 和 RAM 时,您只会发生资源争用。这不是 Mksquashfs 的错,而是用户的错。

    Mksquashfs -processor 选项用于限制 Mksquashfs 使用的处理器数量,-read-queue、-write-queue 和 -fragment-queue 选项用于控制 Mksquashfs 使用多少 RAM。

    【讨论】:

    • 嗨,菲利普——我有点受宠若惊,您在这里创建一个帐户只是为了回答我的问题。感谢您的性能提示。 SquashFS 是我目前最喜欢的选项,但我怀念 tar 的灵活性。例如。 --one-file-system 标志,或仅提取特定文件(当您无法挂载 FS 时)。我已经考虑过贡献一些用户空间代码来帮助使 squashfs 在功能上与 tar 更具可比性,但我认为我永远不会找到时间......我也不确定你是否想要它们。
    • 澄清一下——我所说的“差”用户空间工具的意思是这些工具不适用于这种类型的使用(通用归档)。它们非常适合创建 linux 引导文件系统映像……这也是大多数人想要使用 squashfs 的目的。
    • 也见这里,但 squashfs 是只读的:unix.stackexchange.com/questions/80305/…
    【解决方案3】:

    ZFS 有相当不错的压缩 capabilities,如果有记忆的话。也就是说,我从未真正使用过它。 :-)

    【讨论】:

      【解决方案4】:

      virt-sparsify 可用于稀疏化和(通过 qemu 的 qcow2 gzip 支持)压缩几乎任何 linux 文件系统或磁盘映像。生成的镜像可以挂载到虚拟机中,也可以通过guestmount挂载到主机上。

      有一个新的 ndbkit xz plugin 可以用于更高的压缩,它仍然保持良好的随机访问性能(只要你问 xz/pixzreset compression on block boundaries)。

      【讨论】:

      • 所以你是说将原始图像转换为稀疏的 qcow2 图像?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2020-10-08
      • 2011-07-12
      • 2021-05-25
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多