强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Btrfs 文件系统运维完全教程 / 第 1 章:Btrfs 概述与特性

第 1 章:Btrfs 概述与特性

1.1 Btrfs 简介

Btrfs(B-tree File System)是一个基于 Copy-on-Write(COW,写时复制)原则的 Linux 文件系统,由 Oracle 于 2007 年发起开发,名称中的 “B” 源于 B-tree 数据结构。2009 年进入 Linux 内核主线(v2.6.29),此后陆续有 Facebook、SUSE、Red Hat 等公司参与贡献。

Btrfs 的设计目标是解决传统文件系统在大规模存储管理中的痛点,将文件系统、卷管理器(类似 LVM)和 RAID 控制器的功能集成到一个统一的层中。

发展里程碑

时间事件
2007Oracle 发起 Btrfs 开发项目
2009合并进入 Linux 内核 v2.6.29(实验性)
2012RAID 5/6 实验性支持
2014SUSE Linux Enterprise 首次将 Btrfs 设为默认文件系统
2015RAID 5/6 write hole 问题被广泛讨论
2020Facebook 在大规模生产环境中使用 Btrfs
2021Linux 5.10 LTS 引入异步丢弃(async discard)支持
2022Fedora 33 开始默认使用 Btrfs
2023btrfs-progs v6.6,内核 6.1 LTS 大幅改善 RAID 5/6 稳定性
2024内核 6.6+ 引入新的 RAID 1c3/1c4 模式

当前成熟度

Btrfs 的不同功能模块成熟度不一,运维人员必须清楚:

功能成熟度说明
基础读写✅ 稳定生产环境广泛使用
子卷✅ 稳定核心功能,长期稳定
快照✅ 稳定核心特性,性能优秀
Send/Receive✅ 稳定备份的核心机制
RAID 0✅ 稳定条带化,无冗余
RAID 1 / RAID 10✅ 稳定镜像,生产推荐
RAID 1c3 / RAID 1c4✅ 稳定内核 6.2+,3/4 副本
压缩 (zstd/lzo)✅ 稳定推荐 zstd
配额 (Quota/Qgroup)⚠️ 可用有性能开销,谨慎使用
RAID 5⚠️ 实验性write hole 问题,不建议用于生产
RAID 6⚠️ 实验性同 RAID 5,write hole 风险
Dedup (去重)⚠️ 有限仅用户态工具,非内核原生

1.2 核心特性概览

1.2.1 Copy-on-Write(COW)机制

COW 是 Btrfs 的基石。与传统文件系统不同,Btrfs 在修改数据时不会直接覆盖原始数据块,而是:

  1. 将修改写入新的磁盘位置
  2. 更新元数据指针指向新位置
  3. 释放旧数据块

传统文件系统(in-place update):

写入前: Block A [原始数据]
写入后: Block A [新数据]        ← 原地覆盖,断电可能导致数据损坏

Btrfs(Copy-on-Write):

写入前: Block A [原始数据]  ──指针──> 元数据
写入后: Block A [原始数据]  Block B [新数据]
                          ──指针──> 元数据(更新后指向 B)

COW 的优势

特性说明
断电安全写入是原子操作,不会产生部分写入的损坏状态
快照利用 COW 可以瞬间创建快照(零拷贝)
数据完整性可以在写入时计算和验证校验和

COW 的劣势

特性说明
碎片化随机写会加剧文件碎片,影响机械盘性能
写放大每次修改都要写入新位置,增加了写入量
空间开销旧数据块需要等 balance 或 trim 后才能回收

1.2.2 子卷(Subvolume)

子卷是 Btrfs 内部的一个独立文件树,类似于轻量级的"分区",但不需要预先分配固定大小的空间:

# 创建子卷
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var
btrfs subvolume create /mnt/@snapshots

# 列出子卷
btrfs subvolume list /mnt

子卷之间共享底层存储池的可用空间,这使得空间管理非常灵活。

1.2.3 快照(Snapshot)

快照是子卷在某个时间点的完整副本,利用 COW 机制实现瞬间创建几乎不占用额外空间

# 创建快照(可写)
btrfs subvolume snapshot /mnt/@home /mnt/@snapshots/home-20260510

# 创建只读快照
btrfs subvolume snapshot -r /mnt/@home /mnt/@snapshots/home-20260510-ro

快照只在数据被修改时才逐步占用空间(COW),这是 Btrfs 最强大的特性之一。

