Btrfs 文件系统使用指南
Btrfs(B-tree File System)是 Linux 上的新一代写时复制(CoW)文件系统,提供了快照、子卷、透明压缩、在线扩缩容等高级特性。在搬瓦工 VPS 上使用 Btrfs 可以实现更灵活的存储管理和更可靠的数据保护。本文将全面介绍 Btrfs 的安装配置和核心功能使用方法。
一、安装 Btrfs 工具
# Ubuntu/Debian
apt update
apt install btrfs-progs -y
# CentOS
yum install btrfs-progs -y
# 验证安装
btrfs --version
二、创建 Btrfs 文件系统
2.1 格式化分区
# 将分区格式化为 Btrfs(注意:会清除分区上的所有数据)
mkfs.btrfs -f /dev/vdb1
# 带标签格式化
mkfs.btrfs -f -L mydata /dev/vdb1
# 查看文件系统信息
btrfs filesystem show /dev/vdb1
2.2 挂载文件系统
# 创建挂载点
mkdir -p /mnt/btrfs
# 挂载(带优化选项)
mount -o compress=zstd,noatime /dev/vdb1 /mnt/btrfs
# 永久挂载(写入 fstab)
echo 'UUID=your-uuid /mnt/btrfs btrfs defaults,compress=zstd,noatime 0 0' >> /etc/fstab
三、子卷管理
子卷是 Btrfs 最重要的概念之一,它可以独立挂载、做快照,并且不占用额外空间。
3.1 创建子卷
# 创建子卷
btrfs subvolume create /mnt/btrfs/data
btrfs subvolume create /mnt/btrfs/backup
btrfs subvolume create /mnt/btrfs/docker
# 列出所有子卷
btrfs subvolume list /mnt/btrfs
# 查看子卷详细信息
btrfs subvolume show /mnt/btrfs/data
3.2 独立挂载子卷
# 通过子卷名挂载
mount -o subvol=data /dev/vdb1 /data
# 通过子卷 ID 挂载
btrfs subvolume list /mnt/btrfs # 获取子卷 ID
mount -o subvolid=256 /dev/vdb1 /data
# fstab 配置
echo 'UUID=your-uuid /data btrfs subvol=data,compress=zstd,noatime 0 0' >> /etc/fstab
3.3 删除子卷
# 删除子卷
btrfs subvolume delete /mnt/btrfs/backup
# 如果子卷包含快照,需要先删除快照
btrfs subvolume delete /mnt/btrfs/.snapshots/backup-snap
四、快照管理
快照是 Btrfs 的核心优势,可以在瞬间创建文件系统的完整副本,且几乎不占用额外空间。
4.1 创建快照
# 创建可读写快照
btrfs subvolume snapshot /mnt/btrfs/data /mnt/btrfs/snapshots/data-$(date +%Y%m%d)
# 创建只读快照(推荐用于备份)
btrfs subvolume snapshot -r /mnt/btrfs/data /mnt/btrfs/snapshots/data-$(date +%Y%m%d)-ro
4.2 从快照恢复
# 方法一:将原子卷改名,把快照改为原子卷名
mv /mnt/btrfs/data /mnt/btrfs/data-broken
btrfs subvolume snapshot /mnt/btrfs/snapshots/data-20260101 /mnt/btrfs/data
# 方法二:直接替换文件
cp -a /mnt/btrfs/snapshots/data-20260101/important-file /mnt/btrfs/data/
4.3 自动快照脚本
cat > /usr/local/bin/btrfs-snapshot.sh <<'EOF'
#!/bin/bash
SNAPSHOT_DIR="/mnt/btrfs/snapshots"
SOURCE="/mnt/btrfs/data"
DATE=$(date +%Y%m%d-%H%M)
KEEP_DAYS=7
# 创建快照
mkdir -p "$SNAPSHOT_DIR"
btrfs subvolume snapshot -r "$SOURCE" "$SNAPSHOT_DIR/data-$DATE"
# 清理旧快照
find "$SNAPSHOT_DIR" -maxdepth 1 -name "data-*" -type d -mtime +$KEEP_DAYS | while read snap; do
btrfs subvolume delete "$snap"
done
EOF
chmod +x /usr/local/bin/btrfs-snapshot.sh
# 添加定时任务(每天凌晨 2 点执行)
echo '0 2 * * * root /usr/local/bin/btrfs-snapshot.sh' >> /etc/crontab
五、透明压缩
Btrfs 支持在文件写入时自动压缩,可以节省磁盘空间并在某些场景下提升 I/O 性能。
5.1 压缩算法选择
- zstd:推荐选择,压缩率与速度均衡,支持级别 1-15。
- lzo:压缩速度最快,压缩率较低。
- zlib:压缩率最高,但速度较慢,支持级别 1-9。
# 使用 zstd 压缩(推荐)
mount -o compress=zstd:3 /dev/vdb1 /mnt/btrfs
# 对已有数据进行压缩
btrfs filesystem defragment -r -czstd /mnt/btrfs/data
# 查看压缩效果
btrfs filesystem usage /mnt/btrfs
compsize /mnt/btrfs/data # 需要安装 compsize 工具
5.2 安装 compsize 查看压缩统计
# 安装 compsize
apt install btrfs-compsize -y
# 查看压缩统计
compsize /mnt/btrfs/data
六、空间管理
# 查看文件系统空间使用详情
btrfs filesystem usage /mnt/btrfs
# 查看空间分配
btrfs filesystem df /mnt/btrfs
# 在线扩容(分区扩大后)
btrfs filesystem resize max /mnt/btrfs
# 在线缩容(谨慎操作)
btrfs filesystem resize -5G /mnt/btrfs
# 平衡数据块分布(碎片整理)
btrfs balance start -dusage=50 /mnt/btrfs
# 检查平衡进度
btrfs balance status /mnt/btrfs
# 文件系统碎片整理
btrfs filesystem defragment -r /mnt/btrfs
七、数据校验与修复
# 数据校验(scrub)- 在线执行,不影响使用
btrfs scrub start /mnt/btrfs
# 查看 scrub 进度
btrfs scrub status /mnt/btrfs
# 文件系统检查(需要卸载)
umount /mnt/btrfs
btrfs check /dev/vdb1
# 修复文件系统(谨慎使用)
btrfs check --repair /dev/vdb1
八、Btrfs 性能优化
# 推荐的挂载选项(SSD 优化)
mount -o compress=zstd:3,noatime,ssd,discard=async,space_cache=v2 /dev/vdb1 /mnt/btrfs
# fstab 完整示例
# UUID=your-uuid /mnt/btrfs btrfs defaults,compress=zstd:3,noatime,ssd,discard=async,space_cache=v2 0 0
各选项说明:
- ssd:启用 SSD 优化策略。
- discard=async:异步 TRIM,性能优于同步 TRIM。
- space_cache=v2:使用 v2 版空间缓存,性能更好。
- compress=zstd:3:使用 zstd 级别 3 压缩。
九、注意事项
- Btrfs 的写时复制特性会导致数据库等随机写入场景性能下降,建议对数据库目录禁用 CoW:
chattr +C /path/to/dbdir。 - Btrfs 的 RAID5/6 功能尚未完全稳定,生产环境不建议使用。
- 定期执行
btrfs scrub检查数据完整性。 - 注意 Btrfs 的空间报告与传统文件系统不同,
df显示的可用空间可能不准确,应使用btrfs filesystem usage。
总结
Btrfs 的快照和透明压缩功能对搬瓦工 VPS 用户非常实用,快照可以实现快速备份和回滚,压缩则能节省宝贵的磁盘空间。如果需要更企业级的特性,可以参考 ZFS 文件系统教程。存储管理方面还可以结合 LVM 逻辑卷管理 使用。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。