![当我在安装过程中已将主目录安装到 BTRFS 磁盘时,如何将 2 个顶层子卷挂载到同一个 BTRFS 分区上](https://linux22.com/image/1198276/%E5%BD%93%E6%88%91%E5%9C%A8%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%B7%B2%E5%B0%86%E4%B8%BB%E7%9B%AE%E5%BD%95%E5%AE%89%E8%A3%85%E5%88%B0%20BTRFS%20%E7%A3%81%E7%9B%98%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%202%20%E4%B8%AA%E9%A1%B6%E5%B1%82%E5%AD%90%E5%8D%B7%E6%8C%82%E8%BD%BD%E5%88%B0%E5%90%8C%E4%B8%80%E4%B8%AA%20BTRFS%20%E5%88%86%E5%8C%BA%E4%B8%8A.png)
我最近在我的计算机上安装了 Ubuntu 22.04。我使用 RAID 6 卷作为我的主分区(36 TB)。整个磁盘只有一个分区 /dev/sda1 格式的 BTRFS 挂载到 /home。我想在这个分区(/dev/sda1)上创建另一个顶层(5)子卷,如果您启动到安装介质并单独挂载 BTRFS 磁盘(挂载到 /media/ubuntu/UUID),这很容易做到。您将以这种方式看到 @home 子卷,因此我为虚拟机映像创建了另一个顶层子卷 @images。这样做的原因有两个:
- RAID 是我系统上唯一有可观空间的卷。/boot (dev/sdb1) 和 / (/dev/sdb2) 位于仅 256GB 的 ETX4 SATADOM 上,因此 /home 目录位于 RAID 卷 (/dev/sda1) 上。
- 我希望将镜像和主目录子卷分开以进行备份。我不希望镜像子卷成为主目录的子卷,因为我不想在备份主目录时备份虚拟机镜像。
最初我按以下方式创建了 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用来代替子卷=@图像
问题解决了。