The system administrator guide of the Btrfs wiki (here) says:
A Btrfs subvolume can be thought of as a POSIX file namespace.
I remember at first it saying that a subvolume is, as opposed to being able to be thought of as, a "POSIX file namespace". A Google search for "POSIX file namespace"
turn up only things about Btrfs, so the phrase is unhelpful.
Just what is a subvolume in Btrfs? If a subvolume is accessible as a directory from the filesystem root, then how is mounting subvolume any different from bind mounting a directory on any other filesystem to another location without intermediately mounting the root of said filesystem? This is what I mean:
# standard bind mount
mkdir /mnt/data
mkdir /mnt/docs
mount /dev/sda2 /mnt/data
mount --bind /mnt/data/docs /mnt/docs
umount /mnt/data
rmdir /mnt/data
# hypothetical method of directly mounting
# a file/directory on a filesystem
# to some path that achieves the same
# as the above
mkdir /mnt/docs
mount -o path_on_fs=/docs /dev/sda2 /mnt/docs
# if /docs on sda2 was a subvolume
mkdir /mnt/docs
mount -o subvol=/mnt /dev/sda2 /mnt/docs
What is the purpose of the subvolume feature? An example: /var/lib/machines.raw
is a Btrfs filesystem image that is used by systemd-machined
and machinectl
to store virtual machines and/or containers. Presumably, Btrfs is used for subvolumes. What do the subvolumes do for that?
If a subvolume is useful for containers, does it have built-in isolation for processes running in different subvolumes?