徐九丨发自 思否编辑部
Btrfs 文件系统已有十多年历史, 但因为在性能和可靠性方面存在一直质疑, 导致其未能普及. 不过随着 ext 4 的更新发布, 业内出现了 "Btrfs 才是 Linux 的未来" 的论调.
Facebook 是少数大规模采用 Btrfs 的科技公司, 为什么会选择 Btrfs? 应用之后有没有取得预期的效果?
Btrfs 的背景
Btrfs(B-tree 文件系统, 通常念成 Butter FS,Better FS 或 B-tree FS), 一种支持写入时复制 (COW) 的文件系统, 运行在 Linux 操作系统, 采用 GPL 授权.
Btrfs 是 Oracle 2007 年基于 GPL 协议开源的 Linux 文件系统, 在 2014 年 8 月发布稳定版. 目标是取代 Linux 目前的 ext3 文件系统, 改善 ext3 的限制, 特别是单个文件的大小, 总文件系统大小或文件检查和加入 ext3 未支持的功能, 像是可写快照(writable snapshots), 快照的快照(snapshots of snapshots), 内建磁盘阵列(RAID), 以及子卷(subvolumes).
对于大部分文件系统来说, 在磁盘上创建好文件系统, 然后再挂载到系统中去就完事了. 但对于 Btrfs 来说, 除了在格式化和挂载的时候指定不同的参数外, 还支持很多其他的功能. 比如: 管理多块硬盘, 支持 LVM 和 RAID 等
Btrfs 也宣称专注在 "容错, 修复及易于管理", 也是 Linux 下大家公认的将会替代 ext4 的下一代文件系统.
Btrfs 让 Facebook 省了三分之一的服务器?
Chris Mason 是开源文件系统项目 Btrfs 的主要贡献者, 最初在 Oracle 从事 Btrfs 的开发, 后来加入 Facebook 的 Linux 内核技术小组继续从事 Btrfs 文件系统的研发工作.
几年前的采访中, 他就曾提到:
在 Facebook 内部, 有针对性地使用 Btrfs 的一些特性来提高手头工作的性能, 比较关注在系统任务管理, 快照之类的事情上. Facebook 所有的基础设施都使用了 Linux. 围绕分布式操作系统利用了 Btrfs 的很多特性, 比如分布式任务管理, 利用快照功能快速更新以及哈希校验功能, 等等.
近日, Btrfs 开发者 Josef Bacik 在北美开源峰会上再次深度分享了 Facebook 为什么选择 Btrfs, 又取得了哪些成果.
Bacik 提到, Facebook 有大量的机器, 有大量的代码需要, 包括网页, 移动应用, 测试套件以及支持所有这些的底层基础设施. 因此, 他们希望所有机器都能尽可能的保持一致, 能在任何时间向任何机器迁移任何服务. 所以 Facebook 的每一项服务都在容器内运行, 所有这些容器化服务都使用 Btrfs 作为它们的 root 文件系统.
其次, Facebook 的工作流规定任何人不能直接向代码库递交代码, 而是必须有一个完整的测试程序会先进行测试. Bulid 系统首先会克隆仓库, 应用补丁, 构建系统, 执行测试. 完成之后, 这些内容会被清理掉准备下一个.
但清理阶段是相对缓慢的, 每次的验证平均需要 2 或 3 分钟, 有时候需要 10 分钟, 在此期间机器无法执行下一个测试. 因此基础设施团队尝试使用 Btrfs, 与其克隆一个库不如创建一个快照, 测试完成之后就删除快照. 删除快照比删除一个大的代码库要快得多.
这个操作让 Facebook 节省了大量的时间, 以及近三分之一的服务器数量(包括编译和测试所需的服务器).
并且 Facebook 改用 Btrfs 还有一个强有力的理由: 它支持磁盘压缩.
这里的重点不仅仅是节省存储空间, 还包括延长其使用寿命. Facebook 在闪存上花了很多钱, 不过都是便宜, 质量一般的闪存. 该公司希望这种存储能够尽可能地延长寿命, 这意味着要尽量减少执行的写入周期数(write cycle). 源代码往往具有良好的压缩比, 因此压缩就可以大大减少写入的存储 block 的数量, 减缓存储设备的寿命损耗.
Bacik 还表示, 这项工作是由基础设施团队完成的, 没有借助 Facebook 的 Btrfs 开发人员的任何帮助, 事实上, 他们甚至都不知道有这件事. 但他对最后取得的效果也甚感惊讶.
Btrfs 官方文档: https://btrfs.wiki.kernel.org/index.php/Main_Page
Btrfs 离 Linux 的未来有多远
多年来, 似乎 ext 已经成为 Linux 文件系统的代名词. 但是在撰写这篇稿件搜集资料时发现, 讨论 ext 的文章或者帖子里都会有 Btrfs 的身影出现. 由 RedHat 赞助的独立 Linux 发行版 Fedora, 在最新发布的版本 Fedora 33 中也将 Btrfs 设为了默认的文件系统.
虽然 ext4 只被大家定义为「过渡期」的产品, 就连 ext4 的作者也曾表示过 Btrfs 将成为下一代 Linux 的标准文件系统.
但 Btrfs 在真正普及之前, 仍然需要找到解决自身问题的好办法.
来源: https://segmentfault.com/a/1190000023299978