如何制作btrfs快照?

我/ home分区包含整个物理磁盘。 它被格式化为btrfs。 我想快照它。 特别是我对子卷命名感到困惑。

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

另一个类似的问题,没有可靠的解
别人在命名问题上和我一样困惑

我的问题:

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

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

我非常勇敢并且测试了它并且它不起作用。 error accessing /home/@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/ 

这是我的结果:

在今天运行命令之前:

 $ 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 

这种方法的唯一问题是当你(列表)/ home时快照出现。

Ubuntu社区Wiki已经针对此进行了更新。 这里是:

如何在Ubuntu的布局中使用snaphots

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

 sudo mount /dev/sdX# /mnt 

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

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

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

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

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

要删除快照,请使用:

 sudo btrfs subvolume delete /mnt/@_badroot 

btrfs快照本身是子卷,并且是自包含的,删除旧的@ subvolume这样很好,只要我们有替换。

注意: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 ,则必须将根子卷命名为@ btw。) 社区维基强烈建议将@保留为root,将@home保留为home,因为它是以这种方式挂载的。 如果要回滚,这一点尤其重要:您不应该使用btrfs子卷set-default(不是出于目的而高级语法)。

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

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

所有btrfs命令都可以缩写,只要它们是明确的,因此例如sudo btrfs device scan可以截断为sudo btrfs dssudo 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的子/@home ,因此当你使用ls /home并且它的真实名称是/@home/@snapshot-today时它会显示出来。

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

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