btrfs是什么格式 btrfs是什么

BTRFS(一般念成 Butter FS),由 Oracle 于 2007 年公布并进行里的 COW(copy-on-write 式)文件系统 。目标是替代 Linuxext3 文件系统,改进 ext3 限制,尤其是单一图片大小限制,总文件系统尺寸限定及其添加文档校验和特性 。添加 ext3/4 未支持的一些作用,比如可写的磁盘快照(snapshots),及其支持递归的快照(snapshots of snapshots),内建磁盘阵型(RAID)支持,支持子卷(Subvolumes)的概念,允许线上调节文件系统尺寸 。

btrfs是什么格式 btrfs是什么

文章插图
【btrfs是什么格式 btrfs是什么】首先是扩展性 (scalability) 有关的特性,btrfs 最主要的设计目标是应对大型机器对文件系统的扩展性规定 。Extent,B-Tree 和动态 inode 建立等特性确保了 btrfs 在大型机器上仍有优异的表现,其整体性能而不会随着系统容量的提高而减少 。
其次是数据一致性 (data integrity) 有关的特性 。系统面临不可预料的硬件故障,Btrfs 选用 COW 事务技术来确保文件系统的一致性 。btrfs 还支持 checksum,避免了 silent corrupt 的出现 。而传统文件系统将无法做到这一点 。
第三是与多设备维护有关的特性 。Btrfs 支持建立快照 (snapshot),和复制 (clone)。btrfs 还可以方便的管理多个物理设备,促使传统的卷管理软件变得多余 。
最后是其他无法分类的特性 。这些特性都是非常先进技术,可以显著提升文件系统的时间 / 空间性能,包含延迟分配,小文件的存放提升,目录索引等 。
有关特性B-Tree
btrfs 文件系统中所有的 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 性能 。