创建 btrfs 子卷,如 @ 或 @home

aka*_*IOT 13 filesystem btrfs 12.04

对 btrfs 很感兴趣,我决定在 VM 中玩弄它。只要我记得把它/boot放在一个单独的分区上,安装就很好用,而且一切似乎都很好。

我想做的是为具有不同设置的批量数据创建一个单独的子卷,而不是像@@homebtrfs subvolume create data会为我做到这一点,但我很好奇为什么它一直命名它@/data(或在我尝试/data或类似的事情时@data)。有没有一种特殊的方法来创建子卷@@home所以我的数据子卷会显示为@data?(以及:命名方案之间的确切区别是什么?)


附加信息:

  • ubuntu 12.04.2,在 mint15 主机上作为 KVM 来宾运行;
  • 来自 ubuntu-x-swat 的内核 3.8.0-27-generic(极好的向后移植);
  • btrfs 使用两个设备,/dev/sda以及/dev/sdb
  • /dev/sda并且/dev/sdb是主机操作系统未使用的磁盘上的分区

aka*_*IOT 16

,看来我发布的有点太早了,在 IRC 上全能的 Zosma 的帮助下,我们发现了它应该如何工作。

子卷@@home是BTRFS根的孩子,所以/实际上不是文件系统的根目录。所述BTRFS根的UUID在被提供/etc/fstab两次,用于提供所述底座//home。挂载文件系统的实际根目录显示安装程序创建的子卷:

root@box:~# mkdir /mnt/btrfs
root@box:~# mount UUID=f8963df3-1320-4bc0-a125-62be185b029e /mnt/btrfs
root@box:~# ls /mnt/btrfs
@  @home
Run Code Online (Sandbox Code Playgroud)

所以这就是他们去的地方!以 ubuntu 安装程序所做的确切方式创建一个新的子卷现在很容易:

root@box:~# btrfs subvolume create /mnt/btrfs/@data
Create subvolume '/mnt/btrfs/@data'
Run Code Online (Sandbox Code Playgroud)

现在,由于我们在 btrfs 根目录中创建了一个子卷,而不是在用于安装的根文件系统中,/data/因此不会单独显示。幸运的是,通过检查/etc/fstab和添加另一个安装来复制安装程序使用的技巧是微不足道的/data

UUID=f8963df3-1320-4bc0-a125-62be185b029e /data  btrfs  defaults,subvol=@data 0 2
Run Code Online (Sandbox Code Playgroud)

最后一步是创建挂载点:mkdir /data. 重新启动后,我们将从/data单独的 btrfs 子卷挂载一个目录。

… 利润!


ign*_*nis 5

只要我记得将 /boot 放在单独的分区上,安装就很好用

您不需要有单独的 /boot。GRUB2 可以从 btrfs 读取和引导 Linux。

我想做的是为批量数据创建一个单独的子卷,其设置与 @ 和 @home 之类的设置不同。

如果您正在谈论使用不同的挂载选项挂载子卷,请注意目前(2013 年 11 月)它们不受支持:根据 Btrfs 常见问题解答,“我可以使用不同的挂载选项挂载子卷吗? ”,目前只有 btrfs 特定的选项不受支持或未实施。但是,开发人员计划在未来实施它。

btrfs subvolume create data 会为我做到这一点,但我很好奇为什么它一直将它命名为 @/data (或在我尝试 /data 或 @data 时使用类似的东西)

默认情况下,Ubuntu的安装无处不在创建子卷@,并@home在文件系统中,并且你的Ubuntu根实际上是在子卷@

有没有一种特殊的方法来创建像@ 和@home 这样的子卷,这样我的数据子卷就会显示为@data?(以及:命名方案之间的确切区别是什么?)

@@home是安装程序选择的任意名称,在/etc/fstab. 事实上,我通常将它们重命名为更具体的名称,这样我就可以在同一个 btrfs 上拥有许多 Ubiquity 安装的发行版,只要我记得更新它们的 fstab。

Funtoo.org-BTRFS 上的更多子卷解释。