0

I have a btrfs subvolume structure that allows me easy snapshotting of targetted folders, but it appears that one of my btrfs subvolumes is not getting mounted at all. This is weird, considering other nested subvolumes (i.e. @git within @opt) work without problems.

$ btrfs subvolume list /
ID 256 gen 7946 top level 5 path @rootfs
ID 260 gen 6537 top level 5 path @snapshots
ID 261 gen 4407 top level 5 path @swap
ID 262 gen 7934 top level 5 path @root
ID 263 gen 7939 top level 5 path @home
ID 264 gen 7946 top level 5 path @tmp
ID 265 gen 6542 top level 5 path @pkg
ID 266 gen 7946 top level 5 path @log
ID 267 gen 7937 top level 5 path @etc
ID 268 gen 7472 top level 5 path @opt
ID 269 gen 7475 top level 5 path @www
ID 270 gen 7473 top level 5 path @git
ID 271 gen 7492 top level 5 path @minecraft
ID 272 gen 7491 top level 5 path @minecraft-dynmap
ID 273 gen 7460 top level 5 path @factorio
ID 274 gen 7464 top level 5 path @openttd
$ cat /etc/fstab
/dev/mapper/vg1-lv1                             /                                       btrfs           defaults,subvol=@rootfs                                                                                                                                                                                     0       0

/dev/mapper/vg1-lv1                             /.snapshots                             btrfs           defaults,subvol=@snapshots                                                                                                                                                                                  0       0
/dev/mapper/vg1-lv1                             /.swap                                  btrfs           subvol=@swap                                                                                                                                                                                                0       0
# /.swap/swap.img                               none                                    swap            sw                                                                                                                                                                                                          0       0
/dev/mapper/vg1-lv1                             /root                                   btrfs           defaults,subvol=@root                                                                                                                                                                                       0       0
/dev/mapper/vg1-lv1                             /home                                   btrfs           defaults,subvol=@home                                                                                                                                                                                       0       0
/dev/mapper/vg1-lv1                             /tmp                                    btrfs           defaults,subvol=@tmp                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /var/cache/apt                          btrfs           defaults,subvol=@pkg                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /var/log                                btrfs           defaults,subvol=@log                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /etc                                    btrfs           defaults,subvol=@etc                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /opt                                    btrfs           defaults,subvol=@opt                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /var/www                                btrfs           defaults,subvol=@www                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /opt/git                                btrfs           defaults,subvol=@git                                                                                                                                                                                        0       0
/dev/mapper/vg1-lv1                             /opt/factorio                           btrfs           defaults,subvol=@factorio                                                                                                                                                                                   0       0
/dev/mapper/vg1-lv1                             /opt/minecraft                          btrfs           defaults,subvol=@minecraft                                                                                                                                                                                  0       0
/dev/mapper/vg1-lv1                             /opt/minecraft/plugins/dynmap           btrfs           defaults,subvol=@minecraft-dynmap                                                                                                                                                                           0       0
/dev/mapper/vg1-lv1                             /opt/openttd                            btrfs           defaults,subvol=@openttd                                                                                                                                                                                    0       0
$ cat /proc/mounts | grep subvol=
/dev/mapper/vg1-lv1 / btrfs rw,relatime,ssd,space_cache,subvolid=256,subvol=/@rootfs 0 0
/dev/mapper/vg1-lv1 /.snapshots btrfs rw,relatime,ssd,space_cache,subvolid=260,subvol=/@snapshots 0 0
/dev/mapper/vg1-lv1 /.swap btrfs rw,relatime,ssd,space_cache,subvolid=261,subvol=/@swap 0 0
/dev/mapper/vg1-lv1 /home btrfs rw,relatime,ssd,space_cache,subvolid=263,subvol=/@home 0 0
/dev/mapper/vg1-lv1 /etc btrfs rw,relatime,ssd,space_cache,subvolid=267,subvol=/@etc 0 0
/dev/mapper/vg1-lv1 /opt btrfs rw,relatime,ssd,space_cache,subvolid=268,subvol=/@opt 0 0
/dev/mapper/vg1-lv1 /tmp btrfs rw,relatime,ssd,space_cache,subvolid=264,subvol=/@tmp 0 0
/dev/mapper/vg1-lv1 /root btrfs rw,relatime,ssd,space_cache,subvolid=262,subvol=/@root 0 0
/dev/mapper/vg1-lv1 /var/cache/apt btrfs rw,relatime,ssd,space_cache,subvolid=265,subvol=/@pkg 0 0
/dev/mapper/vg1-lv1 /var/log btrfs rw,relatime,ssd,space_cache,subvolid=266,subvol=/@log 0 0
/dev/mapper/vg1-lv1 /var/www btrfs rw,relatime,ssd,space_cache,subvolid=269,subvol=/@www 0 0
/dev/mapper/vg1-lv1 /opt/factorio btrfs rw,relatime,ssd,space_cache,subvolid=273,subvol=/@factorio 0 0
/dev/mapper/vg1-lv1 /opt/git btrfs rw,relatime,ssd,space_cache,subvolid=270,subvol=/@git 0 0
/dev/mapper/vg1-lv1 /opt/minecraft btrfs rw,relatime,ssd,space_cache,subvolid=271,subvol=/@minecraft 0 0
/dev/mapper/vg1-lv1 /opt/openttd btrfs rw,relatime,ssd,space_cache,subvolid=274,subvol=/@openttd 0 0
$ journalctl -xb | grep minecraft
Aug 22 17:06:36 primary systemd[1]: Mounting /opt/minecraft...
░░ Subject: A start job for unit opt-minecraft.mount has begun execution
░░ A start job for unit opt-minecraft.mount has begun execution.
Aug 22 17:06:36 primary systemd[1]: Mounted /opt/minecraft.
░░ Subject: A start job for unit opt-minecraft.mount has finished successfully
░░ A start job for unit opt-minecraft.mount has finished successfully.

