Ubuntu ZFS 根分区快照对于系统回滚是否安全?

Ubuntu ZFS 根分区快照对于系统回滚是否安全?

想到 ZFS 可以支持我,昨天我开始摆弄 Gnome、Compiz 和 dconf 编辑器。几个小时后,Gnome 和各种插件看起来确实不错,但重启后,我的(复杂的 3 显示器)设置变得混乱,Wayland 非常不高兴。所以我想我会在那天晚上早些时候回到我的 Grub 快照历史记录,以免开始摆弄(因为 apt 当时已经创建了一些快照)。

选择较旧的根快照(系统和用户),重新启动,似乎没问题。但是然后…… sudo apt update && sudo apt upgrade ....整个系统变得混乱。开始弄乱内核和图形驱动程序更新。Apt 非常不高兴。非常奇怪。并破坏了整个显示驱动程序设置,以至于我无法恢复系统,今天花了半天时间重新安装 20.04。这次使用 ext 4(尽管到目前为止我对 ZFS 非常满意)。

所以我想知道。ZFS 快照真的推荐用于“回滚”根分区上的操作系统吗?或者它真的只适用于数据驱动器或主目录。apt 是否会在某种程度上感到困惑,即这种回滚是否会造成无法恢复的不一致状态?

答案1

ZFS 为您提供支持。但是 Ubuntu 中的当前实现似乎存在错误。特别是您一直在使用的 Grub 中的回滚菜单。它当前所做的是将快照克隆为新名称,然后将其挂载到旧名称之上。在这种使文件系统不一致的“恢复”之后,这会产生几个问题。我真的希望他们能修复这个问题,因为它显然有问题。

目前我建议使用zfs restore而不是clone并直接执行。这样可以完全干净地回滚文件系统。唯一的缺点是,您会永久丢失在此期间存储的所有数据,因此所有仍需要的数据都需要事先备份。好消息是,它还可以释放所有空间,而 ubuntu 方法则不会,因此您可以根据需要进行恢复,而不必每次都为此付费。

为此,第一步是从 Ubuntu Live CD 启动

然后您需要导入您的 zpool:

sudo zpool import rpool

列出所有快照并找出要恢复的快照。

zfs list -r -t snapshot -o name,creation

现在我们列出所有需要恢复的数据集

# name of snapshot to restore
export SNAPSHOT=autozsys_88hby6

# Choose one depending on your needs:
#   restore everything: rpool
#   restore system files only: rpool/ROOT
#   restore user files only: rpool/USERDATA
# We restore all datasets below this one.
export DATASET_ROOT=rpool

# collect list of datasets
export DATASETS=$(zfs list -r -t snapshot -o name $DATASET_ROOT | grep $SNAPSHOT)
for i in $DATASETS; do echo "$i"; done

仔细检查此列表,因为快照后更改的任何数据都将被删除。

警告:ZFS 只能回滚到最新快照。因此,所有中间快照和书签以及这些快照的任何克隆都必须销毁。我们通过指定 -rR 选项来执行此操作。我建议您查看文档。

现在我们需要对每个快照执行回滚。这将删除在此期间写入的所有数据。

for i in $DATASETS; do sudo zfs rollback -rR $i ; done

此时,您可以重新启动系统,并且会拥有一个没有任何混乱的回滚系统。

现在您知道了它的工作原理,我还想让您知道,您可以随时创建具有易于识别名称的快照。例如,在尝试某些有风险的操作之前。这样您就可以充分利用这种方法。为此,只需随时执行以下操作:

sudo zfs snapshot -r rpool@SNAP1_BEFORE_DCONF

笔记从技术上来说,回滚也可以在实时系统上进行。然而,这可能不是一个好主意,具体取决于更改的内容。

相关内容