Linuxでマウントネームスペースがどのように機能するかを理解する

Linuxでマウントネームスペースがどのように機能するかを理解する

私が読んでいる内容はマウントネームスペースそして確認してください:

マウントネームスペースでは、ホストファイルシステムに影響を与えずにファイルシステムをマウントおよびマウント解除できます。したがって、まったく異なるデバイスセット(通常は少ない)を取り付けることができます。

理解しようとするLinuxネームスペース、LXCなどがありますが、上記の文の意味がよくわかりません。

私が理解したいのは、コンテナ(1)が次のようなファイルを持つ方法です。

/foo/a.txt
/foo/bar/b.txt

他のコンテナ(2)には、次のファイルを含めることができます。

/foo/a.txt
/foo/x.txt
/foo/bar/b.txt
/foo/bar/y.txt

/foo/a.txtコンテナ(1)と(2)の位置と/foo/bar/b.txt位置は同じです。しかし、内容が異なる場合があります。

# container (1)
cat /foo/a.txt #=> Hello from (1)

# container (2)
cat /foo/a.txt #=> Hello from (2)

これは、物理システム上のファイル(私は知っていません)が1つの方法で保存され、そこに散在している可能性があることを意味します。ただし、「ダミー」ファイルの集中データベースもあります。オペレーティングシステムで、このように:

db:
  container1:
    foo:
      a.txt: Hello from a from (1)
      bar:
        b.txt: Hello from b from (1)
  container2:
    foo:
      a.txt: Hello from a from (2)
      x.txt: Hello from x from (2)
      bar:
        b.txt: Hello from b from (2)
        y.txt: Hello from y from (2)

それではそこにいます。その他物理ファイルのオペレーティングシステムデータベースは次のとおりです。

drive1:
  dir1:
    foo:
      a.txt
      bar:
        b.txt
  dir2:
    foo:
      a.txt
      x.txt
      bar:
        b.txt
        y.txt

したがって、コンテナにファイルを作成すると、実際には2つの新しいレコードが作成されます。

  1. ドライブレベルの物理ファイルマッピングの場合は1つ
  2. コンテナレベルの仮想ファイルマッピングの場合は1つ

これが私が働く方法を想像することです。これが(1)ユーザーに表示する方法があることを見る方法です(LXCコンテナまたはcgroupで(これについてはわかりません))感じはどうですか?(2)完全にカスタマイズ可能なディレクトリ構造(完全に他の仮想ファイルシステムと同じ名前のファイル/ディレクトリ/パスが利用可能)を作成し、(3)ファイルが異なる複数のファイルから出ることができる完全な「ファイルシステム」仮想ファイルシステム/コンテナは互いに上書きされません。

それがどのように機能するのか、それ以外の場合は実際にどのように機能するのか(またはどのように機能するのか)が不思議です。

ベストアンサー1

マウントネームスペースが異なるように配置されているマウントされたファイルシステム

マウントはファイルシステム内のサブディレクトリのバインドマウントになる可能性があるため、これは非常に柔軟です。

# unshare --mount  # run a shell in a new mount namespace

# mount --bind /usr/bin/ /mnt/
# ls /mnt/cp
/mnt/cp

# exit  # exit the shell, and hence the mount namespace

# ls /mnt/cp
ls: cannot access '/mnt/cp': No such file or directory

このコマンドを使用して、現在のインストールセットを一覧表示できますfindmnt

コンテナ全体では、ルートマウントが置き換えられ、完全に別々のマウントツリーが作成されます。これには、pivot_root()システムコールなど、いくつかの追加の詳細が含まれます。これを行う方法を正確に知る必要はありません。一部の詳細はここで確認できます。Linux名前空間を使用してchrootを実行するには?

おすすめ記事