目前,/
已共享挂载传播:
# findmnt -o TARGET,PROPAGATION /
TARGET PROPAGATION
/ shared
我正在考虑将其更改为private
以便能够在和mount --move
下安装的文件系统上工作。/mnt
/media
(我想使用mount --move
而不是不安全的umount --lazy
)
如果/
没有private
,mount --move
将会抱怨如下内容:
# mount --move /mnt/mountpoint /mnt/moved
mount: /mnt/moved: bad option; moving a mount residing under a shared mount is unsupported.
为什么是
/
shared
默认?/
更改为有何含义private
?
答案1
传播标志由 改变systemd
。从man 7 mount_namespaces
:
systemd(1) 在系统启动时自动将所有挂载点重新挂载为 MS_SHARED。因此,在大多数现代系统中,默认传播类型实际上是 MS_SHARED。
从https://github.com/systemd/systemd/blob/master/src/core/mount-setup.c#L406
/* Mark the root directory as shared in regards to mount propagation. The kernel defaults to "private", but we
* think it makes more sense to have a default of "shared" so that nspawn and the container tools work out of
* the box. If specific setups need other settings they can reset the propagation mode to private if
* needed. Note that we set this only when we are invoked directly by the kernel. If we are invoked by a
* container manager we assume the container manager knows what it is doing (for example, because it set up
* some directories with different propagation modes). */
if (detect_container() <= 0)
if (mount(NULL, "/", NULL, MS_REC|MS_SHARED, NULL) < 0)
具体影响取决于您的具体使用情况。我认为大多数程序将继续运行。但是,您的更改将在重启时被覆盖。
您可以在 Lennart Poettering 的评论中阅读更多内容https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739593
以下是其中的一部分:
b) 如果您修补 systemd 以返回到根目录的 MS_PRIVATE,则会禁用到容器的传播,并且没有人可以再为其特定命名空间选择加入它。
优点:您不必修补那些当前假定根目录是 MS_PRIVATE 并且不解除关联事物的少数程序。
缺点:对于那些切换到 MS_SHARED 的人来说,应用程序仍然无法使用。因此,您只涵盖了人们不会解除关联的用例。您破坏了人们希望传播发生的用例。