私はLinuxを使用しています。
インストール名前空間にプロセスがあります。その過程で一つ作りましたmount -t tmpfs tmpfs /mountpoint
。
プロセスが終了し、そのインストール名前空間にプロセスがなくなった場合はどうなりますか?ファイルシステムは自動的にマウント解除されますか?名前空間のマウントが破損していますか?名前空間とマウントがまだアクティブな場合はどうすればアクセスできますか?
ネットワークネームスペースにプロセスがなくなったら、tun / tap / macvtapインターフェースはどうなりますか?
答え1
私も同じことが気になって小さなテストを実行しました(カーネル4.20.0でutil-linux 2.33のunshareを使用して、そのバージョンのunshareのマンページには、読んでみる価値のある共有/プライベートマウントに関するいくつかの注意事項があります。あり、YMMVは次のようになります)。以前のバージョンを使用しています。
簡単に言うと:はい、名前空間の最後のプロセスが終了すると、ファイルシステムはマウント解除されます。
私の場合、テスト中の機器はですdm-6
。いいえ「外部」ネームスペースにインストールされます。
ウィンドウ1:
cd /sys/fs/ext4
ls -d dm-6
# No such file or directory
ウィンドウ2:
unshare -m
mount /dev/dm-6 /mnt/tmp
# don't exit yet, keep the namespace active
ウィンドウ3:ウィンドウ1と同じことを行います。
ウィンドウ1:
ls -d dm-6
# exists now
ウィンドウ2:unshare
環境終了
ウィンドウ1:もう一度確認してください。dm-6
まだ残っています。
ウィンドウ3:unshare
環境終了
ウィンドウ1:もう一度確認するとdm-6
再び消えました。
もう一つの便利なデモ/テスト:似たようなアイデアですが、3つのウィンドウを使用するのではなく、ウィンドウ2に2回入って終了します。dmesg
この場合は、ファイルシステムのマウントに関するカーネルメッセージが2回表示されることを確認するか、記録して確認してください。
答え2
マウントがまだ存在しているように見えますが、アクセスできなくなります。
次のテストを行いました。
- 新しい名前空間を入力してtmpfsをマウントします。
root@localhost:~# mkdir tmp root@localhost:~# 共有解除 -m bash root@localhost:~# マウント -t tmpfs tmpfs tmp
- tmpfs で 200MB ファイル生成前後のメモリ使用量を確認してください。 「共有」使用量が404MBから604MBに変更されたことを確認できます。
root@localhost:~# free -m 利用可能な合計無料共有バッファ/キャッシュ数 モバイル:9885 2966 681 404 6237 6148 交換:8191 293 7898 root@localhost:~# dd if=/dev/urandom of=tmp/dummy bs=1M count=200 200+0レコード 200+0 レコード出力 209715200バイト(210MB、200MiB)、12.0075秒、17.5MB /秒コピー root@localhost:~# free -m 利用可能な合計無料共有バッファ/キャッシュ数 モバイル:9885 2966 481 604 6437 5948 交換:8191 293 7898
- 共有解除シェルを終了すると、メモリは回収されません。
root@localhost:~# 終了 root@localhost:~# free -m 利用可能な合計無料共有バッファ/キャッシュ数 モバイル:9885 2963 484 604 6437 5951 交換:8191 293 7898
そしてtmpfsをアンマウントすると、shared
カウントは初期値に戻ります。
答え3
担当者が十分ではないため、説明を追加できません。変更されていないDebian Stretchでjpaで同じテストを行いましたが、削除しなかったとしてもメモリは初期値に戻りました。そのため、この動作が変更されたようです。
http://man7.org/linux/man-pages/man7/namespaces.7.html
これは、少なくとも以下を介して暗示されます。
このディレクトリのファイルの1つをファイルシステムの別の場所にバインドしてマウントします(mount(2)を参照)。現在の名前空間内のすべてのプロセスがアクティブ状態を終了しても、pidで指定されたプロセスに対応する名前空間はそのまま残ります。
したがって、これを行わないと、名前空間(?)が破損します。