Linux
在 Linux 中查看/操作掛載命名空間
有沒有辦法查看或操作任意程序的掛載命名空間?
例如,正在執行的 docker 容器具有本地掛載到 NFS 伺服器。從容器內部可以看到,但在外部,宿主卻不知道。使用網路命名空間,這是可行的。例如管道
但是,對於掛載命名空間,我對此一無所知。是否有公開的 API 或 sysfs 層來查看這些掛載並操作或創建新的掛載?
是的。您可以查看它
/proc/$PID/mountinfo
,否則您可以使用findmnt -N
開關 - 關於它findmnt --help
說:
-N, --task <tid>
- 使用替代命名空間(
/proc/<tid>/mountinfo
文件)
findmnt
還跟踪PROPAGATION
標誌,該標誌是一個mountinfo
準確報告此資訊的欄位 - 哪些程序共享哪些掛載。此外,您始終可以
nsenter
使用您喜歡的任何類型的命名空間——當然,前提是您具有正確的權限。nsenter --help Usage: nsenter [options] <program> [args...] Options: -t, --target <pid> target process to get namespaces from -m, --mount [=<file>] enter mount namespace -u, --uts [=<file>] enter UTS namespace (hostname etc) -i, --ipc [=<file>] enter System V IPC namespace -n, --net [=<file>] enter network namespace -p, --pid [=<file>] enter pid namespace -U, --user [=<file>] enter user namespace -S, --setuid <uid> set uid in user namespace -G, --setgid <gid> set gid in user namespace -r, --root [=<dir>] set the root directory -w, --wd [=<dir>] set the working directory -F, --no-fork do not fork before exec'ing <program> -h, --help display this help and exit -V, --version output version information and exit For more details see nsenter(1).