GNU/Linux >> Linux の 問題 >  >> Linux

NSFS ファイルシステムとは何ですか?

上記の jiliagre によってリンクされたカーネル コミット ログで説明されているように、 nsfs filesystem は、Linux カーネルの名前空間を利用可能にする仮想ファイルシステムです。 /proc とは別のものです 一部のプロセス ディレクトリ エントリが nsfs の inode を参照する「proc」ファイルシステム 特定のプロセス (またはスレッド) が現在使用している名前空間を表示するためのファイルシステム。

nsfs /proc/filesystems にリストされません (一方 proc したがって、明示的にマウントすることはできません。 mount -t nsfs ./namespaces 「不明なファイルシステムの種類」で失敗します。これは nsfs です proc と密接に絡み合っているため ファイルシステム。

ファイルシステム タイプ nsfs /proc/$PID/mountinfo 経由でのみ表示されます 既存の(!)名前空間ファイルシステムリンクを別のターゲットにバインドマウントするとき。 Stephen Kitt が上で正しく示唆しているように、これは、名前空間を使用しているプロセスがなくなった場合でも、名前空間の存在を維持するためです。

たとえば、新しいネットワーク名前空間で新しいユーザー名前空間を作成し、それをバインドマウントしてから終了します。名前空間はまだ存在しますが、lsns /proc/$PID/ns にリストされていないため、見つかりません (バインド) マウント ポイントとして存在します。

# bind mount only needs an inode, not necessarily a directory ;)
touch mynetns
# create new network namespace, show its id and then bind-mount it, so it
# is kept existing after the unshare'd bash has terminated.
# output: net:[##########]
NS=$(sudo unshare -n bash -c "readlink /proc/self/ns/net && mount --bind /proc/self/ns/net mynetns") && echo $NS
# notice how lsns cannot see this namespace anymore: no match!
lsns -t net | grep ${NS:5:-1} || echo "lsns: no match for net:[${NS:5:-1}]"
# however, findmnt does locate it on the nsfs...
findmnt -t nsfs | grep ${NS:5:-1} || echo "no match for net:[${NS:5:-1}]"
# output: /home/.../mynetns nsfs[net:[##########]] nsfs rw
# let the namespace go...
echo "unbinding + releasing network namespace"
sudo umount mynetns
findmnt -t nsfs | grep ${NS:5:-1} || echo "findmnt: no match for net:[${NS:5:-1}]"
# clean up
rm mynetns

出力は次のようになります:

net:[4026532992]
lsns: no match for net:[4026532992]
/home/.../mynetns nsfs[net:[4026532992]] nsfs   rw
unbinding + releasing network namespace
findmnt: no match for net:[4026532992]

nsfs ファイルシステム経由で名前空間を作成することはできず、syscalls clone() (CLONE_NEW... )、共有を解除します。 nsfs 現在のカーネル ステータス w.r.t のみを反映します。名前空間を作成または破棄することはできません。

名前空間は、それらへの参照が残っておらず、プロセスがない場合は常に自動的に破棄されます (したがって、/proc/$PID/ns/... はありません)。 ) かつ 上記の例で調べたように、バインド マウントもありません。


それが setns で使用される「名前空間ファイル システム」です。 システムコールと、そのソースコードが示すように、名前空間関連の ioctl (例:NS_GET_USERNSNS_GET_OWNER_UID ...)

NSFS /proc によって提供されていた疑似ファイル エントリ Linux 3.19 までのファイル システム。これがこの変更のコミットです。

このファイルの存在について考えられる説明については、Stephen Kitt のコメントを参照してください。


Linux
  1. パーティションレスファイルシステムのメリットは?

  2. 空きスペースはどうなりましたか?

  3. *nix とはどういう意味ですか?

  1. CFSのvruntimeの概念は何ですか

  2. UDF のパーティション ID / ファイルシステム タイプは何ですか?

  3. ゴールドリンカーとは何ですか?

  1. Linuxを持続可能なOSにする理由

  2. Linuxコミュニティが特別な理由は何ですか?

  3. LinuxとUnix:違いは何ですか?