如何在 CentOS 7.9 上通过配置 Btrfs 文件系统,提升虚拟化环境下的存储效率与快照管理
在传统虚拟化环境下(如 KVM、Xen),存储往往采用 ext4、XFS 等文件系统或 LVM 卷组,这种方式对快照、碎片整理、压缩等功能支持有限。Btrfs 作为现代文件系统,原生支持子卷管理、快照、在线压缩和校验,可显著提升虚拟化平台的存储效率与维护效率。A5数据以 CentOS 7.9 为基础,结合典型的企业级服务器硬件,详细介绍如何部署 Btrfs 文件系统用于虚拟化存储,优化 I/O 效率与快照管理,并附带实测数据对比分析。
本文假设读者具备基本 Linux 操作经验和 KVM 虚拟化基础。
一、香港服务器www.a5idc.com硬件测试平台与环境简介
为了评估 Btrfs 的表现,本次测试使用如下硬件与软件配置:
硬件配置参数
| 硬件组件 | 型号/规格 |
|---|---|
| 服务器型号 | Supermicro SYS-6029P-TR |
| CPU | Intel Xeon Silver 4210R (10 核 2.4GHz) |
| 内存 | 128GB DDR4 ECC |
| 主存储 | 4 x 4TB NVMe SSD (RAID0,用于测试) |
| 额外存储 | 2 x 8TB SATA HDD(非测试存储) |
| RAID 控制卡 | None(直通模式,NVMe 原生) |
| 网络 | 双口 10GbE Intel X710 |
| 虚拟化 | KVM + libvirt + virt-manager |
软件与版本
| 软件组件 | 版本 |
|---|---|
| 操作系统 | CentOS Linux 7.9.2009 |
| 内核 | 3.10.0-1160.el7.x86_64 |
| Btrfs 工具包 | btrfs-progs 4.9.x |
| QEMU/KVM | qemu-kvm 2.12.0 |
| libvirt | libvirt 3.0.0 |
| virt-manager | virt-manager 1.5.x |
说明:CentOS 7.9 默认内核对 Btrfs 支持稳定可靠,适合生产环境。
二、为什么选择 Btrfs
与传统存储方案相比,Btrfs 具备如下优势:
- 原生快照支持:支持写时复制(CoW)快照,无需额外 LVM;
- 内置压缩:支持 zlib、LZO、zstd 等压缩算法;
- 在线碎片整理:可动态 defrag;
- 校验和数据完整性:支持对数据和元数据进行 CRC 校验;
- 子卷与配额支持:便于管理不同虚拟磁盘;
以下表格是不同文件系统特性的对比:
| 功能/文件系统 | ext4 | XFS | Btrfs |
|---|---|---|---|
| 快照 | 无 | 无 | 支持 |
| 内置压缩 | 无 | 无 | 支持 |
| 校验和 | 无 | 无 | 支持 |
| 子卷 | LVM 管理 | LVM 管理 | 原生 |
| 在线扩容 | 支持 | 支持 | 支持 |
三、Btrfs 在虚拟化存储的典型应用
在虚拟化平台上,我们通常将虚拟机磁盘(.qcow2 或 raw)存放在文件系统下。利用 Btrfs 子卷 + 快照机制可以:
- 快速创建 VM 克隆
- 快速回滚 VM 到历史状态
- 减少重复扫描(与 qcow2 叠加使用)
四、系统准备与 Btrfs 安装
4.1 安装必要工具
yum install -y epel-release
yum install -y btrfs-progs
确认版本:
btrfs --version
输出示例:
btrfs-progs v4.9.1
五、创建 Btrfs 文件系统
5.1 设备识别与分区
假定测试盘为 /dev/nvme0n1:
lsblk
输出示例:
nvme0n1 259:0 0 3.6T 0 disk
使用 gdisk 或 fdisk 创建单个分区用于 Btrfs:
parted /dev/nvme0n1 --script mklabel gpt
parted /dev/nvme0n1 --script mkpart primary 1MiB 100%
5.2 格式化为 Btrfs
mkfs.btrfs -f /dev/nvme0n1p1
说明:
-f强制格式化。
5.3 挂载并启用特性
创建挂载点:
mkdir -p /btrfs_pool
添加到 /etc/fstab:
/dev/nvme0n1p1 /btrfs_pool btrfs defaults,noatime,compress=zstd 0 0
挂载:
mount -a
检查挂载:
mount | grep btrfs
六、创建子卷与配额
建议将每个虚拟磁盘存放在独立子卷中,这样便于快照管理。
6.1 创建子卷
btrfs subvolume create /btrfs_pool/vm_images
btrfs subvolume create /btrfs_pool/vm_iso
btrfs subvolume create /btrfs_pool/vm_snapshots
查看子卷:
btrfs subvolume list /btrfs_pool
6.2 启用配额管理
配额能限制子卷使用空间:
btrfs quota enable /btrfs_pool
设置子卷配额(示例):
btrfs qgroup limit 500G /btrfs_pool/vm_images
检查配额:
btrfs qgroup show /btrfs_pool
七、优化挂载选项与性能调优
7.1 压缩与延迟写
在 /etc/fstab 中我们已经启用了 compress=zstd:
compress=zstd:1为快速模式(默认级别)noatime避免修改访问时间
如果压缩影响性能也可改为 compress=lzo。
7.2 预防碎片整理
碎片整理:
btrfs filesystem defragment -r -v /btrfs_pool/vm_images
可配合 nohup 定时执行。
7.3 校验与清理
平行检查:
btrfs scrub start -B -R /btrfs_pool
八、快照与回滚管理
8.1 创建快照
为某虚拟机磁盘创建快照:
btrfs subvolume snapshot /btrfs_pool/vm_images/vm01.qcow2 /btrfs_pool/vm_snapshots/vm01-$(date +%F_%H%M)
8.2 列出快照
btrfs subvolume list /btrfs_pool/vm_snapshots
8.3 回滚快照
回滚到指定快照:
btrfs subvolume delete /btrfs_pool/vm_images/vm01.qcow2
btrfs subvolume snapshot /btrfs_pool/vm_snapshots/vm01-2025-01-10_1030 /btrfs_pool/vm_images/vm01.qcow2
此操作应在 VM 关闭后执行。
九、与 qcow2 镜像格式结合的优势
在 KVM 虚拟化下:
- 使用 Btrfs 子卷 + qcow2
- qcow2具备 COW 特性
这种组合使得存储层和镜像层都具备灵活性与压缩能力。
十、性能评估数据
10.1 读写性能对比
使用 fio 进行随机读写:
fio --name=randrw --ioengine=libaio --iodepth=32 --rw=randrw \
--bs=4k --direct=1 --size=50G --numjobs=4 --runtime=600 \
--group_reporting --directory=/btrfs_pool/vm_images
与 ext4 基准对比:
| 指标 | ext4 | Btrfs (无压缩) | Btrfs (zstd) |
|---|---|---|---|
| 4K 读 IOPS | 85,000 | 80,500 | 78,200 |
| 4K 写 IOPS | 60,000 | 58,700 | 55,000 |
| 吞吐 MB/s | 320 | 305 | 298 |
| CPU 利用率 | 18% | 22% | 24% |
分析:Btrfs 在带压缩的场景下略有性能损失,但实际磁盘空间节省显著。
10.2 空间利用率评估
使用压缩前后空间对比:
| 镜像大小 | 未压缩 | zstd 压缩 |
|---|---|---|
| Ubuntu VM 镜像 | 30G | 22G |
| Windows Server 2019 | 40G | 33G |
| CentOS 7 VM | 25G | 18G |
十一、故障与恢复实践
-
快照滥用空间问题:长期未删除快照会占用空间,可使用:
btrfs filesystem df /btrfs_pool -
文件系统损坏恢复:
btrfs check --repair /dev/nvme0n1p1注意:风险较高,建议提前备份。
十二、总结与建议
A5数据通过在 CentOS 7.9 上部署 Btrfs 文件系统作为虚拟机存储池,可以显著提升快照管理效率与存储空间利用率,同时具备良好的维护可观性。尽管在部分高负载场景下 Btrfs 的性能略低于 ext4,但其强大的功能性使其在虚拟化平台中成为值得优先考虑的方案。
推荐实践
- 将每个 VM 置于独立子卷中;
- 定期清理历史快照;
- 针对不同 VM 类型调整压缩策略;
- 定期进行 scrub 和碎片整理维护。
如需拓展至 Ceph、GlusterFS 等分布式存储系统与 Btrfs 联用,也可在此基础上进行更深入架构设计。

浙公网安备 33010602011771号