Btrfs wiki 的系统管理员指南 (这里)说:
Btrfs 子卷可以被视为 POSIX 文件命名空间。
我记得一开始它说一个子卷是,而不是能够认为是,“POSIX 文件命名空间”。 Google 搜索"POSIX file namespace"
仅显示有关 Btrfs 的内容,因此该短语没有帮助。
Btrfs 中的子卷到底是什么?如果子卷可作为文件系统根目录中的目录进行访问,那么挂载子卷与将任何其他文件系统上的目录绑定挂载到另一个位置(无需中间挂载所述文件系统的根)有何不同?这就是我的意思:
# 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
子卷功能的目的是什么?示例:/var/lib/machines.raw
Btrfs 文件系统映像,由虚拟机和/或容器使用systemd-machined
并存储。machinectl
据推测,Btrfs 用于子卷。子卷为此做什么?
如果子卷对容器有用,那么它是否具有针对在不同子卷中运行的进程的内置隔离?
答案1
我不是专家——甚至不是专家!——但是由于我最近阅读了很多有关 Btrfs 的文章,而且您的问题六个月来都没有得到解答,所以我想我应该尝试一下。
以下是两个可能的用例。我不知道这些是否常见,甚至受到推崇的拥有子卷的原因(就像我说的,不是专家),但我将包含我在其中讨论过它们的链接,以帮助您自己判断。
独立快照
Btrfs 快照是整个子卷的副本。这在基于快照的恢复或备份策略中可能很有用。例如,/
分离/home
意味着您可以回滚系统更新而不影响用户数据;相反,您可以备份用户数据而不保留系统文件。
您还可以使用子卷来排除您想要的目录不想要备份。例如,如果/home
和/home/bob/Downloads
是不同的子卷,则 的快照/home
将排除 bob 的下载。
讨论:
- 询问 Ubuntu:Btrfs 子卷与文件夹?
- btrfs Wiki:增量备份
- openSUSE 维基:BTRFS列出默认子卷的位置及其原因(几乎总是“这样数据在回滚时不会丢失”)
- r/fedora:Timeshift 和 BTRFS 快照
- r/btrfs:何时使用子卷?回复中写道:“Steam 游戏获得了子卷,因为我不想要包含我女儿为她的游戏下载的 10,000 个模组及其所有更新的快照。”
不同的安装选项
因为每个子卷都是单独挂载的,所以它们可以用不同的方式挂载安装选项来自彼此。
或者至少,理论是这样的。实践中看来当前每个子卷仅支持某些安装选项。
我不知道这会实现什么场景(再次强调:不是专家),但我刚刚编写的一个是设置压缩,以便一个子卷针对速度进行优化,而另一个子卷针对空间进行优化。compress
当然,一旦支持每个子卷。
讨论: