我有一个很大的旧 BTRFS RAID 阵列,其中有几个子卷:
# btrfs subvolume list -u /bulk
ID 256 gen 56429 top level 5 uuid 11b16b2e-8f75-ec46-8cgd-4a001c70a4ba path @
ID 257 gen 56428 top level 256 uuid 0c81c066-dge1-464d-bd50-6f56e9d83e0a path @mine
ID 258 gen 56430 top level 256 uuid 6139b708-3226-324b-8bae-9eb810cfd226 path @shared
根子卷 ,通过 fstab@
安装在bulk
,我希望将@mine
子卷安装在我的主目录中的某个位置,但由于某种原因它一直失败:
# mount -t btrfs -o subvol=/@mine,defaults,nossd,user /dev/sdd2 /home/me/bulk
mount: /home/me/bulk: mount(2) system call failed: No such file or directory.
dmesg(1) may have more information after failed mount system call.
有趣的是,主子卷没有这样的问题:
# mount -t btrfs -o subvol=/@,defaults,nossd,user /dev/sdd2 /home/me/bulk
以上直接起作用,没有抱怨。当我尝试通过 挂载时,会发生同样的问题/etc/fstab
。我也尝试过通过 UUID 挂载,但根本找不到子卷 UUID,并且@share
显示完全相同的行为。
如果我安装@
而不是子卷,我可以作为用户正常访问所有内容,包括子卷,没有任何读/写问题 - 但我真的更喜欢只将特定的子卷安装在我的主目录中,并且我我很确定这一定是可能的。 (是的,我在安装后立即卸载了“/@”,因此安装点是空的)
与根卷相比,挂载子卷是否需要任何特定选项?
如果这是相关的:我使用的是 Manjaro Plasma,内核版本 5.15.109-1-MANJARO
答案1
子卷列表有点误导,至少对我来说是这样。解决子卷的正确方法是/@/@mine
等等。提示位于子卷列表中,其中显示:
ID 256 gen 56429 top level 5 uuid 11b16b2e-8f75-ec46-8cgd-4a001c70a4ba path @
ID 257 gen 56428 top level 256 uuid 0c81c066-dge1-464d-bd50-6f56e9d83e0a path @mine
请注意top level 256
第二行中的 ,它表示@mine
嵌套在其中@
(其 ID 为 256)。
因此,正确的安装命令是
mount -t btrfs -o subvol=/@/@mine,defaults,nossd,user /dev/sdd2 /home/me/bulk
……就这样,完成了。
为了完整起见,这是我放入的相应行/etc/fstab
,它也有效:
UUID=xxxUIDxxx-ofthe-btrfs-rootxxx /home/me/bulk btrfs subvol=/@/@mine,defaults,nossd,user 0 0
我通过 UUID 进行安装,因为/dev/sdd2
如果添加或删除其他驱动器,通过设备(例如)安装可能会失败。我还了解到,显示的子卷 UUIDbtrfs subvolume list
只能由某些人访问btrfs
命令访问但不能以其他方式使用,因此 mount 命令需要寻址根目录,然后提供子卷路径。
答案2
我猜从那时起这个问题就已经解决了。
对于内核 6.6.26-1-MANJARO:
sudo btrfs subvolume create /home/user/test
sudo btrfs subvolume list /
ID 257 gen 90511 top level 5 path @home
ID 627 gen 90465 top level 257 path @home/user/test
它可以用这个 fstab 完美地安装它:
UUID=74684edf-64af-4e9a-a7ae-33842a4ff298 /home btrfs subvol=/@home,lazytime,compress-force=zstd:1 0 0
UUID=74684edf-64af-4e9a-a7ae-33842a4ff298 /home/user/test btrfs subvol=/@home/user/test,lazytime,compress-force=zstd:1 0 0
关键部分是
subvol=/@home/user/test
请注意,不需要在同一位置手动安装子卷,它会自动完成。不过,它可以手动安装到 /test 。