TISUnion / QuickBackupM

A backup / restore plugin, with multiple backup slots
GNU General Public License v3.0
148 stars 20 forks source link

[建议] 在配置文件中指定压缩级别(当使用tar_gz备份格式时) #43

Closed OptiJava closed 1 year ago

OptiJava commented 1 year ago

就相当于在命令行中的 gzip -[1-9] xxxx

(我是萌新有说错的谅解一下,谢谢

Fallen-Breath commented 1 year ago

能提供一下需求场景吗?虽然加个压缩等级参数没啥问题,但 QBM 这个插件并非是专注于压缩打包的备份插件。有什么场景是需要调整压缩等级的吗

OptiJava commented 1 year ago

感觉最主要的需求场景是磁盘比较小(比如我们服),但是又希望槽位稍微多一点,有调整压缩率这个配置项的话就可以把压缩率调到更高缓解磁盘压力,尽管这样会大幅增加备份时间 如果觉得备份时间太长,磁盘不那么紧张,但是磁盘大小又不足以支撑plain或者tar备份格式的话,也可以适当调小压缩率缩短备份时间以及缓解压缩带来的卡顿 个人感觉加上了这个之后可定制化程度高一点,能更好的满足各个环境的需求,也可以有针对性的调优((

Fallen-Breath commented 1 year ago

除了调整压缩级别,还能调整压缩算法来控制存档体积。得做一波测试来验证实际表现

背景知识:python 的 tarfile 库支持 3 种压缩算法:gzbz2xz。其中,gzbz2 压缩算法支持调节压缩等级,范围是 1 ~ 9。在默认参数下,tarfile.open 会使用最高等级的压缩等级 9 进行压缩。

对一个 7.7 GiB 的存档进行压缩测试,结果如下:

mode level time ratio
w 16.28s 100.23%
w:gz 1 129.4s 62.76%
w:gz 6 152.28s 62.55%
w:gz 9 184.55s 62.52%
w:bz2 1 519.24s 62.70%
w:bz2 9 521.14s 62.05%
w:xz 1807.81s 61.11%

硬件:i7-11800H,频率大概在 3.9~4.0GHz;SN730 1T

没有重复测试,结果不一定精准,但是能看出量级

可见:

计划修改:

OptiJava commented 1 year ago

好!( 另外之前@ishland在群里建议可以考虑zstd压缩格式,zstd压缩格式的性能和压缩率综合来看更好 这是zstd官方仓库的测试结果: image 但是使用zstd也有一些缺点,比如需要额外安装依赖,而且zstd本身的函数个人感觉太底层了,如果可以用zstd的话,推荐pyzstd(( (我是萌新有说错的谅解一下

Fallen-Breath commented 1 year ago

存在比 gzip、lzma 更加优秀的压缩算法是很正常的现象,但需要注意,本插件并非一个专注于高质量压缩算法的插件,选择压缩算法更看重易用性和兼容性,因此这一类压缩算法不作考虑

OptiJava commented 1 year ago

嗯(