回滚 BTRFS 中的根快照

回滚 BTRFS 中的根快照

我只有1 个 BTRFS 分区包含//home

我已经通过以下命令对根文件系统进行了快照:

btrfs subvolume snapshot / /root/snapshots/test

现在我想恢复这个快照。我怎么做 ?

当我启动到救援介质并安装时,我得到:

# mount -t btrfs /dev/sda3 /mnt
# ls /mnt
# bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

正如您所看到的,我的子卷从这里不可见。

但是当我这样做时:

$ btrfs subvolume list /
ID 256 gen 3794 top level 5 path fedora
ID 264 gen 2296 top level 256 path root/snapshots/test

如何恢复这个快照?

教程说我必须将子卷重命名为根。我怎么做 ?

我尝试过编辑/etc/fstab但没有效果。

答案1

您拥有的是一个包含两个子卷的 BTRFS 文件系统:

  1. fedora- 这是设置为您的默认子卷,这是您在挂载文件系统而不指定子卷时看到的内容。前任。mount -t btrfs /dev/sda3 /mnt
  2. root/snapshots/test- 这是您创建的快照fedora

在 BTRFS 中,实际上不存在恢复快照之类的事情。相反,您只需使用不同的子卷作为根文件系统进行引导。有几种方法可以做到这一点。

重命名子卷

为此,您首先需要挂载顶级卷,该卷的 ID 始终为 5,并且在您的情况下默认情况下不会挂载。之后您可以进行正常的目录重命名。

笔记:这在您的情况下不起作用,因为您的操作系统配置为将默认子卷安装为根文件系统,并且此过程不会更改默认子卷。

mount -t btrfs -o subvolid=5 /dev/sda3 /mnt
cd /mnt
mv fedora fedora-old
mv fedora-old/root/snapshots/test fedora

更改默认子卷

通过更改默认子卷,重新启动时您的系统将从新的默认子卷启动。下面显示的子卷 ID 264 来自您的示例btrfs subvolume list /

btrfs subvolume set-default 264 /

更改引导加载程序中的根子卷

如何完成此操作取决于您的引导加载程序,但引导加载程序(例如 GRUB)通常包含一行配置,用于指定将哪个文件系统挂载为根文件系统。可以更改该配置以引导不同的子卷。不幸的是我没有例子可以展示。但请注意,这是无法完成的,/etc/fstab因为直到稍后才会读取该文件。

结论

对于您的具体情况,我认为通过更改默认子卷可以获得最佳结果。

相关内容