1. 前言
ZFS文件系统是一种革命性的新文件系统,它从根本上改变了文件系统的管理方式,具有其他任何现有文件系统都没有的特性和优点。ZFS是健壮的、可伸缩的、易于管理的。
ZFS文件系统是什么
2. ZFS池存储
ZFS使用存储池的概念来管理物理存储。历史上,文件系统构建在单个物理设备之上。为了处理多个设备并提供数据冗余,引入了卷管理器的概念来提供单个设备的表示,这样就不需要修改文件系统来利用多个设备。这种设计增加了另一层复杂性,并最终阻止了某些文件系统的发展,因为文件系统无法控制虚拟卷上数据的物理位置。
ZFS池存储
ZFS完全消除了卷管理。ZFS将设备聚合到一个存储池中,而不是强制您创建虚拟卷。存储池描述了存储的物理特征(设备布局、数据冗余等),并充当可以创建文件系统的任意数据存储。文件系统不再局限于单个设备,允许它们与池中的所有文件系统共享磁盘空间。您不再需要预先确定文件系统的大小,因为文件系统会在分配给存储池的磁盘空间内自动增长。当添加新存储时,池中的所有文件系统都可以立即使用额外的磁盘空间,而无需进行额外的工作。在许多方面,存储池的工作类似于虚拟内存系统:当将内存DIMM添加到系统中时,操作系统不会强制您运行命令来配置内存并将其分配给各个进程。系统上的所有进程都会自动使用额外的内存。
3. 事务性语义
ZFS是一个事务性文件系统,这意味着文件系统状态在磁盘上总是一致的。传统的文件系统会在适当的位置覆盖数据,这意味着如果系统在分配数据块和将其链接到某个目录之间失去动力,那么文件系统将处于不一致的状态。历史上,这个问题是通过使用fsck命令来解决的。该命令负责检查和验证文件系统状态,并尝试修复过程中的任何不一致。这个文件系统不一致的问题给管理员带来了巨大的痛苦,并且fsck命令从来不能保证修复所有可能的问题。最近,文件系统引入了日志记录的概念。日志记录过程将动作记录在单独的日志中,如果发生系统崩溃,可以安全地重播这些日志。这个过程引入了不必要的开销,因为数据需要写两次,经常会导致一组新的问题,比如当日志不能正确重播时。
事务性语义
在事务性文件系统中,数据是使用写时拷贝语义来管理的。数据永远不会被覆盖,任何操作序列要么被完全提交,要么被完全忽略。因此,文件系统永远不会因意外断电或系统崩溃而损坏。尽管最近编写的数据片段可能丢失,但文件系统本身始终是一致的。此外,同步数据(使用O_DSYNC标志写入)总是保证在返回之前写入,因此它永远不会丢失。
4. 校验和和自修复数据
使用ZFS,所有数据和元数据都使用用户可选择的校验和算法进行验证。由于卷管理层和传统文件系统设计的需要,提供校验和验证的传统文件系统在每个块的基础上执行校验和验证。传统的设计意味着某些失败,例如将一个完整的块写入一个错误的位置,可能导致数据不正确,但是没有校验和错误。ZFS校验和的存储方式可以检测到这些故障,并可以优雅地从故障中恢复。所有校验和验证和数据恢复都在文件系统层执行,对应用程序是透明的。
此外,ZFS还提供了自修复数据。ZFS支持具有不同程度数据冗余的存储池。当检测到一个坏数据块时,ZFS从另一个冗余副本中获取正确的数据并修复坏数据,用正确的数据替换它。
5. 无与伦比的可伸缩性
ZFS文件系统的一个关键设计元素是可伸缩性。文件系统本身是128位的,允许256千兆字节的存储。所有元数据都是动态分配的,因此在第一次创建文件系统时,不需要预先分配索引节点或以其他方式限制文件系统的可伸缩性。所有的算法都考虑到了可伸缩性。目录最多可以有
无与伦比的可伸缩性
本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:
https://www.linuxrumen.com/rmxx/1535.html