日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++?NFS掛載及掛載命令_C 語言

作者:Yaronzz ? 更新時間: 2022-03-16 編程語言

掛載NFS

掛載命令

掛載NFS時,常用的命令比如:

#將遠程目錄掛載到本地/home/share目錄下
mount -t nfs -o nolock 192.168.1.10:/tmp /home/share

在Linux 下可以用mount函數進行掛載:

bool Mount()
{
    string remotePath = m_remoteIP + ":" + m_remotePath;
    string localPath = m_localPath;
    string params = "nolock,soft,fg,tcp,timeo=5,retrans=1,rsize=4096,vers=3,addr=" + m_remoteIP;

    int ret = mount(remotePath.c_str(),
                    localPath.c_str(),
                    "nfs",
                    MS_SYNCHRONOUS,
                    params.c_str());

    if (ret != 0)
    {
        auto errInfo = errno;
        return false;
    }

    return true;
}

錯誤碼

掛載失敗時,常見錯誤碼errno有:

#define EINVAL 22 /* Invalid argument 掛載參數問題,可能是沒加addr*/

#define EACCES 13 /* Permission denied 權限問題*/

#define EPERM 1 /* Operation not permitted 權限問題*/

#define EBUSY 16 /* Device or resource busy 掛載目錄正被使用*/

#define ENOENT 2 /* No such file or directory 掛載目錄錯誤*/

掛載參數

參數 說明
rsize=n 讀時最大字節數
wsize=n 寫時最大字節數
timeo=n 客戶端重傳請求前等待時間,默認等待重傳時間為60s
retrans=n 客戶端返回錯誤前的重傳次數。默認為重傳3次。retrans與soft參數一起使用時才有效。
soft/hard 軟掛載方式掛載系統,若NFS請求超時,則客戶端向調用程序返回錯誤;
如果使用硬連接方式則客戶端一直重新請求直至成功。默認為hard
bg/fg 設置掛載失敗后的行為方式。
默認的fg方式將立刻退出返回錯誤狀態,bg方式是退出前將產生一個子進程在后臺繼續嘗試掛載
vers=xxx 設置版本
addr=xxx 設置服務地址
tcp/udp 設置協議,一般使用tcp,網絡不穩定可以換udp
port=n 設置服務端口號
lock/nolock 選擇是否使用NLM協議在服務器上鎖文件。當選擇nolock選項時,鎖對于同一主機的應用有效,對不同主機不受鎖的影響。默認為lock。

卸載

卸載函數有mountmount2,第二個可以加參數,所以一般情況下使用mount2進行強制卸載:

bool UnMount()
{
    return umount2(m_localPath.c_str(), MNT_FORCE) == 0);
}

如果m_localPath目錄沒有被掛載,則會返回錯誤

檢查是否掛載

檢查命令

Linux下使用命令檢查nfs是否掛載成功的方式有很多,比如:

檢查文件系統的磁盤空間占用情況 df -h

Filesystem                Size      Used Available Use% Mounted on
ubi0:rootfs              54.1M     50.8M      3.3M  94% /
devtmpfs                215.8M         0    215.8M   0% /dev
192.168.0.249:/nfs       59.6G      1.6G     57.9G   3% /mnt/udisk

查看掛載信息文件 cat /proc/mounts

ubi0:rootfs / ubifs rw,sync,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=220936k,nr_inodes=55234,mode=755 0 0
192.168.0.249:/nfs /mnt/udisk nfs rw,sync,relatime,vers=3,rsize=4096,wsize=8192,namlen=255,soft,nolock,proto=tcp,timeo=5,retrans=1,sec=sys,mountaddr=192.168.0.249,mountvers=3,mountproto=tcp,local_lock=all,addr=192.168.0.249 0 0

直接使用掛載命令 mount

ubi0:rootfs on / type ubifs (rw,sync,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=220936k,nr_inodes=55234,mode=755)
192.168.0.249:/nfs on /mnt/udisk type nfs (rw,sync,relatime,vers=3,rsize=4096,wsize=8192,namlen=255,soft,nolock,proto=tcp,timeo=5,retrans=1,sec=sys,mountaddr=192.168.0.249,mountvers=3,mountproto=tcp,local_lock=all,addr=192.168.0.249)

查看指定目錄是否掛載點 mountpoint -d /mnt/udisk

#打印文件系統的主設備號和次設備號

0:21

功能實現

功能需求:

  • 檢查目錄是否掛載成功
  • 當NFS服務關閉時,檢查結果也需要同步

經過測試,只有mountpoint 能完成第二點功能需求,所以直接使用shell命令來進行檢查:

bool CheckMount()
{
    string shell = "mountpoint -d " + m_localPath;

    QProcess proc;
    proc.start(shell.c_str());
    if (!proc.waitForFinished(10000))
        return false;
    
    auto output = proc.readAll();
    return !output.isEmpty())
}

NFS服務

Linux下的NFS服務安裝比較方便,Windows下常見的NFS服務軟件可以使用haneWIN NFS Server

1. 下載地址:http://xiazai.jb51.net/202112/yuanma/nfsd_jb51.rar

2. 配置方法:打開目錄下的exports文件,配置NFS服務目錄,比如共享D盤下的NFSData目錄:

D:\NFSData? -name:nfs -exec -maproot:0 -alldirs

  • name:設置掛載的目錄名給客戶端使用,比如mount -t nfs -o nolock 192.168.1.10:/nfs /home/share
  • maproot:將root權限開放給客戶端
  • alldirs:將全部路徑開放給客戶端

原文鏈接:https://www.cnblogs.com/yaronzz/p/15726328.html

欄目分類
最近更新