当前位置: 首页>>技术教程>>正文


backup – 如何制作 btrfs 快照?

,

问题描述

我的 /home 分区由整个物理磁盘组成。它被格式化为 btrfs。我想截图。我对子卷命名感到困惑,特别是。

我知道有类似的问题,但每个类似的问题似乎都在问与我所问的不同的问题(而且它们更旧,这意味着考虑到 btrfs 的快速发展,这意味着可能已经过时了)。例如,this question 的答案显然不是我问题的答案,因为我的 /home 分区是一个单独的卷,而 btrfs 的手册页显示了现在用于创建快照的不同命令。

another similar problem, no solid solutionsomeone else as confused as me on the naming issues

我的问题:

从简单开始:这是对我的主分区进行简单快照的正确命令吗?

btrfs subvolume snapshot /home/@home /home/@home_snapshot_20120421

我真的很勇敢并对其进行了测试,但它不起作用。错误是 error accessing /home/@home 。如下图,列出了@home。

我显然对子卷名称感到困惑。我需要在创建快照时使用它们吗?一些示例显示使用 /home 作为源参数拍摄家庭快照,但基于根卷的示例,在我看来,我需要使用 /home/@home

这个命令能用吗?如果不是,为什么?

btrfs subvolume snapshot /home /home/@home_snapshot_20120421

@ 只是一个命名约定吗?有意义吗?

以下是一些可能相关的输出:

btrfs subvolume list /home
ID 256 top level 5 path @home

我不确定这到底是什么意思。当我尝试 btrfs device scan 时,它给出了一个错误(例如,无法扫描设备 /dev/sda1)。我的文件系统没有任何错误。一切顺利。

这是我的分区。在回复一个回复时,没有 /home 不是我唯一的 btrfs 分区。

/dev/sda1: (boot partition) TYPE="ext2"  
/dev/sda2: (root partition) TYPE="btrfs"  
/dev/sdb1: (home partition) TYPE="btrfs"  
/dev/sdc1: (shared partition) TYPE="btrfs"  
/dev/sdc2: TYPE="swap"  

最佳方案

在 Ubuntu 12.04 上创建我的主分区快照的正确命令是什么?

鉴于 home 位于 btrfs 分区上并且它被挂载为 /home,正确的命令是:

sudo btrfs subvolume snapshot /home/ /home/<any_name_you_choose_for_the_snapshot>

这是我的结果:

在今天运行命令之前:

$ btrfs subvolume list /home  
ID 256 top level 5 path @home  
ID 257 top level 5 path @home/@snapshot_20120521_1936

命令:

$ sudo btrfs subvolume snapshot /home/ /home/@snapshot_20120611_1307  
Create a snapshot of '/home/' in '/home/@snapshot_20120611_1307'

今天运行命令后:

$ btrfs subvolume list /home  
ID 256 top level 5 path @home  
ID 257 top level 5 path @home/@snapshot_20120521_1936  
ID 258 top level 5 path @home/@snapshot_20120611_1307

此方法的唯一问题是当您 ls (list) /home 时会显示快照。

Ubuntu 社区 Wiki 已更新为解决方案。这里是:

如何在 Ubuntu 的布局中使用快照

为了在 Ubuntu 布局中使用 /或 /home 的快照,将 btrfs 文件系统安装在单独的位置非常方便,并且从 btrfs 树的顶部工作,而不是从安装的子卷。 <– 这就是解决方案。不幸的是,这并不方便。

sudo mount /dev/sdX# /mnt

要创建快照,请使用我在上面使用的相同语法:

sudo btrfs subvolume snapshot /mnt/@ /mnt/@_snapshot

这将创建名为@_snapshot 的@subvolume 的快照,该快照也位于 btrfs 树的顶部。由于它位于树的顶部,因此在列出已安装卷中的文件时不会显示它。

要回滚到快照,您只需将其名称更改为 ubuntu 挂载并重新启动的名称。更改名称的方法如下:

sudo mv /mnt/@ /mnt/@_badroot
sudo mv /mnt/@_snapshot /mnt/@

要删除快照,请使用:

sudo btrfs subvolume delete /mnt/@_badroot

btrfs 快照本身就是子卷,而 self-contained,像这样删除旧的 @ 子卷就可以了,只要我们有替代品。

注意: btrfs-tools 命令 set-default 会破坏 Ubuntu 的布局。

次佳方案

首先确定:

  • 您正在查看的子卷的名称是 @home,如 btrfs subvolume list /home 所示。它安装在 /home 中。 @home 是子卷的名称,它的 ID 也是 256,所以很可能只有你的 /home 被格式化为 btrfs。

  • 现在要创建@home 的快照,您必须发出:sudo btrfs subvolume snapshot /home/ /home/@home_snapshot_20120421

  • 子卷可以有任何名称。 @ 是 Ubuntu 在安装时的约定。 (如果您使用 apt-btrfs-snapshot,则根子卷必须命名为 @ 顺便说一句。)community wiki 强烈建议将 @ 保留为根目录,将 @home 保留为 home,因为它以这种方式安装。如果您想回滚,这一点尤其重要:您不应该使用 btrfs 子卷 set-default(不是有意强调的语法)。

  • 对于 btrfs device scan 你必须使用 sudo

  • 要删除子卷,您可以使用 sudo btrfs subvolume delete @home_snapshot_20120421

所有 btrfs 命令都可以缩写,只要它们是明确的,例如 sudo btrfs device scan 可以被截断为 sudo btrfs d ssudo btrfs dev sc 或两者之间的任何内容。

我希望回答了你的问题。有一些工具可以进行定期备份,btrfs-snapshot-rotation 就是一个例子。谨慎使用它们,因为它们都不是真正成熟的或获得足够的牵引力,即它们很可能包含错误。

第三种方案

安装 apt-btrfs-snapshot 包,并使用其子命令 listsnapshotdeleteset-default

这是一个包装较低级别 btrfs 命令的脚本。它的工作原理是首先将 btrfs 根文件系统挂载到某处。我的意思是真正的根,而不是通常安装为 //@ 子卷。换句话说,您需要运行 mount /dev/sda1 /mnt 以便您可以查看将列为 /mnt/@/mnt/@home 以及您创建的任何其他子卷的子卷。从那里你可以 btrfs subvolume snapshot /mnt/@home @snapshot-today ,这将创建 /@home 的快照,名为 /@snapshot-today 。将此与运行 btrfs subvolume snapshot /home /home/@snapshot_today 进行比较,后者将快照创建为 /@home 的子项,因此它会在您 ls /home 时显示,其真实名称为 /@home/@snapshot-today

回滚快照只是一个简单的重命名操作: mv /mnt/@home @backup ; mv /mnt/@snapshot-today @home 。下次启动时,当它在 /home 中挂载 /@home 时,它会找到快照。

绕开你的头有点棘手,因为你必须记住 btrfs 如何看待事物与内核如何看待事物之间的区别,这受到挂载选项(特别是 subvol= 参数)的影响。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12077.html,未经允许,请勿转载。