我编写了一个小型C程序,仅执行unshare(CLONE_NEWNS),然后执行system(“ bash”)。
手册页指出该进程应具有自己的名称空间。因此,在外壳程序中,我尝试卸载/ cgroup(cgroup安装在原始计算机上)。
当我在计算机上的外壳中进行安装时,/ cgroup也被卸载。我在这里想念什么吗?我以为CLONE_NEWNS是为了让我从进程中卸载文件系统而不影响主系统。
最佳答案
(顺便说一句,您无需编写程序-只需使用unshare(1)
实用程序即可)。
它仅在新的名称空间中卸载文件系统,然后将其保留在原始名称空间中-问题是mount
使用/etc/mtab
生成当前已安装文件系统的列表,而这只是可以更新的普通文件通过新名称空间中的mount
命令。这意味着/etc/mtab
与实际发生的事情不同步(因为只有一个/etc/mtab
,但是有两个装载名称空间)。
请改为检查/proc/mounts
,以查看当前名称空间中实际安装了什么。