LoginSignup
8
4

More than 5 years have passed since last update.

マウントと名前空間めもめも

Last updated at Posted at 2015-12-27

概要

コンテナ(LXC)について調べようと思っていろいろ見ていたら、いろいろ脱線してカーネルのことについて復習したのでその時の自分めもめも。

用語メモメモ

マウント

マウントコマンド
mount -t <タイプ> -o <オプション> <デバイスファイル> <マウントポイント>
マウントとは
  • ファイル・システム(super_block)をシステムのディレクトリツリー(マウントポイント)に関連づけること。関連づけるとはvfsmount構造体、mount構造体に対してマウントポイント、スーパーブロックなどを設定すること。
  • ファイルシステム≒デバイス
  • ファイルシステムとファイルシステムを結びつける
ファイルシステムの実体
  • super_block構造体
    • s_inodesかコメントに書かれているようにすべてのinodeリストに繋がっている。

OSをインストールするときに各パーティションに対してファイル・システムを決定してシステムのディレクトリツリーを割り当てる。OS起動するとメモリ上ではそのファイル・システム(システムの各部分)をシステムの対応するディレクトリツリーにマウントする。

マウントの関連性を表している構造体

これがメモリ上で構築されているのでマウント状態がわかる。

名前空間(namespace)

  • カーネル2.6から導入された
  • task_struct構造体(プロセスの実体)から->namespaceで辿れる。(2.6系ではあるみたいだけど、それ以降はどうもnsporxyからたどるみたい?)
  • vfsmount構造体はnamespace構造体から知ることができる。
名前空間の使用

各プロセス(task_struct)はnamespace構造体を保持している。そのプロセスからforkする場合、forkされたプロセス(task_strcut)はnamespace構造体を共有する。共有せずに新たな名前空間を使用したい場合clone(CLONE_NEWSNSフラグ指定)を使用する。するとnamespase構造体は共有せずに別に独立して獲得されるみたい。
なのでunshareコマンドなんかは内部でcloneしてCLONE_NEWSNSフラグが指定されているのではないのかなぁ。

名前空間まとめ

マウントはvfsmount構造体、mount構造体に対してマウントポイントなどを設定することなので、cloneを使用して名前空間が異なるプロセスがあった場合、一つの名前空間でマウントなどを実行した場合は、もう一つの名前空間のプロセスのマウントには影響を与えない(vfsmount構造体などは独立しているので)。
なるほどー、コンテナで名前空間を使ってる意味が見えたきがします。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4