如何制作btrfs快照?


22

我的/ 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"  

社区将决定回购…
一零零

Answers:


19

在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(列出)/ home时会显示快照。

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

如何在Ubuntu布局中使用snaphots

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

sudo mount /dev/sdX# /mnt

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

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

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

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

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

要删除快照,请使用:

sudo btrfs subvolume delete /mnt/@_badroot

btrfs快照本身就是子卷,并且是独立的,可以删除旧的@子卷,这样就可以了,只要我们有替换的话。

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


所以你在那里吗?现在,您应该可以挂载快照了。
涡轮增压

我实际上还没有尝试安装它们。我刚刚看到了psusi关于apt-btrfs-snapshot软件包的回答。看起来很有趣,对吧?
Monica Cellio的MountainX 2012年

是的,我也提到了第三点。抱歉,必须指出;)
涡轮增压

建议您将解决方案标记为答案。
涡轮增压

ls / home时显示快照是有解决方案的。我正在用信息编辑我的答案。
Monica Cellio的MountainX,2012年

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-snapshot根子卷,则必须将其命名为@btw。)社区Wiki强烈建议保留@为root和@homehome,因为它是通过这种方式安装的。如果要回滚,这一点尤其重要:不应使用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是一个示例。请谨慎使用,因为它们中的任何一个都还没有真正成熟或获得足够的吸引力,即它们很可能包含错误。


我收到一个错误:$ sudo btrfs subvolume snapshot @home home/@snapshot_20120611_1257 ERROR: error accessing '@home'
Monica Cellio'MountainX

另外,我还没有成功btrfs device scan。任何变体,包括使用sudo提供了错误“ERROR:无法扫描设备‘的/ dev / sdX的’”,其中X是任何有效的名称,如A,A1,B等
MountainX为莫妮卡切廖

@OneZero:我还没有所有答案,但是我确实找到了在Ubuntu 12.04上创建我的家庭分区快照的正确命令,我在下面提供了该信息作为答案。
Monica Cellio的MountainX 2012年

确实很奇怪。我检查了btrfs分区btrfs sub snap @ /mnt/random,它对我有用。然后我又在/ mnt挂载@的地方。抱歉给您带来混乱
turbo

@turbo:您的回答非常有帮助。无需道歉为您提供帮助。甚至Ubuntu页面也不清楚。我们将最终弄清所有问题。
Monica Cellio的MountainX 2012年

10

安装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如何看待事物与内核如何看待事物之间的差异,这受mount选项(具体是subvol =参数)的影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.