校验和及其在 ZFS 中的应用
端到端校验和是 ZFS 的一个关键特性,也是 ZFS 区别于其他 RAID 实现和文件系统的重要特点。端到端校验和的优势包括:
在从介质读取数据时检测数据损坏
如果可能,检测到损坏的块会自动修复,通过适当配置的池中的 RAID 保护或冗余副本(参见 zfs 的
copies
属性)定期擦洗可以检查数据,以检测和修复潜在的介质退化(位腐烂)和其他来源的损坏
ZFS 复制流(
zfs send
和zfs receive
)上的校验和确保接收的数据不会被中间存储或传输机制损坏
校验和算法
ZFS 中的校验和算法可以针对数据集(文件系统或卷)进行更改。每个块使用的校验和算法存储在块指针(元数据)中。块的校验和在写入块时计算,因此更改算法仅影响更改后发生的写入操作。
可以通过设置 checksum
属性来更改数据集的校验和算法:
zfs set checksum=sha256 池名/数据集名
校验和 |
适用于去重 和 nopwrite? |
与其他 ZFS 实现兼容? |
备注 |
---|---|---|---|
on |
参见备注 |
是 |
|
off |
否 |
是 |
不要使用
|
fletcher2 |
否 |
是 |
已弃用的 Fletcher
校验和实现,请使用
|
fletcher4 |
否 |
是 |
Fletcher 算法,
也用于
|
sha256 |
是 |
是 |
去重数据集的 默认算法 |
noparity |
否 |
是 |
不要使用
|
sha512 |
是 |
需要池特性
|
加盐的 |
skein |
是 |
需要池特性
|
加盐的 |
edonr |
参见备注 |
需要池特性
|
加盐的 出于谨慎考虑,Edon-R
在与去重一起使用时需要
验证,因此它将自动使用
|
blake3 |
是 |
需要池特性
|
加盐的 |
校验和加速器
ZFS 能够将校验和操作卸载到 Intel QuickAssist Technology (QAT) 适配器上。
校验和微基准测试
某些 ZFS 功能在加载 zfs.ko
内核模块时使用微基准测试来确定校验和的最佳算法。微基准测试的结果可以在 /proc/spl/kstat/zfs
目录中观察到。获胜的算法被报告为“最快的”,并成为默认算法。可以通过设置 zfs 模块参数来覆盖默认值。
校验和 |
结果文件名 |
|
---|---|---|
Fletcher4 |
/proc/spl/kstat/zfs/fletcher_4_bench |
zfs_fletcher_4_impl |
all-other |
/proc/spl/kstat/zfs/chksum_bench |
zfs_blake3_impl, zfs_sha256_impl, zfs_sha512_impl |
禁用校验和
虽然禁用校验和可能会提高 CPU 性能,但 ZFS 社区普遍认为这是一个极其糟糕的想法。不要禁用校验和。