如何在 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

使用 gdiskfdisk 创建单个分区用于 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,但其强大的功能性使其在虚拟化平台中成为值得优先考虑的方案。

推荐实践

  1. 将每个 VM 置于独立子卷中;
  2. 定期清理历史快照;
  3. 针对不同 VM 类型调整压缩策略;
  4. 定期进行 scrub 和碎片整理维护。

如需拓展至 Ceph、GlusterFS 等分布式存储系统与 Btrfs 联用,也可在此基础上进行更深入架构设计。

posted @ 2026-01-11 10:25  A5IDC  阅读(51)  评论(0)    收藏  举报