Snapper 是什么
Snapper 是快照管理前端,不是快照引擎本身:它调用底层文件系统或存储栈的快照能力,在 Btrfs 与精简置备的 LVM 上按配置创建、列出、对比与回滚快照。它同时负责时间线快照的保留清理规则,是 openSUSE 与 SLES 的默认集成方案,其他发行版也可以单独安装使用。
基本信息
| 适用平台 | openSUSE/SLES 默认集成,Btrfs 或精简 LVM 场景可单独部署 |
|---|---|
| 配置位置 | /etc/snapper/configs/ 下每个配置一份文件 |
| 引用方式 | snapper -c <配置名> <子命令>,默认配置名为 root |
| 核心能力 | 时间线快照、变更对比、单文件回滚、整子卷回滚 |
| 定时驱动 | 由 systemd 定时器承担快照与清理任务 |
| 权限要求 | 查看需普通权限,创建与回滚需 root |
典型使用场景
- 系统或内核升级前打一份手动快照,升级失败可整体回退
- 对比两次快照的差异,定位「到底改了什么文件」
- 误删或改坏某个配置文件后,从快照恢复单个文件
- 给 /home 等独立分区单独定义保留策略,与系统盘分开管理
- 控制快照数量与占用:按时间线规则自动清理历史快照
创建与管理
创建与管理
snapper -c root list # 列出快照:编号、类型、时间、描述
snapper -c root create -d "before-upgrade" # 升级前打手动快照并标注用途
snapper -c root status 1..2 # 对比两个快照的差异
snapper -c root undochange 1..0 /etc/fstab # 只把某个文件恢复成快照 1 的版本
snapper -c root rollback 1 # 按快照回滚整个子卷(需谨慎)
snapper -c root list --columns number,type,date,used-space # 关注占用情况list 输出逐列读法
| 列 | 含义 | 正常/异常 |
|---|---|---|
| 编号 | 快照编号,对比与回滚都按它引用 | 0 通常代表当前挂载的子卷 |
| 类型 | single 手动、pre/post 脚本成对创建、timeline 定时 | 成对快照缺一半说明脚本中途退出 |
| 日期时间 | 快照创建时间点 | 与操作时间明显不符说明选到了旧快照 |
| 已用空间 | 该快照的独占占用 | 持续增长说明清理策略没生效 |
| 清理算法 | 时间线保留规则(按数量或按窗口) | 显示为空表示不参与自动清理 |
快照只覆盖配置指向的那个子卷:/home、/var/log、/srv 等独立挂载点默认不在 root 配置范围内,需要单独建配置,否则「整体回滚」后这些目录里的改动不会被一起还原。
回滚是覆盖性动作,会丢弃目标子卷当前的状态。执行前先手动打一份快照或把关键文件另存一份,确认回滚点选对再做。
Btrfs 快照与被快照子卷必须在同一文件系统内,跨文件系统无法建立快照关系;这也是规划分区时要把系统与数据分开考虑的原因。