TenForward

技術ブログ。はてなダイアリーから移転しました

マウントプロパゲーション(2)〜 private mount 〜

昨日のエントリの続きです。引き続き完全に私個人が理解するための資料です。間違いの指摘は大歓迎です。

tenforward.hatenablog.com

それでは今日はprivateを見てみましょう。privateに設定したマウントのサブマウントは、他のマウントには反映されません。

sharedのときと同じディレクトリで試してみましょう。

# tree .
.
├── bind
└── orig
    └── tmp

3 directories, 0 files

まだ何もマウントが行われていない状態です。ここで、sharedと同様にorigbindにバインドマウントしてみましょう。

# 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に設定したマウントのサブマウントは、他のマウント配下には反映されません。