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 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。