如何多次挂载 BTRFS 分区并使用相同的空间分配?

如何多次挂载 BTRFS 分区并使用相同的空间分配?

我是 BTRFS 的新手,想知道是否可以共享单个分区的空间但将其安装在多个挂载点下?

例如,我有一个 1 TiB 分区,想与/home/var/run/docker以及可能的其他挂载点共享相同的空间。但显然,这些目录的内容会有所不同,并包含各自的文件,并且每个目录都可以增大和缩小以填满整个 1TiB。

可以使用 BTRFS 和子卷来实现吗?如果可以,有没有关于如何实现这一点的好指南?

答案1

您已经可以使用任何文件系统来执行此操作,而无需子卷。将其挂载到一个位置,然后使用bind挂载将其挂载到您需要的位置。(绑定挂载与初始挂载具有同等地位;结果与同一文件系统挂载在多个位置完全相同。然后甚至可以卸载初始位置,尽管直到最近才有很好的方法通过 /etc/fstab 来表达这一点。)

mount /dev/sda3 /mnt/disk

mkdir /mnt/disk/home
mkdir /mnt/disk/vardocker

mount -o bind /mnt/disk/home /home
mount -o bind /mnt/disk/var/docker /var/lib/docker

后两个命令将是具有类型none和选项的 /etc/fstab 条目bind

(希望您的意思是,因为那是存储位置,而 /var/run(现在称为 /run)与此相反。)/var/lib/docker

非常最近的“util-linux”包(以及相对较新的内核),可以使用X-mount.subdir=将整个 mount/bind/unmount 动作隐藏在一个直接命令(或一个 fstab 条目)后面的选项来简化:

mount -o X-mount.subdir=home /dev/sda3 /home
mount -o X-mount.subdir=vardocker /dev/sda3 /var/lib/docker

Btrfs 子卷始终具有直接挂载选项来选择子卷,从而使其变得更容易一些;它们还具有快照范围限定在单个子卷的优点,因此您可以为 $HOME 和 Docker 设置不同的快照计划。

用于btrfs subvol create创建子卷并subvol=选择它们的选项:

mount /dev/sda3 /mnt/disk
btrfs subvolume create /mnt/disk/home
btrfs subvolume create /mnt/disk/vardocker
umount /mnt/disk

mount -o subvol=home /dev/sda3 /home
mount -o subvol=vardocker /dev/sda3 /var/lib/docker

子卷的行为与常规子目录非常相似;它们可以在文件系统层次结构的任意深度创建(指定相对于文件系统根目录的完整路径subvol=)。

相关内容