ZFS:更改压缩算法后重新压缩现有文件


14

我有一个使用于2011年创建的池,lzjb compression直到几年后才通过升级将压缩率设置为lz4。我估计至少有20%的内容(按空间)是在2013年之前创建的,这意味着仍使用进行压缩lzjb

我可以想到一些解决此问题并重新获得(某些)空间的选项:

  1. 备份并还原到新池。不太实用,因为我没有足够的冗余存储来保存临时副本。还原还需要使池脱机几个小时。

  2. 编写脚本以重新复制时间戳早于2013年的任何文件。可能存在风险,尤其是如果该命令在空格或其他特殊字符上阻塞并最终破坏了原始名称时,尤其如此。

有什么方法可以使ZFS使用当前压缩算法重新压缩任何旧块?有点像磨砂膏,但可以缓解压力。

一个相关的问题:有什么方法可以查看每种压缩算法的用法?zdb仅显示总体压缩状态,而不是将其分解为单独的算法。


2
我很确定您只命名了两个选项。另请参阅问题3013中的讨论,以了解为什么不存在此功能并且您可能根本不想这样做。
迈克尔·汉普顿

2
LZ4是据称最多 10%,更好的比LZJB压缩。如果您可以将20%的数据压缩10%更好,那么您最多可获得2%的可用空间。这值得么?
管道

1
如果编写Shell脚本进行复制,则将其添加export LC_ALL=C到脚本的开头,文件名中的所有非ASCII特殊字符将保持不变。保持空白和破折号完好无损,请使用双引号和--,例如cp -- "$SOURCE" "$TARGET"
PTS

4
@pipe Space是一个(非常)小的优势,但是我对减压速度更感兴趣。来自FreeBSD zpool-features联机帮助页:“通常,可压缩数据的lz4压缩比lzjb快约50%,不可压缩的数据快200%。解压缩时的lz4压缩也快约80%,压缩率则提高了约10%。 ”
rowan194 '18 -10-1

@pts我不会称呼遵守基本的shell编程规则(在变量周围使用双引号或使用--)“ trickier”。例如,这与避免SQL注入一样重要。
glglgl

Answers:


14

您必须将数据重新复制(全部或部分),或者zfs将数据发送/接收到新池或ZFS文件系统。

没有其他选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.