sai’s diary

プログラミング関連の備忘録とつぶやきを書いています。

バインドマウント

mountコマンドの--bindオプションを使用するとマウントポイントを別のディレクトリにバインドマウントすることが出来ます。

マウントポイントにはマウントプロパゲーションという概念があり、以下の設定により、 マウントイベント(マウントポイント配下のマウント処理と解釈しています)の伝搬方法が変化します。

private(デフォルト)

マウントイベントの伝搬は行われない。

[root@localhost sample]# mkdir -p tmp
[root@localhost sample]# mkdir -p bind
[root@localhost sample]# mount -t tmpfs tmpfs tmp
[root@localhost sample]# mount --bind tmp bind

shared

バインドマウントしたマウントポイントが相互にマウントイベントを伝播する。

[root@localhost sample]# mkdir -p tmp
[root@localhost sample]# mkdir -p bind
[root@localhost sample]# mount -t tmpfs tmpfs tmp
[root@localhost sample]# mount --make-shared tmp
[root@localhost sample]# mount --bind tmp bind

shared+slave

master(slaveをマークしていないマウントポイント)からslaveにはマウントイベントが伝搬し、 slaveからmasterにはマウントイベントが伝播しない。

[root@localhost sample]# mkdir -p tmp
[root@localhost sample]# mkdir -p bind
[root@localhost sample]# mount -t tmpfs tmpfs tmp
[root@localhost sample]# mount --make-shared tmp
[root@localhost sample]# mount --bind tmp bind
#バインドマウントされたマウントポイントはsharedになっている
[root@localhost sample]# mount --make-slave bind

unbindable

指定したマウントポイントをバインド・マウント不可能にする。

[root@localhost sample]# mkdir -p tmp
[root@localhost sample]# mkdir -p bind
[root@localhost sample]# mount -t tmpfs tmpfs ./tmp/
[root@localhost sample]# mount --make-unbindable ./tmp/
[root@localhost sample]# mount --bind tmp bind
mount: 間違ったファイルシステムタイプ、不正なオプション、
       /root/sample/tmp のスーパーブロックが不正、コードページまたは
       ヘルパープログラムの未指定、或いは他のエラー
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

参考サイト

マウント名前空間を適用する