web-dev-qa-db-ja.com

`mount --make-private /`の意味

現在、/はマウント伝播を共有しています。

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

mount --move/mntの下にマウントされたファイルシステムで/mediaが機能できるように、これをprivateに変更することを検討しています。

(安全でない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.
  1. デフォルトで/sharedなのはなぜですか?

  2. /privateに変更することの意味は何ですか?

2
Tom Hale

伝播フラグは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=73959

これがその一部です:

b)systemdにパッチを適用してルートディレクトリのMS_PRIVATEに戻ると、コンテナへの伝播が無効になり、特定の名前空間に対して誰もオプトインできなくなります。

利点:現在ルートディレクトリがMS_PRIVATEであると想定し、関連付けを解除しないいくつかのプログラムにパッチを適用する必要はありません。

短所:/をMS_SHAREDに切り替えた場合、アプリはまだ壊れています。したがって、人々が分離しないユースケースのみをカバーします。あなたは人々がtkaeの場所への伝播を望んでいるユースケースを破ります。

3
Andrii L.