如何制作 btrfs 快照?

如何制作 btrfs 快照?

我的 /home 分区由一整块物理磁盘组成。它的格式为 btrfs。我想对它进行快照。我对子卷命名特别困惑。

我知道有类似的问题,但每个类似的问题似乎都在问一些事情不同的从我问的问题来看(它们比较老,这意味着可能已经过时了,因为 btrfs 的发展很快)。例如,这个问题显然不是我的问题的答案,因为我的 /home 分区是一个单独的卷,并且 btrfs 的手册页现在显示了用于创建快照的不同命令。

另一个类似的问题,没有固溶体
有人和我一样对命名问题感到困惑

我的问题:

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

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"  

答案1

在 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

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

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

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

要删除快照,请使用:

sudo btrfs subvolume delete /mnt/@_badroot

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

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

答案2

好的,首先要做的事情是:

  • 您正在查看的子卷的名称@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根子卷,则必须命名@。)社区维基强烈建议将其保留@为 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-快照旋转就是一个例子。请谨慎使用这些,因为它们都还不够成熟或缺乏足够的吸引力,也就是说,它们很可能包含错误。

答案3

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

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

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

这有点难以理解,因为你必须记住 btrfs 看待事物的方式与内核看待事物的方式之间的区别,这受到挂载选项(特别是 subvol= 参数)的影响。

相关内容