看了这个帖子的楼主回复 https://www.v2ex.com/t/1102533#reply10
@ryd994 就因为 zfs 有 dedup 才用的,省硬盘。如果不用的话,为啥不直接 mdadm,组软 raid ,后期直接上 raid 卡也成。
我百度查了下去重的可选项
文件级的去重对文件作为整体来计算 hash 签名,如果处理的是自然的文件,则此方法需要的消耗最小,但是缺点是对文件的任何修改都需要重新计算文件的 hash 签名,即对文件的任何修改,将使得此文件之前节约的空间消失,因为两个文件将不再相同。此中方法比较适合类似于文件 JPEG ,MPEG ,但是对于像虚拟机镜像(大文件)文件将无效,因为即使他们只是很小的一部分不同,但是文件级别他们将是不同的文件。
块级别的去重(相同大小的块),相比文件级的去重,需要更多的计算消耗,但是他能够很好地对像虚拟机镜像类似的大文件去重。大部分的虚拟机镜像文件是重复数据,例如镜像文件中的操作系统部分。使用块级的去重将使得只有镜像特别的数据才占用额外的空间,相同的数据将共享。
字节级别的去重,将需要更多的计算消耗来决定重复数据的开始和结束区域,不管怎么说,此方法对 mail 服务器来说是理想的选择,例如一个邮件的附件可能出现很多次,但是使用块级别去重时他们并不能被优化。此类型的去重一般用来一些应用程序的去重中,例如 exchangeserver ,因为应用程序知道他管理的数据,可以在内部容易地去重。
那我开启字节级别去重 ,不久相当于把数据库中的字段重复数据进行去重了?
1
iBugOne 2 天前 via Android 1
不用想了,zfs 没这么离谱的功能,能按 recordsize/volblocksize 进行块级别的去重就不错了
|
2
MRlaopeng OP |
4
ryd994 2 天前 via Android
“那我开启字节级别去重 ,不久相当于把数据库中的字段重复数据进行去重了?”
zfs 的粒度没这么细。zfs 的块大小一般是 4kb 到几 mb 。除非你数据库里都是大段的原始数据(数据库不应该这么用),否则 zfs 的 dedup 对你真没什么用。 正文中的给虚拟机去重实际上大概率也没用。因为虚拟磁盘的内容未必能对齐到块边界,所以实际去重效果也很差。真正能有效利用到 zfs 去重的场景很少。也就是我说的一般人用不到去重功能。 |
5
ericFork 2 天前
为了省硬盘,那开启压缩也是一个方向啊,CPU 过剩的前提下,lz4 或者 zstd-fast 带来的那点额外的 CPU 开销可以接受
|