我目前没有对 btrfs 格式的磁盘使用压缩,但想知道如果启用它,我会节省多少空间。如果没有实际在磁盘上启用压缩并比较前后的可用空间(或者破坏性较小但资源密集度更高,将我的所有数据复制到另一个启用压缩的 btrfs 格式的磁盘),有什么方法可以估计什么对于给定的压缩算法和级别,节省的空间是多少?如果 btrfs 工具无法做到这一点,是否有一些第三方工具可以迭代我系统中的所有文件以进行压缩试运行,从而跳过 btrfs 本身会跳过的所有相同的不可压缩文件?
答案1
btrfs 支持三种压缩器:gzip、lzo 和 zstd。您几乎肯定不想使用 gzip(与其他替代方案相比,它的压缩速度更慢且效率更低); LZO 和 ZSTD 在高速设置下通常非常具有可比性。
所以,运行zstd
; btrfs 中 zstd 的默认压缩级别为 3,但级别 1 到 15 也可用。zstd -3 -v < infile > /dev/null
将向您展示以 3 级压缩该文件时的压缩率;替换3
为 1 到 15 之间的任何值,以了解您正在做的速度/压缩比权衡(请注意,这是单线程完成的;我认为内核 btrfs 压缩器实际上可能是多线程的,因此将-T0
您的压缩设置添加到看看使用更多内核时的速度有多快)。
请注意,这并不比启用压缩并将cat
文件内容转换为新文件更“智能”。 btrfs 不会自动压缩所有现有文件,只会压缩新文件。
请注意,我会谨慎对待您使用的文件系统。例如,我不知道GRUB的btrfs驱动是否支持读取压缩文件。并且:btrfs 中不太常用的磁盘格式选项在过去会导致数据损坏(例如,您可能不想使用 btrfs-internal RAID 5,尽管用户空间工具不会警告您关于它)。因此,如果您需要高读取性能,或者如果您的空间很小但文件可压缩且文件彼此不重复,请尝试压缩,但要在您有备份的文件上进行压缩。
答案2
我建议将示例(10% 或类似)复制到启用压缩选项的新 btrfs。然后,该工具compsize
(通常打包在名为 的包中btrfs-compsize
)将向您显示给定文件或目录的压缩统计信息。
以下是 (tokyabinet) 文件 g.tch 的输出示例:
Processed 1 file, 4863847 regular extents (4863847 refs), 0 inline
Type Perc Disk Usage Uncompressed Referenced
TOTAL 11% 67G 593G 593G
zstd 11% 67G 593G 593G