1.2.4 校验和(Checksum)

Btrfs 对数据和元数据都计算校验和(默认 CRC32C,可选 xxhash、sha256、blake2b):

# 查看校验和算法
btrfs inspect-internal dump-super /dev/sda1 | grep csum_type

# 校验和示例(CRC32C)
# inode 257 offset 0 disk_bytenr 13631488 dev /dev/sda1
# csum 0xa1b2c3d4 expected 0xa1b2c3d4

如果校验和不匹配,Btrfs 会:

  • 在 RAID 1/10 模式下自动从镜像副本修复
  • 在单设备模式下报告 I/O 错误

1.2.5 多设备与 RAID

Btrfs 在文件系统层面实现 RAID,不需要 mdadm 或 LVM:

# 创建 RAID 1 文件系统(2 个设备)
mkfs.btrfs -d raid1 -m raid1 /dev/sdb /dev/sdc

# 添加第三个设备
btrfs device add /dev/sdd /mnt

# 将数据转换为 RAID 10
btrfs balance start -dconvert=raid10 -mconvert=raid10 /mnt

Btrfs 支持的 RAID 模式:

RAID 模式数据元数据最少设备容错成熟度
single单份单份1
RAID 0条带条带1
RAID 1镜像镜像21 盘
RAID 1c33 副本3 副本32 盘✅ (6.2+)
RAID 1c44 副本4 副本43 盘✅ (6.2+)
RAID 10条带+镜像条带+镜像4每组 1 盘
RAID 5条带+奇偶校验条带+奇偶校验21 盘⚠️
RAID 6条带+双奇偶校验条带+双奇偶校验32 盘⚠️
DUP2 份(同一设备)2 份1设备内

1.2.6 在线压缩

Btrfs 支持透明压缩,数据在写入磁盘前自动压缩,读取时自动解压:

# 以 zstd 方式挂载
mount -o compress=zstd:3 /dev/sdb1 /mnt

# 查看压缩比
btrfs filesystem df /mnt

1.2.7 其他特性

特性说明
Send/Receive将快照的增量数据发送到另一个 Btrfs 文件系统,用于备份
在线扩缩容可以在线增大或缩小文件系统(缩小需使用 balance)
异步丢弃 (Async Discard)优化 SSD 的 TRIM 性能
Zoned 模式支持 SMR 硬盘和 ZNS SSD 的 zoned device
Reflinkcp --reflink 实现即时复制文件
文件克隆FICLONE/FICLONERANGE ioctl,Docker overlay 优化

1.3 Btrfs vs ext4 vs ZFS 对比

这是运维人员最常问的问题。以下是三者的详细对比:

功能对比

特性Btrfsext4ZFS
COW
子卷✅(Dataset)
快照✅ 原生✅ 原生
增量备份✅ Send/Receive✅ Send/Receive
内建 RAID❌(依赖 mdadm)
透明压缩✅ zstd/lzo/zlib✅ lz4/zstd
数据校验
去重⚠️ 用户态✅ 在线去重
加密✅ fscrypt(非原生)✅ fscrypt✅ 原生
最大文件16 EiB16 TiB16 EiB
最大卷16 EiB1 EiB256 ZiB
内核支持原生原生需要第三方模块(OpenZFS)
许可证GPLGPLCDDL(与 GPL 不兼容)
内存需求高(推荐 1GB/TB)

性能对比

场景Btrfsext4ZFS
顺序读接近 ext4
顺序写略低于 ext4取决于 ARC
随机读好(ARC 命中时优秀)
随机写中等(COW 开销)中等(COW 开销)
大量小文件非常好
数据库场景需关闭 COW推荐需要调优
压缩场景zstd 性能好N/Alz4 极快

运维复杂度

维度Btrfsext4ZFS
学习曲线中等
故障排查中等
内核兼容性需要较新内核广泛兼容需要额外模块
社区文档丰富极丰富丰富
工具链btrfs-progse2fsprogszfs-utils
可调参数适量少量极多

如何选择?

场景推荐原因
桌面系统Btrfs快照回滚、压缩节省空间、Fedora/openSUSE 默认
小型服务器Btrfs快照 + Send/Receive 备份,运维简单
大型存储服务器ZFS去重、加密、ARC 缓存、RAID-Z 成熟
数据库服务器ext4 / XFS稳定、性能可预测、COW 不适合数据库
NAS / 文件服务器BtrfsZFS快照和数据完整性
嵌入式设备ext4资源占用低、兼容性好
云服务器ext4 / Btrfsext4 默认可靠,Btrfs 快照方便

