批判性地看btrfs同bcachefs之间的关系:实验体反而正在商用?
上次简单聊了聊bcachefs十年进主线,两年被移除的故事。但好像有一个文件系统听起来与它差不多,那就是btrfs。
btrfs 是 Linux 中第一个被广泛应用的写时复制文件系统。这个“写时复制”,就是在修改数据时不直接覆盖旧内容,而是写入一份新的,再更新引用。更细节的就不说了,越说越多。这种机制能保证数据的一致性,也让文件系统能做出所谓快照、子卷、回滚、校验这些高级功能——所谓快照,就是可以瞬间保存当前系统状态;子卷则是能在同一个分区下划出多个独立空间,用于分隔系统、数据、或容器。
这些机制让 btrfs 在功能上远超 ext4,但也带来了复杂度。btrfs 支持压缩、校验、多设备、RAID,功能丰富,可惜结构太复杂。元数据层级深、写放大严重,特别是在 RAID5 和 RAID6 模式下,数据一致性问题多年未彻底解决。稳定性成为了它最大的争议。
而bcachefs 的出现,就是为了简化这一切。它同样是写时复制系统,但架构更直接。它去掉了子卷,改用统一命名空间;事务模型更清晰,元数据路径更短。性能上,它继承了 bcache 的缓存机制,能自动区分冷热数据,减少磁盘负担。同时支持在线压缩、加密、重复数据删除,又不会明显拖慢 I/O。
当它进入主线时,社区认为这可能是 Linux 文件系统的新起点。然而随着后来发生的一些争议,它又被暂时移出了主线的支持。
相比之下,btrfs 的开发模式分散,由多家厂商与开发者共同维护,虽然推进缓慢,也有一些使用上面的稳定性争议,但在维护的稳定性上却又是足够的。毕竟bcachefs 几乎由一个人主导,节奏快但风险高。
可以说,btrfs 是写时复制的实验场,而bcachefs 是它的简化——或者说优化后的重构版。但由于客观上维护的稳定性,这个重构版反而最终没能进入主流——至少目前是这样。
那么,看看这个主流的btrfs文件系统,其相比传统ext4更亮眼的那些功能要如何使用呢?下次说。