一个功能强大的Linux新文件系统已经支持快速快照、所有数据的校验和和在线调整大小——并计划添加zfs风格的内置条带和镜像。
克里斯·梅森最近出狱了Btrfs v0.10,它包含许多有趣的新功能。总的来说,从LWN开始,Btrfs已经取得了很大的进步写关于它的去年6月。在未来几年,Btrfs可能会成为我们大多数人使用的文件系统—至少,对于那些仍然使用旋转存储的人来说。所以值得一看。
记住,Btrfs是一个全新的Linux文件系统。它是一个写时复制系统,能够在任何时候快速创建文件系统状态的快照。快照非常快,事实上,它被用作Btrfs事务机制,消除了对单独日志的需要。它支持子卷,即在同一设备上存在多个独立的文件系统。Btrfs是为速度而设计的,并且还为所有存储的数据提供校验和。
一些内核补丁出现后,很快就会投入生产使用。例如,一年前,没有人(可能在-ck列表之外)讨论公平调度;但是,在撰写本文时,CFS调度器已经发布了几个月了。KVM也在两个内核发布周期的过程中从最初发布到合并。但是,文件系统不是这样工作的。文件系统开发人员往往是一群谨慎、保守的人。那些不这样做的人往往在遇到丢失数据的用户的头几次遭遇中无法幸存。这是在说,尽管Btrfs正在快速发展,但暂时还不应该计划在任何生产角色中使用它。好像是要强调这一点,当文件系统耗尽空间时,Btrfs仍然会使系统崩溃。与之前的版本一样,v0.10补丁也改变了磁盘上的格式。
磁盘上的格式更改是这个版本的Btrfs补丁的关键特性之一。该格式现在包括文件系统中几乎所有对象的反向引用。因此,现在很容易回答诸如“这个块属于哪个文件?”反向引用有一些用途,不仅仅是增加了一些冗余信息,可以用来检查文件系统的完整性。如果一个文件声称拥有一组块,而这些块又声称属于另一个文件,那么很明显有问题。反向引用还可以用来快速确定当磁盘块变坏时哪些文件受到影响。
然而,大多数用户会对另一个新特性更感兴趣,这是由于反向引用的存在而启用的:在线调整大小。现在可以在Btrfs文件系统挂载和繁忙时更改它的大小。这包括压缩文件系统。如果Btrfs代码必须放弃一些空间,它现在可以快速找到受影响的文件,并移动必要的块。因此Btrfs应该与设备映射器代码很好地工作,根据条件的需要增加或缩小文件系统。
v0.10中另一个有趣的特性是相关的就地ext3转换器。现在可以将现有的ext3文件系统无损地转换为Btrfs—如果需要的话还可以返回。转换器的工作原理是将在磁盘开头找到的ext3元数据的副本存储起来,然后在文件系统的空闲空间中创建一个并行目录树。因此,整个ext3文件系统仍然保留在磁盘上,占用一些空间,但如果Btrfs不能工作,则保留了一个回退。实际的文件数据在两个文件系统之间共享;由于Btrfs执行写时复制,所以即使在Btrfs文件系统更改之后,原始的ext3文件系统仍然保留。切换到Btrfs forever很简单,只需删除ext3子卷,并在此过程中恢复额外的磁盘空间。
最后,现在可以通过挂载选项关闭写时拷贝机制。对于某些类型的工作负载,即写即拷贝只是减慢了速度,并没有提供任何真正的优势。由于(1)其中一个工作负载是关系数据库管理,(2)Chris为Oracle工作,唯一令人惊讶的是,这个选项花了很长时间才到达。但是,如果多个快照引用一个给定的文件,则仍然执行写时复制;否则就不可能保持快照彼此独立。
对于那些好奇Btrfs将从这里去哪里的人,克里斯已经发布一个时间表描述他在未来一年的计划。列表中的下一个是“存储池”,它允许Btrfs文件系统跨多个设备。一旦这些就绪,条带化和镜像将在文件系统中实现。长期项目包括每目录快照、细粒度锁定(文件系统当前使用一个全局锁)、内置增量备份支持和在线文件系统检查。解决这个令人讨厌的空间不足的问题不在清单上,但有人认为克里斯已经在他的脑海中的某个地方。
了解更多关于这个主题的信息
这篇文章“内核空间:更好的btrfs”最初是由LinuxWorld——(美国) .