【问题标题】:Squashfs check compressed file sizeSquashfs 检查压缩文件大小
【发布时间】:2018-07-07 00:58:55
【问题描述】:

squashfs 文件系统中压缩后,有什么方法可以检查特定文件的最终大小?

我正在查看 mksquashfs/unsquashfs 命令行选项,但找不到任何东西。

mksquashfs 中使用 -info 选项只会打印压缩前的大小。

谢谢

【问题讨论】:

  • 根本没有压缩文件大小的概念,因为压缩发生在块级别,而不是文件级别。多个文件可以存在于同一个块中(特别是如果它们很小),并且压缩算法的表和 c 的开销。在他们之间共享。
  • 想一想,计算粗略比率所需的一切都在那里,所以这是可行的;这不是“免费”的东西。你愿意为此编写一些代码吗? (如果不是,问题应该在Unix & LinuxSuperUser 上,而不是这样)。如果你愿意写一些代码,你会用什么语言? (这不是漂亮的代码,但是一个用于解析 squashfs 的原生 Python 库)。您需要多少准确度?
  • @CharlesDuffy 感谢您的回复。这很清楚。是的,也许 SO 不适合这个问题。
  • 为什么我总是问这些类型的问题!?谢谢各位!现在我痴迷于添加此功能!它只能近似,因为我需要确定字典中有多少条目,其他文件/块可能共享这些条目,然后计算它需要多少块......真是一团糟。

标签: squashfs


【解决方案1】:

这在大粒度上是不可行的,因为压缩是在块级别完成的,而不是文件级别。

一个文件可能会在开始 50kb 处标记为 解压块 50 创建的缓冲区的大小,并继续到解压块 52 结束 50 个字节(忽略此处的片段,这是一个单独的关注)——但这不会让您映射回该文件开始的块 50 的 压缩 副本内的位置。 (您可以轻松确定块 51 的压缩比,但在我们的示例中,您无法轻松计算出包含在 50 和 52 中的文件部分的比率,因为它们与其他内容共享)。

因此信息不会被公开,因为它不容易获得。这实际上使大量(相似)小文件的存储效率显着提高,因为所有这些文件都使用一个压缩上下文(并且解压缩一个块以检索一个文件可能意味着您旁边的文件已经在内存中解压缩)... 但如果没有可能毫无根据的假设(例如假设一个块中的所有内容共享该块的平均比率),它对尝试回溯每个单独项目的压缩程度没有帮助,因为这些项目不是单独压缩的首先。

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多