2015-09-28 148 views
3

我試圖用mount()而不是mount命令在我的程序中,我成功地使用了以下mount(),結果返回成功而不是Invalid Argument在Linux下掛載系統調用不能顯示文件系統的掛載點通過df命令

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命令顯示掛載的設備?

+0

不'df'讀取由'mount'命令更新的'/ etc/mtab',而不是'mount()'syscall?檢查你'/ proc/mounts'。 – gavv

+0

是的,我還在/ proc/mounts下找到了掛載點信息。但運行'df -h'後沒有任何顯示。 –

+0

所以問題在於'/ etc/mtab',而不是關於安裝名稱空間。我已經發布了更多細節的答案。 – gavv

回答

2

的問題是,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