マウントプロパゲーション(2)〜 private mount 〜
昨日のエントリの続きです。引き続き完全に私個人が理解するための資料です。間違いの指摘は大歓迎です。
それでは今日はprivateを見てみましょう。privateに設定したマウントのサブマウントは、他のマウントには反映されません。
sharedのときと同じディレクトリで試してみましょう。
# tree . . ├── bind └── orig └── tmp 3 directories, 0 files
まだ何もマウントが行われていない状態です。ここで、sharedと同様にorig
をbind
にバインドマウントしてみましょう。
# mount --bind orig bind (バインドマウント) # grep bind /proc/self/mountinfo (マウント情報の確認) 613 30 253:0 /root/test/orig /root/test/bind rw,relatime shared:1 - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw (sharedでマウントされている) # mount --make-private bind (privateに設定) # grep bind /proc/self/mountinfo 613 30 253:0 /root/test/orig /root/test/bind rw,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw (sharedの文字が消えている)
バインドマウントした状態ではsharedになっていたマウントで、--make-private
でprivateに設定した後はshared
の文字が消えています。
この状態でbind
配下のtmp
ディレクトリにtmpfsをマウントします。
# tree . . ├── bind │ └── tmp └── orig └── tmp 4 directories, 0 files (バインドマウントされているので両方にtmpが存在する) # mount -t tmpfs tmpfs bind/tmp (tmpfsマウント) # egrep "bind.*tmpfs" /proc/self/mountinfo 627 613 0:74 / /root/test/bind/tmp rw,relatime - tmpfs tmpfs rw (マウントされている)
bind/tmp
にtmpfsがマウントされました。このtmpfs上にファイルを置いてみましょう。
# touch bind/tmp/testfile # tree . . ├── bind │ └── tmp │ └── testfile └── orig └── tmp 4 directories, 1 file
bind
以下には作成したファイルが見えていますが、orig
以下ではファイルが見えません。つまりtmpfsはバインドマウント先のbind
配下でだけ有効で、バインドマウント元のorig
では反映されていないことがわかります。
sharedのときと同様にorig
以下で行ったマウントがbind
で行われないことも確認おきましょう。
# mkdir orig/tmp2 (orig以下にtmp2ディレクトリを作成) # tree . . ├── bind │ ├── tmp │ │ └── testfile │ └── tmp2 └── orig ├── tmp └── tmp2 6 directories, 1 file # mount --make-private / (orig側のマウントをprivateに設定) # mount -t tmpfs tmpfs orig/tmp2 (tmp2にtmpfsをマウント) # touch orig/tmp2/testfile2 (ファイルをtmpfs上に置く) # tree . . ├── bind │ ├── tmp │ │ └── testfile │ └── tmp2 └── orig ├── tmp └── tmp2 └── testfile2 6 directories, 2 files (orig側のtmpfsマウントはbind側には反映されていない)
上のようにorig
側でのtmpfsマウントがbind
側では反映されていないことがわかります。つまりtmpfsはバインドマウント元のorig
配下でだけ有効で、バインドマウント先のbind
には反映されていないことがわかります。
このようにprivateに設定したマウントのサブマウントは、他のマウント配下には反映されません。