Linux中的挂载系统调用无法通过df命令显示文件系统的挂载点。

3

我正在尝试在我的程序中使用mount()而不是mount命令,我成功地使用了以下mount(),结果返回了“success”,而不是“Invalid Argument”。

int rc = mount("172.16.74.20:/data/redun/snmp","/mnt/data/redun/snmp",
                    "nfs",0,"soft,timeo=2,addr=172.16.74.20");

if (rc != 0)
 {
     printf("mount failed, errCode=%d, reason=%s\n",errno, strerror(errno));
 }

当我使用df -h命令检查挂载点时,没有任何信息显示。我发现相关设备尚未挂载。出了什么问题?它真的成功挂载了吗?如何通过df命令在Linux中显示已挂载设备?


df 命令不是读取 mount() 系统调用更新的 /etc/mtab 文件,而是直接读取 /proc/mounts 文件。请检查你的 /proc/mounts 文件。 - gavv
是的,我也在/proc/mounts下找到了挂载点信息。但是在运行“df -h”后没有显示任何内容。 - Leo Xu
所以问题是关于/etc/mtab,而不是挂载命名空间。我已经发布了一个更详细的答案。 - gavv
1个回答

3
问题在于,与mount命令不同,mount()系统调用不会更新/etc/mtab文件,而df命令通过解析/etc/mtab列出挂载点。
然而,挂载点的最新列表始终可在/proc/mounts文件中找到。与/etc/mtab不同,/proc/mounts不是常规文件,而是由内核提供的虚拟文件。
在某些发行版中,/etc/mtab是指向/proc/mounts的符号链接。如果不是这样,并且您想让df正常工作,可以执行以下操作:
cat /proc/mounts > /etc/mtab

在每次调用mount()umount()后,可以查看最新的/etc/mtab文件或者更好地创建一个到/proc/self/mounts的符号链接,但这样做存在一定的风险(可能会影响某些应用程序正常运行,具体视发行版而定)。
另请参阅此问题

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接