【问题标题】:mount system call in linux cannot display the mountpoint of file system by df commandlinux中的mount系统调用无法通过df命令显示文件系统的挂载点
【发布时间】:2015-12-25 05:03:16
【问题描述】:

我尝试在我的程序中使用mount()而不是mount命令,我成功使用了以下mount(),结果返回成功而不是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 检查挂载点时,没有显示任何内容。 我发现相关设备尚未安装。发生了什么?真的挂载成功了吗?如何在 Linux 中通过df 命令显示挂载的设备?

【问题讨论】:

  • df 读取/etc/mtabmount 命令更新,但不是mount() 系统调用?检查你/proc/mounts
  • 是的,我也在 /proc/mounts 下找到了挂载点信息。但是运行'df -h'后没有显示任何内容
  • 所以问题在于/etc/mtab,而不是挂载命名空间。我已经发布了包含更多详细信息的答案。

标签: linux mount nfs linux-disk-free


【解决方案1】:

问题在于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/mounts 或更好的/proc/self/mounts 的符号链接,但风险自负(可能某些应用程序依赖它,但也可能只是发行版中的一个错误)。


另见this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 2015-06-17
    • 2015-04-05
    • 1970-01-01
    • 2016-06-23
    • 2017-10-01
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多