BTRFS


BTRFS

文章插图
BTRFS【BTRFS】BTRFS(通常念成Butter FS) , 由Oracle于2007年宣布并进行中的COW(copy-on-write式)档案系统 。目标是取代Linux目前的ext3档案系统 , 改善ext3的限制 , 特别是单一档案大小的限制 , 总档案系统大小限制以及加入档案校验和特性 。加入目前ext3/4未支持的一些功能 , 例如可写的磁碟快照(snapshots) , 以及支持递归的快照(snapshots of snapshots) , 内建磁碟阵列(RAID)支持 , 支持子卷(Subvolumes)的概念 , 允许线上调整档案系统大小 。
基本介绍中文名:BTRFS
别名:Butter FS
宣布时间:2007年
类别:COW(copy-on-write式)档案系统
目标:取代Linux的ext3档案系统
宣称内容:容错、修复与易于管理
历史Btrfs宣称专注在“容错、修复与易于管理” 。Btrfs已在2010年7月推出的openSUSE11.3中得到了套用.Btrfs也已在2010年10月推出的ubuntu10.10中得到了套用.2011年6月8日 , 在Fedora工程指导委员会会议上 , 委员会决定Fedora 16将以Btrfs作为默认档案系统.2011年8月9日 ,  Fedora撤回了决定 , Btrfs不再作为Fedora 16默认档案系统 , 原因是时间不充足 , 无法达到改变默认档案系统所要满足的基本要求 。2011年10月5日 , Fedora 16测试版发布 , BTRFS 将做为其默认档案系统 。2011年11月8日 , Fedora 16正式版发布 , 默认档案系统依然採用ext4 , 并未採用预计的Btrfs档案系统 。(概述内容来源:)特性首先是扩展性 (scalability) 相关的特性 , btrfs 最重要的设计目标是应对大型机器对档案系统的扩展性要求 。Extent , B-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现 , 其整体性能而不会随着系统容量的增加而降低 。其次是数据一致性 (data integrity) 相关的特性 。系统面临不可预料的硬体故障 , Btrfs 採用 COW 事务技术来保证档案系统的一致性 。btrfs 还支持 checksum , 避免了 silent corrupt 的出现 。而传统档案系统则无法做到这一点 。第三是和多设备管理相关的特性 。Btrfs 支持创建快照 (snapshot) , 和克隆 (clone)。btrfs 还能够方便的管理多个物理设备 , 使得传统的卷管理软体变得多余 。最后是其他难以归类的特性 。这些特性都是比较先进的技术 , 能够显着提高档案系统的时间 / 空间性能 , 包括延迟分配 , 小档案的存储最佳化 , 目录索引等 。相关特性B-Treebtrfs 档案系统中所有的 metadata 都由 B-Tree 管理 。使用 B-Tree 的主要好处在于查找 , 插入和删除操作都很高效 。可以说 B-Tree 是 btrfs 的核心 。一味地夸耀 B-Tree 很好很高效也许并不能让人信服 , 但假如稍微花费一点儿时间看看 ext2/3 中元数据管理的实现方式 , 便可以反衬出 B-Tree 的优点 。妨碍 ext2/3 扩展性的一个问题来自其目录的组织方式 。目录是一种特殊的档案 , 在 ext2/3 中其内容是一张线性表格 。这种结构在档案个数有限的情况下是比较直观的设计 , 但随着目录下档案数的增加 , 查找档案的时间将线性增长 。2003 年 , ext3 设计者开发了目录索引技术 , 解决了这个问题 。目录索引使用的数据结构就是 B-Tree。如果同一目录下的档案数超过 2K , inode 中的 i_data 域指向一个特殊的 block。在该 block 中存储着目录索引 B-Tree。B-Tree 的查找效率高于线性表 , 但为同一个元数据设计两种数据结构总是不太优雅 。在档案系统中还有很多其他的元数据 , 用统一的 BTree 管理是非常简单而优美的设计 。Btrfs 内部所有的元数据都採用 BTree 管理 , 拥有良好的可扩展性 。btrfs 内部不同的元数据由不同的 Tree 管理 。在 superblock 中 , 有指针指向这些 BTree 的根 。FS Tree 管理档案相关的元数据 , 如 inode , dir 等; Chunk tree 管理设备 , 每一个磁碟设备都在 Chunk Tree 中有一个 item ; Extent Tree 管理磁碟空间分配 , btrfs 每分配一段磁碟空间 , 便将该磁碟空间的信息插入到 Extent tree。查询 Extent Tree 将得到空闲的磁碟空间信息; Tree of tree root 保存很多 BTree 的根节点 。比如用户每建立一个快照 , btrfs 便会创建一个 FS Tree。为了管理所有的树 , btrfs 採用 Tree of tree root 来保存所有树的根节点; checksum Tree 保存数据块的校验和 。基于 Extent 的档案存储现代很多档案系统都採用了 extent 替代 block 来管理磁碟 。Extent 就是一些连续的 block , 一个 extent 由起始的 block 加上长度进行定义 。Extent 能有效地减少元数据开销 。为了进一步理解这个问题 , 我们还是看看 ext2 中的反面例子 。ext2/3 以 block 为基本单位 , 将磁碟划分为多个 block。为了管理磁碟空间 , 档案系统需要知道哪些 block 是空闲的 。Ext 使用 bitmap 来达到这个目的 。Bitmap 中的每一个 bit 对应磁碟上的一个 block , 当相应 block 被分配后 , bitmap 中的相应 bit 被设定为 1。这是很经典也很清晰的一个设计 , 但不幸的是当磁碟容量变大时 , bitmap 自身所占用的空间也将变大 。这就导致了扩展性问题 , 随着存储设备容量的增加 , bitmap 这个元数据所占用的空间也随之增加 。而人们希望无论磁碟容量如何增加 , 元数据不应该随之线形增加 , 这样的设计才具有可扩展性 。最佳化支持SSD 是固态存储 Solid State Disk 的简称 。在过去的几十年中 , CPU/RAM 等器件的发展始终遵循着摩尔定律 , 但硬碟 HDD 的读写速率却始终没有飞跃式的发展 。磁碟 IO 始终是系统性能的瓶颈 。SSD 採用 flash memory 技术 , 内部没有磁碟磁头等机械装置 , 读写速率大幅度提升 。flash memory 有一些不同于 HDD 的特性 。flash 在写数据之前必须先执行擦除操作;其次 , flash 对擦除操作的次数有一定的限制 , 在目前的技术水平下 , 对同一个数据单元最多能进行约 10 万次擦除操作 , 因此 , 为了延长 flash 的寿命 , 应该将写操作平均到整个 flash 上 。SSD 在硬体内部的微代码中实现了 wear leveling 等分布写操作的技术 , 因此系统无须再使用特殊的 MTD 驱动和 FTL 层 。虽然 SSD 在硬体层面做了很多努力 , 但毕竟还是有限 。档案系统针对 SSD 的特性做最佳化不仅能提高 SSD 的使用寿命 , 而且能提高读写性能 。Btrfs 是少数专门对 SSD 进行最佳化的档案系统 。btrfs 用户可以使用 mount 参数打开对 SSD 的特殊最佳化处理 。Btrfs 的 COW 技术从根本上避免了对同一个物理单元的反覆写操作 。如果用户打开了 SSD 最佳化选项 , btrfs 将在底层的块空间分配策略上进行最佳化:将多次磁碟空间分配请求聚合成一个大小为 2M 的连续的块 。大块连续地址的 IO 能够让固化在 SSD 内部的微代码更好的进行读写最佳化 , 从而提高 IO 性能 。平台支持Arch LinuxopenSUSE 11.3SLES 11 SP1Ubuntu 10.10Sabayon LinuxRed Hat Enterprise Linux 6Fedora 15MeeGoDebianSlackware 13.37SLES 11 SP2Oracle Linux 5 和 6NETGEAR ReadyNAS OS 6.0商业套用NETGEAR的ReadyNAS OS 6.0成为第一个将btrfs套用于商业环境的作业系统 。NETGEAR声称经过其工程师的调试 , btrfs已经可以套用于商业环境 。ReadyNAS OS 6.0实现了无限制快照 , 防病毒 , 即时卷扩展和即时卷保护 。已经发布的产品包括:RN102,RN104,RN312,RN314,RN316,RN516.