As you can see, minecraft-dynmap subvolume is not getting mounted, and does not appear in /proc/mounts, unlike other nested subvolumes, which get mounted ok.

Mounting the subvolume with mount -t btrfs -o defaults,subvol=@minecraft-dynmap /dev/mapper/vg1-lv1 /opt/minecraft/plugins/dynmap or mount -a works as expected, although naturally, does not persist across reboots.

Is there a limit to how many subvolumes you can nest within each self? I.e. @rootfs/@opt/@git/ and @rootfs/@opt/@minecraft/ works, but @rootfs/@opt/@minecraft/@minecraft-dynmap breaks?

I have scoured dmesg and journalctl -xb / journalctl -xe but found no entry that would explain this behaviour.

jackar
  • 1
  • 4
  • I have a speculation from experiments I've run, although not concise enough to post it as answer. Having created the subvolumes after the initial install, some files must have remained within `@rootfs/etc` even after migration to `@etc`, preventing `@etc` from mounting, and therefore original `@roofts/etc/fstab` being considered on boot. – jackar Aug 22 '22 at 21:00
  • Regarding your comment: IMO it's possible. To mount your new `/etc`, the OS has to use `fstab` it sees before the mounting. It probably mounts everything according to this `fstab`. Mount `subvol=/` at some `mountpoint` and check if the entry with `subvol=@minecraft-dynmap` is in `mountpoint/@rootfs/etc/fstab`. I suppose the `fstab` that matters may yet be different, if the relevant bootloader entry does not pass `rootflags=subvol=@rootfs` to the kernel. [This is what initially matters](https://unix.stackexchange.com/a/107830/108618) and for Btrfs `rootflags=subvol=…` is important. Investigate. – Kamil Maciorowski Aug 22 '22 at 23:42
  • And if there is no `rootflags=subvol=…` then I guess the output of `btrfs subvolume get-default /` matters. – Kamil Maciorowski Aug 22 '22 at 23:52
  • I tried mounting `@etc` into `@rootfs` and having `fstab` residing inside nested subvolume, but like you said, it appears to cause issue since rootflag is set to `@rootfs` and thus fstab can not be found. Setting rootflag to `@etc` works in loading fstab, but breaks mount/boot sequence in countless other ways. I have resorted to having `/etc/fstab` on `@rootsfs` due to this. At the moment I am doubtful you can have `etc/fstab` and by extension whole `etc/` on subvolume other then `@rootfs` – jackar Aug 23 '22 at 02:43

0 Answers0