当我在安装过程中已将主目录安装到 BTRFS 磁盘时,如何将 2 个顶层子卷挂载到同一个 BTRFS 分区上

当我在安装过程中已将主目录安装到 BTRFS 磁盘时,如何将 2 个顶层子卷挂载到同一个 BTRFS 分区上

我最近在我的计算机上安装了 Ubuntu 22.04。我使用 RAID 6 卷作为我的主分区(36 TB)。整个磁盘只有一个分区 /dev/sda1 格式的 BTRFS 挂载到 /home。我想在这个分区(/dev/sda1)上创建另一个顶层(5)子卷,如果您启动到安装介质并单独挂载 BTRFS 磁盘(挂载到 /media/ubuntu/UUID),这很容易做到。您将以这种方式看到 @home 子卷,因此我为虚拟机映像创建了另一个顶层子卷 @images。这样做的原因有两个:

  1. RAID 是我系统上唯一有可观空间的卷。/boot (dev/sdb1) 和 / (/dev/sdb2) 位于仅 256GB 的 ETX4 SATADOM 上,因此 /home 目录位于 RAID 卷 (/dev/sda1) 上。
  2. 我希望将镜像和主目录子卷分开以进行备份。我不希望镜像子卷成为主目录的子卷,因为我不想在备份主目录时备份虚拟机镜像。

最初我按以下方式创建了 fstab:

UUID=4d0792cb-339f-4266-8cef-03afc51a3ce9 / ext4 错误=remount-ro 0 1 #根目录

UUID=6462-E921 /boot/efi vfat umask=0077 0 1 # 引导目录

UUID=7779a2d8-23e2-4c81-8db8-677f57a2bacc /home btrfs defaults,subvol=@home 0 2 #主目录

UUID=7779a2d8-23e2-4c81-8db8-677f57a2bacc /var/lib/libvirt/images btrfs defaults,subvol=@images 0 2 #图像目录

我以为,由于它们是同一分区上的 2 个顶级子卷,因此不会有问题,因为它们已在 fstab 中指定。我错了。系统会在启动时挂起。

我怀疑的原因是:位于 @home 中的 /home 目录将首先被挂载,因此它找不到 @images 子卷。我读到过需要 2 个单独的分区,每个分区都有一个顶层子卷,但我很懒,不想创建 2 个分区,而且我不知道我的 @images 子卷需要多大,因为随着需求的增加,我会添加虚拟机。我希望两个子卷 (@home @images) 都位于同一个分区 (/dev/sda1) 上。如何做到这一点?答案即将揭晓。

答案1

答案很简单。使用以下命令列出子卷:

btrfs subvolume list /media/ubuntu/UUID  (UUID is the identifier of the BTRFS partition)

它列出了该分区上的所有子卷及其子卷 ID

用这个子卷 ID在 fstab 中挂载子卷

UUID=7779a2d8-23e2-4c81-8db8-677f57a2bacc /home                         btrfs   defaults,subvol=@home         0       2
UUID=7779a2d8-23e2-4c81-8db8-677f57a2bacc /var/lib/libvirt/images       btrfs   defaults,subvolid=257        0       2

这里子卷=257用来代替子卷=@图像

问题解决了。

相关内容