对于事务性文件系统,数据是使用写复制语义管理的。数据永远不会被覆写,并且任何操作序列会全部被提交或全部被忽略。此机制意味着文件系统绝对不会因意外断电或系统崩溃而被损坏。因此,无需存在 fsck 等效项。尽管最近写入的数据片段可能丢失,但是文件系统本身将始终是一致的。此外,只有在写入同步数据(使用 O_DSYNC 标志写入)后才返回,因此同步数据决不会丢失。
校验和与自我修复数据
对于 ZFS,所有数据和元数据都通过使用用户可选择的算法来执行校验和操作。提供校验和操作的传统文件系统出于卷管理层和传统文件系统设计的必要,会逐块执行此操作。传统设计意味着某些故障模式(如将完整块写入不正确的位置)可能会生成校验和正确的数据,而该数据实际上并不正确。ZFS 校验和的存储方式可确保检测到这些故障模式并可以正常地从其中进行恢复。所有校验和操作与数据恢复都是在文件系统层执行的,并且对应用程序是透明的。
此外,ZFS 还会提供自我修复数据。ZFS 支持具有不同数据冗余级别的存储池,包括镜像和 RAID-5 变化形式。检测到坏的数据块时,ZFS 从另一个冗余的副本中提取正确数据,并将错误数据替换为正确副本以对其进行修复。
独一无二的可伸缩性
ZFS 经过了全新设计,是目前为止可伸缩性最高的文件系统。该文件系统本身是 128 位的,所允许的存储空间是 256 quadrillion zettabyte (256x1015 ZB) 的存储。所有元数据都是动态分配的,因此在首次创建时无需预先分配 inode,否则就会限制文件系统的可伸缩性。所有算法在编写时都考虑到了可伸缩性。目录最多可以包含 248(256 万亿)项,并且对于文件系统数或文件系统中可以包含的文件数不存在限制。
标签: