ZFS: 关于压缩(Compression)

支持压缩是 zfs 文件系统的一个重要特性,zfs 的压缩功能对用户是透明的,也就是说压缩和解压操作由 zfs 文件系统自动完成。支持的压缩算法有 LZJB, ZLE, gzip[1-9],lz4。

zfs 的压缩算法对 CPU 的消耗很低,并且某些压缩算法速度很快,因此压缩的代价是很低的,建议开启 zfs 文件系统的压缩功能。

另外, 可以对 zfs 池的一部分 dataset 开启压缩功能,也可以对池的一部分 dataset 不开启压缩; 开启压缩功能后,仅对新写入的数据生效,dataset 上之前的数据不会被压缩。

1 zfs 的 compression 选项

1
compression=on | off | lzjb | gzip | gzip-N | zle | lz4

备注:zfs 默认关闭压缩功能, 设置 compression=on 将默认使用 LZJB 压缩方式。

2 gzip 压缩举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@francs:/data2 # zfs set compression=gzip zp1/data1  

root@francs:/data2 # zfs get all zp1/data1 | grep compress
zp1/data1 compressratio 1.00x -
zp1/data1 compression gzip local
zp1/data1 refcompressratio 1.00x -

root@francs:/data1 # cd /data1
root@francs:/data1 # lrz
lrz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring 0000000600005ca200000032...
100% 16384 KB 5461 KB/sec 00:00:03 0 Errors

root@francs:/data1 # du -sm 0000000600005ca200000032
4 0000000600005ca200000032

备注: gzip 默认压缩级别为6, 上传了一个 17 M 的文件到压缩目录 /data1,压缩后为 4M。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@francs:/data1 # zfs get all zp1/data2 | grep compress  
zp1/data2 compressratio 1.00x -
zp1/data2 compression off default
zp1/data2 refcompressratio 1.00x -

root@francs:/data1 # cd /data2
root@francs:/data2 # lrz
lrz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring 0000000600005ca200000032...
100% 16384 KB 5461 KB/sec 00:00:03 0 Errors

root@francs:/data2 # du -sm *
17 0000000600005ca200000032

备注: /data2 目录未开启压缩功能,文件未被压缩,还是 17 M。

3查看压缩比

1
2
3
root@francs:/data1 # zfs get compressratio zp1/data1   
NAME PROPERTY VALUE SOURCE
zp1/data1 compressratio 4.45x

关于各种压缩算法的效率,德哥这篇 blog 有测试,可以参考,这里不作演示了; 值得一提的是 lz4 压缩算法作为 lzjb 的替代,具有较高的压缩和解压性能,同时具有折中的压缩比,推荐使用。
ZFS compression algorithm lzjb, gzip, gzip-[0-9], zle, lz4 compare

4 参考

原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/238633.html

(0)
上一篇 2022年2月6日
下一篇 2022年2月6日

相关推荐

发表回复

登录后才能评论