ZFS块重复数据删除如何适合可变块大小?

根据“ZFS重复数据删除”的首个Googlesearch结果,


什么去重:文件,块或字节?

当整个文件被复制时,块级重复数据删除比文件级别重复数据删除要高一些,但与文件级别重复数据删除不同,它能够非常好地处理块级数据,如虚拟机映像。

ZFS提供块级重复数据删除

根据维基百科的ZFS文章

ZFS使用最大128千字节的可变大小块。 当前可用的代码允许pipe理员调整所使用的最大块大小,因为某些工作负载在大块中performance不佳。 如果启用数据压缩(LZJB),则使用可变块大小。 如果可以压缩块以适应较小的块大小,则磁盘上使用的较小大小可以使用较less的存储空间并提高IO吞吐量(尽pipe以增加CPU使用量为代价进行压缩和解压缩操作)。

我想确保我正确理解这一点。

假设压缩closures

如果我是一个1GB的随机填充文件,那么我写的第二个文件是相同的,除了中途通过,我改变了一个字节。 将该文件重复数据删除(除了已更改的字节块吗?)

如果我写一个字节的文件,它会占用整个128千字节吗? 如果不是,文件变长的话,块会变大吗?

如果一个文件需要两个64千字节的块(这是否会发生?),那么在一个128千字节的块

如果一个文件被缩短,那么它的部分块将被忽略,也许数据不会被重置为0x00字节。 半使用块将被删除?

ZFS重复数据删除在块(recordlength)上工作,它不知道/关心文件。 每个块都使用sha256进行校验和(默认可更改)。 如果校验和与另一个块匹配,它将只引用相同的logging,并且不会写入新的数据。 ZFS重复数据删除的一个问题是校验和保存在内存中,因此大型池需要大量内存。 所以在使用较大的logging长度时应该只应用重叠

假设logging长度为128k

如果我是一个1GB的随机填充文件,那么我写的第二个文件是相同的,除了中途通过,我改变了一个字节。 将该文件重复数据删除(除了已更改的字节块吗?)

是的,只有一个块不会被复制。

如果我写一个字节的文件,它会占用整个128千字节吗? 如果不是,文件变长的话,块会变大吗?

128k将被分配,如果文件大小增加到128k以上,将根据需要分配更多的块。

如果一个文件需要两个64千字节的块(这是否会发生?),那么在一个128千字节的块

一个文件将需要128K相同的文件将被重复数据删除

如果一个文件被缩短,那么它的部分块将被忽略,也许数据不会被重置为0x00字节。 半个被使用的块会被推断出来吗?

如果find完全相同的块是的

ZFS的可变大小的块如Yavor提到的已经不应该混淆随机variables大小的块,也称为内容定义的块或Rabin指纹。 这里有一个小小的谈话来描述不同点。

ZFS使用静态但可configuration的块大小。