可以使用重复数据删除 (dedup) 属性来删除 ZFS 文件系统中的冗余数据。如果文件系统启用了 dedup 属性,则会以同步方式删除重复的数据块。结果是仅存储唯一的数据,在文件之间共享通用组件。例如:
# zfs set dedup=on tank/home
只有在执行了以下步骤确定系统是否支持重复数据删除后,才能启用驻留在生产系统上的文件系统中的 dedup 属性。
确定数据是否将受益于重复数据删除产生的空间节省。如果不能进行重复数据删除,则启用 dedup 毫无意义。运行以下命令非常占用内存:
# zdb -S tank Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 1 2.27M 239G 188G 194G 2.27M 239G 188G 194G 2 327K 34.3G 27.8G 28.1G 698K 73.3G 59.2G 59.9G 4 30.1K 2.91G 2.10G 2.11G 152K 14.9G 10.6G 10.6G 8 7.73K 691M 529M 529M 74.5K 6.25G 4.79G 4.80G 16 673 43.7M 25.8M 25.9M 13.1K 822M 492M 494M 32 197 12.3M 7.02M 7.03M 7.66K 480M 269M 270M 64 47 1.27M 626K 626K 3.86K 103M 51.2M 51.2M 128 22 908K 250K 251K 3.71K 150M 40.3M 40.3M 256 7 302K 48K 53.7K 2.27K 88.6M 17.3M 19.5M 512 4 131K 7.50K 7.75K 2.74K 102M 5.62M 5.79M 2K 1 2K 2K 2K 3.23K 6.47M 6.47M 6.47M 8K 1 128K 5K 5K 13.9K 1.74G 69.5M 69.5M Total 2.63M 277G 218G 225G 3.22M 337G 263G 270G dedup = 1.20, compress = 1.28, copies = 1.03, dedup * compress / copies = 1.50
如果估计的重复数据删除比大于 2,则重复数据删除可能会带来空间节省。
在此示例中,由于重复数据删除比 (dedup = 1.20) 小于 2,因此不建议启用 dedup。
请确保系统具有足够的内存来支持重复数据删除,如下所示:
每个核心中重复数据删除表项约为 320 字节。
用分配的块数乘以 320。例如:
in-core DDT size = 2.63M x 320 = 841.60M
当重复数据删除表可以完全装入内存时,重复数据删除的性能最佳。如果不得不将重复数据删除表写入磁盘,则性能将降低。如果对内存资源不足的文件系统启用重复数据删除,则在执行与文件系统相关的操作期间,系统性能可能会降低。例如,删除启用了重复数据删除的内存资源不足的大型文件系统时可能会影响系统性能。