我的 /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 和@home
home,因为它是这样挂载的。如果你想回滚,这一点尤其重要:你不应该使用 btrfs subvolume set-default(不是故意强调的语法)。因为
btrfs device scan
你必须使用sudo
。要删除子卷,您可以使用
sudo btrfs subvolume delete @home_snapshot_20120421
所有 btrfs 命令都可以缩写,只要它们是无歧义的,例如sudo btrfs device scan
可以截断为sudo btrfs d s
,sudo btrfs dev sc
或介于两者之间的任何内容。
希望这些回答能解答你的问题。有一些工具可以定期备份,btrfs-快照旋转就是一个例子。请谨慎使用这些,因为它们都还不够成熟或缺乏足够的吸引力,也就是说,它们很可能包含错误。
答案3
安装该apt-btrfs-snapshot
包并使用其子命令list
、snapshot
和delete
。set-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= 参数)的影响。