Linux

在 Linux 中查看/操作掛載命名空間

  • December 10, 2019

有沒有辦法查看或操作任意程序的掛載命名空間?

例如,正在執行的 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).

引用自:https://unix.stackexchange.com/questions/165588