TenForward

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

マウントプロパゲーション(5)〜 mountinfoファイル 〜

これまでの続きです。

これまでと同様に完全に私個人が理解するための資料です。間違いの指摘は大歓迎です。

ここまでの説明でマウント情報を確認するために説明もなく/proc/self/mountinfoファイルを使っていました。少しこのファイルについて説明しておきましょう。/proc/selfは次のようにカレントプロセスの情報へのリンクになっています。

$ ls -l /proc/self
lrwxrwxrwx 1 root root 0  623日  21:55 /proc/self -> 5771/

/proc/[PID]以下にはそのPIDを持つプロセスの情報が収められています。/proc/[PID]/mountinfoは、そのPIDのプロセスから見えるマウント情報が含まれています。1行がひとつのマウントポイントの情報を表しています。

先の説明で使ったmountinfoの一行を見てみましょう。

714 30 0:74 / /root/test/orig/tmp rw,relatime shared:346 - tmpfs tmpfs rw

1行には11のフィールドが含まれています。このうち7番目がマウントプロパゲーションに関係するエントリです。この7番目のフィールドはオプショナルフィールドであり、7番目に上の例で8番目に表示されている-が表示されていれば、7番目のフィールドは存在しないということです(8番目のフィールドは7番目がオプショナルですので区切りのために存在します)。

この7番目のオプショナルフィールドには4種類の文字列が入ります。

表1 オプショナルフィールドの文字列の説明

文字列 説明
shared:X マウントはピアグループ"X"で共有されているsharedマウント
master:X マウントはピアグループ"X"のslaveマウント
propagate_from:X マウントはslaveマウント
unbindable マウントはバインドできない(unbindable)

ここでピアグループとは、同じマウントが伝播するグループで、ピアグループにはカーネルが割り当てる一意なIDが割り当てられます。

sharedの場合

マウントプロパゲーション(1)〜 shared mount 〜 - TenForward」のsharedマウントと同様の操作をした状態でmountinfoファイルを見ると次のようになります。

31 1 252:2 / / rw,relatime shared:1 - ext4 /dev/vda2 rw
131 31 252:2 /root/test/test/orig /root/test/test/bind rw,relatime shared:1 - ext4 /dev/vda2 rw

先の例ではバインドマウントした側と、元の/のマウント側の両方でお互いにマウント操作が伝播していました。上を見ると双方ともshared:1となっており、両方ともsharedでかつIDが1で同じですのでマウントが相互に伝播したわけです。

private場合

次にprivateの説明(マウントプロパゲーション(2)〜 private mount 〜 - TenForward)で--make-privateした際のmountinfoの該当行は次のようになっていました。

613 30 253:0 /root/test/orig /root/test/bind rw,relatime - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw

7番目のフィールドが区切りとなる-となっています。他とマウントが共有されないのでオプショナルフィールドが存在しないということです。

slave場合

slaveの場合(マウントプロパゲーション(3)〜 slave mount 〜 - TenForward)は次のようなエントリとなっていました。

30 1 253:0 / / rw,relatime shared:1 - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw
133 30 253:0 /root/test/orig /root/test/bind rw,relatime master:1 - ext4 /dev/mapper/ubuntu--vg-ubuntu--lv rw

sharedに設定されている/ではsharedとなっており、IDは1です。それに対するslaveマウントの方はmaster:1となっており、sharedでマウントされている/のID=1のマウントの伝播を受け取ることがわかります。

残りは次回に。