Btrfs 子卷快照是什么
Btrfs 对子卷做写时复制快照:创建几乎瞬间完成,快照与源子卷共享未改动的数据块,只有新写入会额外占用空间。这让『每小时打一个时间点』变得可行,误改文件后可以直接切回。限制也很明确:快照与原数据在同一文件系统内,磁盘损坏时一起丢。
基本信息
| 适用平台 | Linux + Btrfs(SUSE 系默认,其他发行版可自建) |
|---|---|
| 关键命令 | btrfs subvolume snapshot 创建、subvolume list 查看、subvolume delete 删除 |
| 只读快照 | -r 生成只读快照,作为保护点更安全,需写时再克隆成可写 |
| 空间机制 | 与源共享数据块,占用随源数据变化量增长 |
| 异地能力 | btrfs send / receive 可把只读快照增量同步到远端 |
典型使用场景
- 系统升级前留保护点:滚动发行版升级前打一份只读快照,异常时快速回退
- 高频时间点保护:配合定时任务每小时或每日快照,应对误改误删
- 容器与虚拟机文件目录:对存放镜像的子卷打快照,秒级得到副本
- 发布前留底:Web 目录变更前快照,回退只需切换子卷
- 异地同步源:用只读快照配合 send/receive 把增量送到远端
创建与清理
创建与清理
# 创建只读快照(-r):作为保护点更安全
btrfs subvolume snapshot -r /mnt/btr/data /mnt/btr/snap/data-$(date +%F)
# 查看所有子卷与快照
btrfs subvolume list /mnt/btr
# 删除过期快照(子卷删除是异步的,占用稍后才释放)
btrfs subvolume delete /mnt/btr/snap/data-2026-09-01
# 异地同步:只读快照配合 send/receive 做增量复制
btrfs send -p /mnt/btr/snap/data-2026-10-12 /mnt/btr/snap/data-2026-10-13 \
| ssh backup@10.0.0.5 'btrfs receive /mnt/backup/snap/'subvolume list 输出读法
| 列 | 含义 | 正常/异常 |
|---|---|---|
| ID | 子卷编号,恢复或删除时用它定位 | 与目录名不匹配时以路径为准核对 |
| gen | 子卷的世代号,反映最后修改 | 长期停在旧世代的快照说明它确实是只读保护点 |
| top level | 所属父级子卷 ID | 快照被错误嵌套在其他子卷下会导致备份范围互相包含 |
| path | 子卷相对路径 | 路径与预期不符时先确认挂载点布局 |
快照位于同一文件系统内,磁盘故障时与源数据一起受影响;异地保护仍需用 send/receive 同步到远端,或另存独立副本。
频繁创建快照而不清理会持续消耗元数据与空间,需要配套保留策略;另外快照目录若被上级子卷收录,备份范围会意外膨胀。