現在、/
はマウント伝播を共有しています。
# 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.
デフォルトで/
shared
なのはなぜですか?
/
をprivate
に変更することの意味は何ですか?
伝播フラグは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の場所への伝播を望んでいるユースケースを破ります。