共有マウント


Rev.3を表示中。最新版はこちら

/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ファンとしてカーネルを読んでいてふと思った次第です。

いま少し、マウントプロパゲーションの実装が見えたらアップするつもりです。

最終更新 2013/10/24 15:36:51 - north
(2013/10/24 14:52:03 作成)


検索

アクセス数
3576109
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。