备注:本文翻译自 IBM Research Report BTRFS - Linux Btree Filesystem
Linux 有设备映射(DMs)子系统去管理存储设备。举个例子,LVM和mdadm,这些时软件模型,主要功能是管理raw disks,合并他们到虚拟的连续的块地址空间,并且将其抽象话到更高级别的内核层。他们支持镜像,剥离和RAID5/6。无论如何,checksums是不支持的,这样会导致BTRFS有一个问题。举个例子,考虑一种情况,数据存储在磁盘上是RAID-1的格式,每个4KB块有一个额外的拷贝。 如果文件系统在一个拷贝上检测到一个checksum的错误,它需要从其他拷贝恢复。DMs隐藏了虚拟地址空间抽象化背后的信息,并且返回其中一份拷贝。为了规避这个问题,BTRFS做了自己的设备管理。它计算checksums,将他们存储在一个单独的树中,然后更好的确定当媒介错误发生的时候合适恢复数据。
一台机器可以被附加到多个存储设备上;BTRFS分离每个设备到large chunks,经验法则是chunk大约是一个设备尺寸的1%。
在写的时刻, 1GB chunks 被用于数据, 256Mchunks用于元数据。
一个chunk tree 包含一个从逻辑chunks到物理chunks的映射。 一个device tree包含反向映射,文件系统剩余部分可以看到有逻辑的chunks,所有的extent references 地址逻辑chunks。这个允许移动物理的chunks under the covers无需回溯和引用修复。 chunk/device trees 是很小的,并且典型的可以在内存中缓存。这个减少增加间接层的性能开销。
物理的chunks根据逻辑chunk的需要的RAID级别被分成组。对于镜像,chunk