linux磁盘快照非内核原生功能,需依赖lvm、btrfs或zfs等存储层实现写时复制;lvm快照需预留空间并支持只读挂载与卸载后回滚,btrfs快照轻量可写但不跨设备,二者均不能替代异地备份。

Linux磁盘快照本身不是内核原生功能,而是依赖于特定存储层(如LVM、Btrfs、ZFS)实现的写时复制(Copy-on-Write)机制。真正能用于生产环境的“快照备份与回滚”,必须结合具体文件系统或逻辑卷管理器来操作,不能脱离底层支撑。
用LVM创建和管理快照
LVM是传统Linux发行版中最广泛支持快照功能的方案,适用于ext4/xfs等主流文件系统。
- 要求源逻辑卷(LV)所在卷组(VG)预留足够空闲空间(建议≥20%原始LV大小),快照本身也占用VG空间
- 创建快照命令示例:
lvcreate -L 2G -s -n data-snap /dev/vg0/data-lv - 挂载快照只读使用:
mount -o ro /dev/vg0/data-snap /mnt/snap - 回滚前需确保原LV已卸载,且目标快照处于一致状态(最好在创建时已同步文件系统):
lvconvert --merge /dev/vg0/data-snap(需重启或卸载原LV后生效)
Btrfs子卷快照:轻量、原生、可写
Btrfs将快照作为子卷实现,无需额外空间预分配,支持可写快照,适合频繁备份场景。
- 前提:根目录或目标目录需位于Btrfs文件系统上,且已启用子卷(默认开启)
- 创建只读快照:
btrfs subvolume snapshot -r /data /data/.snapshots/20240520 - 创建可写快照(可用于测试回滚):
btrfs subvolume snapshot /data /data/test-rollback - 回滚即切换默认子卷:
btrfs subvolume set-default `btrfs subvolume list / | grep "20240520" | awk '{print $2}'` /,然后重启或重新挂载
快照 ≠ 备份:关键注意事项
快照保存在相同物理设备上,无法防范磁盘损坏、误删除快照卷、文件系统崩溃等风险。
- 快照依赖原始数据块,一旦源LV或Btrfs子卷损坏,快照大概率失效
- LVM快照写入频繁时容易“溢出”,导致快照自动失效(出现“snapshot is invalid”)
- Btrfs快照不跨设备,若需异地容灾,仍需搭配rsync、borgbackup或zfs send/receive等工具导出
- 数据库等应用数据需配合一致性处理:快照前执行mysql -e "FLUSH TABLES WITH READ LOCK"或使用pg_basebackup等工具
简单回滚验证流程(以LVM为例)
避免在生产环境直接操作,先在测试环境走通闭环。
- 停服务 → 卸载原LV → 创建快照 → 启动服务并运行一段时间
- 模拟故障(如误删关键配置)→ 停服务 → 卸载原LV → 执行lvconvert --merge → 重启系统
- 检查合并后数据是否恢复到快照时刻,确认服务可用性










