如何制作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 ds
, sudo btrfs dev sc
或其间的任何内容。
我希望能回答你的问题。 有一些工具可以进行定期备份, btrfs-snapshot-rotation就是一个例子。 谨慎使用它们,因为它们都不是真正成熟或获得足够的牵引力,即它们可能很好地包含错误。
安装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
的子/@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 =参数)的影响。