我的 /home 分区由整个物理磁盘组成。它被格式化为 btrfs。我想截图。我对子卷命名感到困惑,特别是。
我知道有类似的问题,但每个类似的问题似乎都在问与我所问的不同的问题(而且它们更旧,这意味着考虑到 btrfs 的快速发展,这意味着可能已经过时了)。例如,这个问题的答案显然不是我问题的答案,因为我的 /home 分区是一个单独的卷,而 btrfs 的手册页显示了一个不同的命令来创建快照。
另一个类似的问题,没有可靠的解决方案。
其他人和我一样对命名问题感到困惑
从简单开始:这是对我的主分区进行简单快照的正确命令吗?
btrfs subvolume snapshot /home/@home /home/@home_snapshot_20120421
Run Code Online (Sandbox Code Playgroud)
我真的很勇敢并对其进行了测试,但它不起作用。错误是error accessing /home/@home
。如下图,列出了@home。
我显然对子卷名称感到困惑。我需要在创建快照时使用它们吗?一些示例显示使用/home
作为源参数拍摄 home 的快照,但基于根卷的示例,在我看来,我需要使用/home/@home
.
这个命令能用吗?如果不是,为什么?
btrfs subvolume snapshot /home /home/@home_snapshot_20120421
Run Code Online (Sandbox Code Playgroud)
是@
只是一个命名约定?有意义吗?
以下是一些可能相关的输出:
btrfs subvolume list /home
ID 256 top level 5 path @home
Run Code Online (Sandbox Code Playgroud)
我不确定这到底是什么意思。当我尝试时,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"
Run Code Online (Sandbox Code Playgroud)
Mou*_*inX 21
鉴于 home 位于 btrfs 分区上并且它被挂载为 /home,正确的命令是:
sudo btrfs subvolume snapshot /home/ /home/<any_name_you_choose_for_the_snapshot>
Run Code Online (Sandbox Code Playgroud)
这是我的结果:
在今天运行命令之前:
$ btrfs subvolume list /home
ID 256 top level 5 path @home
ID 257 top level 5 path @home/@snapshot_20120521_1936
Run Code Online (Sandbox Code Playgroud)
命令:
$ sudo btrfs subvolume snapshot /home/ /home/@snapshot_20120611_1307
Create a snapshot of '/home/' in '/home/@snapshot_20120611_1307'
Run Code Online (Sandbox Code Playgroud)
今天运行命令后:
$ 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
Run Code Online (Sandbox Code Playgroud)
此方法的唯一问题是当您 ls (list) /home 时会显示快照。
Ubuntu 社区 Wiki 已更新为解决方案。这里是:
如何在 Ubuntu 的布局中使用快照
为了在 Ubuntu 布局中使用 / 或 /home 的快照,将 btrfs 文件系统安装在单独的位置非常方便,并且从 btrfs 树的顶部工作,而不是从安装的子卷。<-- 这就是解决方案。不幸的是,这并不方便。
sudo mount /dev/sdX# /mnt
Run Code Online (Sandbox Code Playgroud)
要创建快照,请使用我在上面使用的相同语法:
sudo btrfs subvolume snapshot /mnt/@ /mnt/@_snapshot
Run Code Online (Sandbox Code Playgroud)
这将创建名为@_snapshot 的@subvolume 的快照,该快照也位于 btrfs 树的顶部。由于它位于树的顶部,因此在列出已安装卷中的文件时不会显示它。
要回滚到快照,您只需将其名称更改为 ubuntu 挂载并重新启动的名称。更改名称的方法如下:
sudo mv /mnt/@ /mnt/@_badroot
sudo mv /mnt/@_snapshot /mnt/@
Run Code Online (Sandbox Code Playgroud)
要删除快照,请使用:
sudo btrfs subvolume delete /mnt/@_badroot
Run Code Online (Sandbox Code Playgroud)
btrfs 快照本身就是子卷,并且是自包含的,像这样删除旧的 @ 子卷是可以的,前提是我们有替代品。
注意: btrfs-tools 命令set-default
会破坏 Ubuntu 的布局。
tur*_*rbo 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
root 子卷必须命名为@
btw。)社区 wiki强烈建议保持@
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-snapshot-rotation就是一个例子。谨慎使用它们,因为它们都不是真正成熟的或获得足够的牵引力,即它们很可能包含错误。
psu*_*usi 10
安装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
named的快照/@snapshot-today
。将此与 running 进行比较btrfs subvolume snapshot /home /home/@snapshot_today
,后者将快照创建为 的子项/@home
,因此当您ls /home
和它的真名是时它会显示/@home/@snapshot-today
。
回滚快照只是一个简单的重命名操作:mv /mnt/@home @backup ; mv /mnt/@snapshot-today @home
. 下次启动时,当它进入 mount/@home
时/home
,它会找到快照。
绕开你的头有点棘手,因为你必须记住 btrfs 如何看待事物与内核如何看待事物之间的区别,这受到挂载选项(特别是 subvol= 参数)的影响。