如何制作 btrfs 快照?

Mou*_*inX 23 backup btrfs

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

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

另一个类似的问题,没有可靠的解决方案
其他人和我一样对命名问题感到困惑

我的问题:

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

btrfs subvolume snapshot /home/@home /home/@home_snapshot_20120421
Run Code Online (Sandbox Code Playgroud)

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

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

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

btrfs subvolume snapshot /home /home/@home_snapshot_20120421
Run Code Online (Sandbox Code Playgroud)

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

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

btrfs subvolume list /home
ID 256 top level 5 path @home
Run Code Online (Sandbox Code Playgroud)

我不确定这到底是什么意思。当我尝试时,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"  
Run Code Online (Sandbox Code Playgroud)

Mou*_*inX 21

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

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

sudo btrfs subvolume snapshot /home/ /home/<any_name_you_choose_for_the_snapshot>
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

在今天运行命令之前:

$ btrfs subvolume list /home  
ID 256 top level 5 path @home  
ID 257 top level 5 path @home/@snapshot_20120521_1936
Run Code Online (Sandbox Code Playgroud)

命令:

$ sudo btrfs subvolume snapshot /home/ /home/@snapshot_20120611_1307  
Create a snapshot of '/home/' in '/home/@snapshot_20120611_1307'
Run Code Online (Sandbox Code Playgroud)

今天运行命令后:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

sudo mount /dev/sdX# /mnt
Run Code Online (Sandbox Code Playgroud)

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

sudo btrfs subvolume snapshot /mnt/@ /mnt/@_snapshot
Run Code Online (Sandbox Code Playgroud)

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

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

sudo mv /mnt/@ /mnt/@_badroot
sudo mv /mnt/@_snapshot /mnt/@
Run Code Online (Sandbox Code Playgroud)

要删除快照,请使用:

sudo btrfs subvolume delete /mnt/@_badroot
Run Code Online (Sandbox Code Playgroud)

btrfs 快照本身就是子卷,并且是自包含的,像这样删除旧的 @ 子卷是可以的,前提是我们有替代品。

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


tur*_*rbo 11

首先确定:

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

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

  • 子卷可以有任何名称。@ 是 Ubuntu 在安装时的约定。(如果您使用apt-btrfs-snapshotroot 子卷必须命名为@btw。)社区 wiki强烈建议保持@root 和@homehome 身份,因为它是以这种方式安装的。如果您想回滚,这一点尤其重要:您不应该使用 btrfs subvolume 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就是一个例子。谨慎使用它们,因为它们都不是真正成熟的或获得足够的牵引力,即它们很可能包含错误。


psu*_*usi 10

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

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

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

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