マウントプロパゲーション(5)〜 mountinfoファイル 〜
これまでの続きです。
- マウントプロパゲーション(1)〜 shared mount 〜 - TenForward
- マウントプロパゲーション(2)〜 private mount 〜 - TenForward
- マウントプロパゲーション(3)〜 slave mount 〜 - TenForward
- マウントプロパゲーション(4)〜 unbindable mount 〜 - TenForward
これまでと同様に完全に私個人が理解するための資料です。間違いの指摘は大歓迎です。
ここまでの説明でマウント情報を確認するために説明もなく/proc/self/mountinfo
ファイルを使っていました。少しこのファイルについて説明しておきましょう。/proc/self
は次のようにカレントプロセスの情報へのリンクになっています。
$ ls -l /proc/self lrwxrwxrwx 1 root root 0 6月 23日 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のマウントの伝播を受け取ることがわかります。
残りは次回に。