服务端相关 / 42 Linux 写时复制文件系统

Linux 写时复制文件系统

前小节介绍了 Linux 日志文件系统,本小节介绍 Linux 写时复制文件系统。

1. ZFS 文件系统介绍

ZFS 文件系统的英文名称为 Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个 128 位文件系统。最初是由 Sun 公司为 Solaris 10 操作系统开发的文件系统。作为 OpenSolaris 开源计划的一部分,ZFS 于 2005 年 11 月发布,被 Sun 称为是终极文件系统,经历了 10 年的活跃开发。而最新的开发将全面开放,并重新命名为 OpenZFS

ZFS 是一款 128bit 文件系统,总容量是现有 64bit 文件系统的 1.84x10^19 倍,其支持的单个存储卷容量达到 16EiB2^64byte,即 16x1024x1024TB);一个 zpool 存储池可以拥有 2^64 个卷,总容量最大 256ZiB2^78 byte);整个系统又可以拥有 2^64 个存储 池。可以说在相当长的未来时间内,ZFS 几乎不太可能出现存储空间不足的问题。另外,它还拥有自优化,自动校验数据完整性,存储池/卷系统易管理等诸多优点。较 ext3 系统有较大运行速率,提高大约 30%-40%

ZFS 文件系统是一个革命性的全新的文件系统,它从根本上改变了文件系统的管理方式,这个文件系统的特色和其带来的好处至今没有其他文件系统可以与之媲美,ZFS 被设计成强大的、可升级并易于管理的。ZFS 用 “存储池” 的概念来管理物理存储空间。过去,文件系统都是构建在物理设备之上的。为了管理这些物理设备,并为数据提供冗余,“卷管理” 的概念提供了一个单设备的映像。但是这种设计增加了复杂性,同时根本没法使文件系统向更高层次发展,因为文件系统不能跨越数据的物理位置。

ZFS 完全抛弃了 “卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理,“存储池” 描述了存储的物理特征(设备的布局,数据的冗余等等),并扮演一个能够创建文件系统的专门存储空间。从此,文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文件系统共享到这个 “池” 中。你也不再需要预先规划好文件系统的大小,因为文件系统可以在 “池” 的空间内自动的增大。当增加新的存贮介质时,所有 “池” 中的所有文件系统能立即使用新增的空间,而不需要额外的操作。在很多情况下,存储池扮演了一个虚拟内存。

ZFS 使用一种写时拷贝事务模型技术。所有文件系统中的块指针都包括 256 位的能在读时被重新校验的关于目标块的校验和。含有活动数据的块从来不被覆盖;而是分配一个新块,并把修改过的数据写在新块上。所有与该块相关的元数据块都被重新读、分配和重写。为了减少该过程的开销,多次读写更新被归纳为一个事件组,并且在必要的时候使用日志来同步写操作。

利用写时拷贝使 ZFS 的快照和事物功能的实现变得更简单和自然,快照功能更灵活。缺点是,COW 使碎片化问题更加严重,对于顺序写生成的大文件,如果以后随机的对其中的一部分进行了更改,那么这个文件在硬盘上的物理地址就变得不再连续,未来的顺序读会变得性能比较差。

2. BTRFS 文件系统介绍

BTRFS(通常念成 Butter FS),由 Oracle 于 2007 年宣布并进行中的 COW(copy-on-write 式)文件系统。目标是取代 Linux ext3 文件系统,改善 ext3 的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入 ext3/4 未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。

首先是扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 ExtentB-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间/空间性能,包括延迟分配,小文件的存储优化,目录索引等。

3. BTRFS 文件系统特性

  • 可由底层多个物理卷进行支持。

  • 数据存储形式支持 RAID,同时在联机的情况下进行“添加硬盘”、“移除硬盘”、“修改文件系统的大小”。

  • 支持写时复制更新机制,即当我们修改文件时,btrfs先复制一份原文件,对新文件进行修改,结束时,原文件名指向新文件。

  • 支持卷的快照和快照的快照。

  • 透明压缩,即当文件系统存储文件时,文件系统会自动将文件进行压缩再存储,当提取时,文件系统自动进行解压缩,但是用户看不到此过程。

  • 扩展性 (scalability),btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。ExtentB-Treeinode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。

  • 数据一致性 (data integrity)。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。

  • 多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot)、克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。

4. 小结

本小节介绍了 ZFSBTRFS 两种写时复制文件系统,写时复制文件系统采用了日志式技术,你就必须在安全性和性能之间选择,尽管数据模式日志提供了最高的安全性,但是会对性能带来影响,因为索引节点和数据都需要被日志化,就文件系统而言,日志式的另一种选择是一种叫 写时复制 的技术。