共有マウント
Rev.2を表示中。最新版はこちら。
/mnt1/mpoint/と/mnt2を作成します。/mnt2に/mnt1をバインドマウントします。これで/mnt1と/mnt2は同じ内容となります。なお/mnt1/mpoint/下に、違いが分かるためtestのファイルがあります。[root@localhost ~]# ls /mnt1/mpoint/ test [root@localhost ~]# mount --bind /mnt1 /mnt2 [root@localhost ~]# ls /mnt1/mpoint/ test [root@localhost ~]# ls /mnt2/mpoint/ test/mnt1/mpointに/home/kitamuraをバインドマウントいたします。/mnt1/mpointは/home/kitamuraの内容となります。しかし、/mnt2/mpointは元の/mnt1/mpointのままです。
[root@localhost ~]# mount --bind /home/kitamura/ /mnt1/mpoint/ [root@localhost ~]# ls /mnt1/mpoint/ Desktop Documents Downloads Mail Pictures Public Templates Videos lkm [root@localhost ~]# ls /mnt2/mpoint/ test上のmountをumountして、/に共有設定をして同じ事を行うと、/mnt2/mpoint/もマウント先の内容となります。
[root@localhost ~]# umount /mnt2/mpoint/ [root@localhost ~]# umount /mnt2 [root@localhost ~]# mount --make-shared / [root@localhost ~]# mount --bind /mnt1 /mnt2 [root@localhost ~]# mount --bind /home/kitamura/ /mnt1/mpoint/ [root@localhost ~]# ls /mnt1/mpoint/ Desktop Documents Downloads Mail Pictures Public Templates Videos lkm [root@localhost ~]# ls /mnt2/mpoint/ Desktop Documents Downloads Mail Pictures Public Templates Videos lkm共有マウントは、マウントプラパゲーションと呼ばれるプライベートマウント/スレーブマウント/バインド不可マウントの新しき追加されたフラグです。共有マウント同士はマウントを共有します。スレーブは共有のファイルシステムを共有しますが、自分自身のマウントは共有しません。バインド不可はそのファイルシステムでバインドマウントはできません。これらのフラグを新規マウント時には設定することはできません。従ってマウントしたファイルシステムはプライベート/バインド化となります。マウントプラパゲーションにかかる設定をする場合、マウントした後に、設定をすることで実現します。
従って、最初の例では、/mnt1/mpointはプライベートマウントとなるため、/mnt2ファイルシステムから参照できません。/に共有を設定すると、/下の/mnt2をバインドマウントすると、/mnt2のmntオブジェクトは/のmntオブジェクトを引き継ぐため、共有でmntオブジェクトが割り当てられます。そして/mnt1/mpointをバインドマウントすると、同じように/のmntオブジェクトが引き継がれ、お互い共有状態のmntオブジェクトが作成され、/mnt2/mpointも/mnt1/mpoinのマウント先を参照できるようになるわけです。
サンプルではバインドマウントで検証してみましたが、マウントプラパゲーショはバインドマウントに特有の機能ではありません。実デバイスを有するファイルシステムでも適用されます。
補足
なんとなく、このあたりはdentryで実装しているのかなと思っていましたが、mntオブジェクト内での込み入った実装で、2時間もソースを眺めていると決まって頭が爆発してしまいます。Linuxが世に出て20年も経ってしまい、今ではスマートフォーンからスーパコンピュータまでと、その活躍は素晴らしいものです。(tronだったらと思うと残念です。それゆえソフトバンクは毛嫌いしています。)今後も、どんどん進化していくでしょう。そしてモノリシックカーネル故の性でしょうか、どんどん複雑化していって、開発に携わる人材不足になりはしないかと(私自身でさえプログラマの端くれですが、自分の書いたプログラムを見るのさえ嫌気が刺すことは しょっちゅうです。)、で、ひょっとすると、スーパコンピュータみたいな高スペックと家電のようなそうでない用と、2分化していくのではないかと、私みたいな者が心配するのもなんですが、linuxファンとしてカーネルを読んでいてふと思った次第です。
いま少し、マウントプロパゲーションの実装が見えたらアップするつもりです。