BTRFS是什么

子凡 2020-07-20 10:24:02
问答

BTRFS(通常念成Butter FS),由Oracle宣布并进行中的COW文件系统。目标是取代Linuxext3文件系统,改善ext3的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。

BTRFS(通常念成 Butter FS),由 Oracle 于 2007 年宣布并进行中的 COW(copy-on-write 式)文件系统。目标是取代 Linuxext3 文件系统,改善 ext3 的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入 ext3/4 未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。

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 性能。

0个人收藏 收藏

相关推荐

  • NAS ZFS

    NAS如何选择文件系统

    选择NAS文件系统时关键因素包括性能、数据安全性、容量、兼容性和易用性。主流选项如EXT4、Btrfs、ZFS、NTFS、exFAT各有特点。高性能和并发访问适合EXT4或ZFS,数据安全性重视者应考虑ZFS或Btrfs。大容量存储偏好ZFS和Btrfs,而高兼容性场景适用NTFS或exFAT。
  • ZFS

    Btrfs和ZFS哪个文件系统更适合NAS

    Btrfs和ZFS都是高效的文件系统,适用于NAS。Btrfs操作简单,适合资源有限和需求灵活性的环境。ZFS提供更高的数据完整性和性能,适合硬件资源充足、对数据安全有高要求的场景。选择应基于硬件资源、数据安全需求和性能考虑。
  • Btrfs 文件系统

    为什么很多NAS厂家都采用Btrfs文件系统

    Btrfs文件系统因其先进的写时复制、数据校验、快照功能和动态卷管理,在NAS领域受到厂家青睐。这些特性提供了强大的数据保护、灵活的存储管理、优化的性能和易于维护的优势。其作为开源项目的一部分,也享有持续的社区支持和发展,使得Btrfs成为满足现代存储需求的理想选择。
  • Linux 文件系统 Linux File System

    Linux系统应该如何选择文件系统

    Linux系统选择合适的文件系统对于优化性能和确保数据安全至关重要。Ext4适合大多数个人和小型服务器,提供良好的性能和稳定性。XFS优于处理大文件和高并发操作,适合企业级数据库。Btrfs和ZFS以高级功能和数据保护著称,适合需要高级数据管理的环境。
  • Btrfs ZFS 文件系统

    Btrfs和ZFS有什么区别

    Btrfs和ZFS是两种先进的文件系统,设计用于高效、可靠地管理大量数据。Btrfs以其灵活性和易用性著称,适合个人和小型服务器使用;而ZFS以数据完整性和稳定性闻名,更适合大型企业和数据中心。Btrfs支持动态卷管理和快照,ZFS则提供端到端的数据完整性和高级缓存机制。
  • Linux 文件系统 Linux file system

    Btrfs和Ext4有哪些区别

    Btrfs和Ext4是两种主流的Linux文件系统。Ext4以其稳定性和高兼容性著称,适合个人电脑和小型服务器。Btrfs引入了更先进的功能,如快照、动态卷管理和数据完整性校验,更适合大型数据中心和需要高级存储功能的场景。Ext4适合日常使用和稳定需求,而Btrfs适合于需要高级特性和灵活性的复杂环境。