1.4 适用场景详解

1.4.1 操作系统根分区

Btrfs 非常适合作为 Linux 桌面/服务器的根分区:

# openSUSE/Fedora 推荐的子卷布局
/dev/sda2  /              subvol=@
/dev/sda2  /home          subvol=@home
/dev/sda2  /var           subvol=@var
/dev/sda2  /.snapshots    subvol=@snapshots

优势

  • 系统更新前自动创建快照
  • 出问题时一键回滚
  • zstd 压缩节省磁盘空间

1.4.2 容器存储

Docker 和 Podman 可以使用 Btrfs 存储驱动,利用 COW 和快照优化容器层的存储:

# Docker 配置 Btrfs 驱动
cat /etc/docker/daemon.json
{
  "storage-driver": "btrfs"
}

1.4.3 备份服务器

利用 Send/Receive 实现高效增量备份:

# 发送增量快照到备份服务器
btrfs send -p /snapshots/home-old /snapshots/home-new | ssh backup "btrfs receive /backup"

1.4.4 虚拟机存储

Btrfs 的快照和 Reflink 特性非常适合虚拟机磁盘管理:

# 创建 VM 磁盘的快照用于快速克隆
btrfs subvolume snapshot /vms/base-vm /vms/vm-clone-01

1.4.5 不建议使用 Btrfs 的场景

场景原因
数据库主存储COW 会导致碎片,影响随机写性能
RAID 5/6 生产环境write hole 问题尚未完全解决
超大规模集群(PB 级)块组大小限制(1GB 数据块组)、balance 耗时
需要极致性能的场景COW 的额外开销难以避免
非 Linux 平台仅支持 Linux 内核

1.5 内核版本要求

Btrfs 的功能随着内核版本不断演进,选择正确的内核版本至关重要。

各版本重要特性

内核版本新增特性
2.6.29Btrfs 初次进入主线(实验性)
3.0稳定性大幅改善
3.6子卷配额(quota)
3.14RAID 5/6 实验性支持
4.5在线 RAID 转换(balance 转换)
4.14更好的空间处理
5.1btrfs send 大量优化
5.10 (LTS)异步丢弃(async discard)
5.15 (LTS)zstd 压缩级别支持
5.19RAID 5/6 稳定性改善
6.1 (LTS)大量修复,新的 space 操作
6.2RAID 1c3 / RAID 1c4
6.5更好的 free space 处理
6.6 (LTS)进一步 RAID 5/6 改善

推荐内核版本

使用场景最低内核推荐内核
个人桌面5.106.1+ 或 6.6+
生产服务器5.156.1 LTS 或 6.6 LTS
RAID 1 使用5.106.1+
RAID 5/6(不推荐)6.6最新稳定版
压缩(zstd 级别)5.156.1+
多设备平衡5.106.1+

btrfs-progs 版本

btrfs-progs 版本对应推荐内核说明
v4.144.14+基础功能完整
v5.105.10+新命令和选项
v6.06.0+RAID 1c3/1c4 支持
v6.66.6+修复和性能优化
# 检查内核版本
uname -r

# 检查 btrfs-progs 版本
btrfs version

# 检查内核是否编译了 Btrfs 模块
cat /proc/filesystems | grep btrfs
# 或
modinfo btrfs

各发行版内核版本

发行版版本默认内核默认文件系统
Ubuntu 22.04LTS5.15ext4
Ubuntu 24.04LTS6.8ext4
Fedora 396.5+Btrfs
Fedora 406.8+Btrfs
openSUSE Leap 15.55.14Btrfs
openSUSE Tumbleweed滚动最新Btrfs
Debian 126.1ext4
Arch Linux滚动最新ext4
CentOS Stream 95.14XFS

1.6 本章小结

要点说明
Btrfs 是什么Linux 原生 COW 文件系统,集文件系统+卷管理+RAID 于一体
核心优势快照、子卷、校验、压缩、Send/Receive 备份
与 ext4 相比功能远超 ext4,但随机写性能略低
与 ZFS 相比功能不如 ZFS 完善,但内核原生、内存需求低、许可证兼容
RAID 5/6不建议生产使用,write hole 问题未完全解决
推荐内核6.1 LTS 或 6.6 LTS

扩展阅读