`mount --make-private /` 的含义

`mount --make-private /` 的含义

目前,/已共享挂载传播:

# findmnt -o TARGET,PROPAGATION /
TARGET PROPAGATION
/      shared

我正在考虑将其更改为private以便能够在和mount --move下安装的文件系统上工作。/mnt/media

(我想使用mount --move而不是不安全的umount --lazy

如果/没有privatemount --move将会抱怨如下内容:

# mount --move /mnt/mountpoint /mnt/moved
mount: /mnt/moved: bad option; moving a mount residing under a shared mount is unsupported.
  1. 为什么是/ shared默认?

  2. /更改为有何含义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 的人来说,应用程序仍然无法使用。因此,您只涵盖了人们不会解除关联的用例。您破坏了人们希望传播发生的用例。

相关内容