opensuse系统快照管理

opensuse系统快照管理常用命令

SUSE官方文档:https://documentation.suse.com/zh-cn/sles/12-SP5/html/SLES-all/cha-snapper.html

基于Btrfs文件系统的快照管理
https://documentation.suse.com/zh-cn/sle-micro/6.0/html/Micro-transactional-updates/index.html

创建快照

每安装一次软件包后重启,就会生成一个快照

snapper create

# 为根文件系统创建 Snapper 配置
## 参数: / 表示配置应用于根分区
snapper create-config /

# 创建一个名为 "home" 的 Snapper 配置,用于管理 /home 挂载点
## 参数: -c home 指定配置名称;/home 表示目标挂载点
snapper -c home create-config /home

查看快照列表

# 查看快照列表
snapper list

修改快照描述

# 修改快照12的 描述
snapper modify -d "安装了mosh" 12

回滚快照

# 回滚快照
snapper rollback 快照编号

# 回滚到快照5 并添加备注
snapper rollback 5 -d "Emergency_rollback"

对比快照

snapper status 15..16 |less  # 查看文件变化
snapper diff 15..16 |less   # 内容差异对比

删除快照

# 删除快照
snapper delete 快照编号

回滚操作

https://blog.gemo.one/2023/05/btrfs-backpack-and-recovery/

snapperopenSUSE 之外的系统操作回滚还是很麻烦的.

回滚操作是一个比较复杂的变更,使用 snapper 也是一个比较繁杂的操作。

需要注意尽量确认自己修改了哪个文件,需要回滚,尽量使用 undochange 命令进行回滚,rollback 需要配合额外的工具实现具体回滚( openSUSE 正常回滚,会创建 grub2 条目,但其他系统修改 /etc/fstab 无法成功 )。

因此文件数量较少,可以使用 undochange 撤销更改:

# 使用 Snapper 回滚指定快照之间的文件更改(还原修改前的版本)
## 参数: <修改前的快照编号>..<修改后的快照编号> 表示快照对比范围;<文件名> 是要恢复的具体文件路径
snapper undochange <修改前的快照编号>..<修改后的快照编号> <文件名>

# 回滚快照 1 到 3 之间对 /etc/hostname 文件的更改
snapper undochange 1..3 /etc/hostname

# 如果需要比对两个快照之间的差异,可以使用 status 命令
## 参数: <第一个快照编号>..<第二个快照编号>,第一个快照的创建时间必须早于第二个
snapper status <第一个快照编号>..<第二个快照编号>

# 查看快照 1 和 3 之间的文件变更情况
snapper status 1..3

如果确实需要 rollback 到对应的快照,完全回滚到对应的快照号,则可以通过 subvol 特性实现。

手上需要一个支持 btrfs 格式挂载的系统维护盘,gentoo 的安装盘即可。

假设快照所在的磁盘标签为 DISK(磁盘格式为 btrfs)。

# 挂载指定设备上的 Btrfs 子卷 / 到目标目录 /mnt/gentoo
## 参数: /dev/disk/by-label/DISK 是设备标识;
## /mnt/gentoo 是挂载点;
## -o subvol=/ 指定要挂载的子卷路径
mount /dev/disk/by-label/DISK /mnt/gentoo -o subvol=/

迁移 snapshot 目录

如果你创建的 snapper 快照目录存储在默认的 / 路径下,并没有单独分盘,可以考虑将其迁移出单独的盘,更好管理。若原先已分成单独子卷可以,可以跳过该步骤。

假设当前子卷架构如下:

IDgentop levelpath
28769415@home
18769395@

snapper 原来存储快照在 @/.snapshots 目录下,即默认路径,未挂载单独目录。

btrfs 的子卷可以当作普通文件夹取管理:

# 将 Btrfs 子卷中默认的快照目录 .snapshots 重命名为 snapshots
## 参数: @/.snapshots 是原子卷路径;@snapshots 是新命名的目标子卷路径
mv @/.snapshots @snapshots

@/.snapshots 移动到根目录,其 top level 就会变化和 @ 一致。

IDgentop levelpath
38769135@snapshots
28769415@home
18769395@

后续直接添加 /etc/fstab 条目即可:

参数解释
defaults:默认挂载参数(rw, suid, dev, exec, auto, nouser, async)
subvol=@snapshots:指定挂载的 Btrfs 子卷名称为 @snapshots
compress=zstd:8:启用 zstd 算法压缩,压缩等级 8
ssd:优化 SSD 性能
space_cache=v2:使用更高效的块空间缓存跟踪机制
discard=async:异步执行 TRIM 操作,提升 SSD 寿命与性能
# fstab 条目:定义如何挂载快照子卷 @snapshots
## - LABEL=DISK 表示设备按标签挂载
## - /.snapshots 是挂载点路径
## - btrfs 表示文件系统类型
## - defaults,subvol=@snapshots,... 表示挂载选项,包含子卷名称和压缩等设置
## - 0 0 表示不进行 dump 备份和 fsck 检查
LABEL=DISK     /.snapshots     btrfs   defaults,subvol=@snapshots,compress=zstd:8,ssd,space_cache=v2,discard=async         0 0

通过子卷快照回滚

不需要明确的回滚操作,通过子卷移动或者“快照的快照”,也可以方便地实现快照的回滚。

假设 snapper 快照号为 326 ,则其子卷路径为 @snapshots/326/snapshot,可以通过 btrfs subvolume list /mnt/gentoo | grep 326 搜索路径。此处回滚 root 的快照

# 备份原有 root
# 创建当前根子卷 @ 的快照作为备份,命名为 @bak
## 参数: 第一个 @ 是源子卷;@bak 是新建的快照名称
btrfs subvolume snapshot @ @bak

# 删除当前根子卷 @(谨慎操作)
## 参数: @ 是要删除的子卷名称
btrfs subvolume delete @

# or 也可以使用 mv 命令重命名子卷而不是删除
mv @ @bak

# 迁移快照
# 使用快照编号 326 中的 snapshot 创建新的根子卷 @(从快照恢复)
## 参数: @snapshots/326/snapshot 是源快照路径;@ 是目标子卷名称
btrfs subvolume snapshot @snapshots/326/snapshot @

# or 直接重命名快照为根子卷 @
mv @snapshots/326/snapshot @

迁移完成后重启即可。

小结

btrfs 目前已经很稳定,没有比较大的问题,快照管理也十分简单,所有快照都是子卷,子卷当文件管理也可以。

恢复快照需要重启设备,而且异地存储还需要目标机器是 btrfs 格式的磁盘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值