掛載NFS時(shí),常用的命令比如:
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)昌圖,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
#將遠(yuǎn)程目錄掛載到本地/home/share目錄下
mount -t nfs -o nolock 192.168.1.10:/tmp /home/share
在Linux 下可以用mount
函數(shù)進(jìn)行掛載:
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;
}
掛載失敗時(shí),常見錯(cuò)誤碼errno
有:
#define EINVAL 22 /* Invalid argument 掛載參數(shù)問(wèn)題,可能是沒加addr*/
#define EACCES 13 /* Permission denied 權(quán)限問(wèn)題*/
#define EPERM 1 /* Operation not permitted 權(quán)限問(wèn)題*/
#define EBUSY 16 /* Device or resource busy 掛載目錄正被使用*/
#define ENOENT 2 /* No such file or directory 掛載目錄錯(cuò)誤*/
參數(shù) | 說(shuō)明 |
---|---|
rsize=n | 讀時(shí)最大字節(jié)數(shù) |
wsize=n | 寫時(shí)最大字節(jié)數(shù) |
timeo=n | 客戶端重傳請(qǐng)求前等待時(shí)間,默認(rèn)等待重傳時(shí)間為60s |
retrans=n | 客戶端返回錯(cuò)誤前的重傳次數(shù)。默認(rèn)為重傳3次。retrans與soft參數(shù)一起使用時(shí)才有效。 |
soft/hard | 軟掛載方式掛載系統(tǒng),若NFS請(qǐng)求超時(shí),則客戶端向調(diào)用程序返回錯(cuò)誤; 如果使用硬連接方式則客戶端一直重新請(qǐng)求直至成功。默認(rèn)為hard |
bg/fg | 設(shè)置掛載失敗后的行為方式。 默認(rèn)的fg方式將立刻退出返回錯(cuò)誤狀態(tài),bg方式是退出前將產(chǎn)生一個(gè)子進(jìn)程在后臺(tái)繼續(xù)嘗試掛載 |
vers=xxx | 設(shè)置版本 |
addr=xxx | 設(shè)置服務(wù)地址 |
tcp/udp | 設(shè)置協(xié)議,一般使用tcp,網(wǎng)絡(luò)不穩(wěn)定可以換udp |
port=n | 設(shè)置服務(wù)端口號(hào) |
lock/nolock | 選擇是否使用NLM協(xié)議在服務(wù)器上鎖文件。當(dāng)選擇nolock選項(xiàng)時(shí),鎖對(duì)于同一主機(jī)的應(yīng)用有效,對(duì)不同主機(jī)不受鎖的影響。默認(rèn)為lock。 |
卸載函數(shù)有mount
和mount2
,第二個(gè)可以加參數(shù),所以一般情況下使用mount2
進(jìn)行強(qiáng)制卸載:
bool UnMount()
{
return umount2(m_localPath.c_str(), MNT_FORCE) == 0);
}
如果m_localPath
目錄沒有被掛載,則會(huì)返回錯(cuò)誤
Linux下使用命令檢查nfs是否掛載成功的方式有很多,比如:
檢查文件系統(tǒng)的磁盤空間占用情況 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=k,nr_inodes=,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=k,nr_inodes=,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)
查看指定目錄是否掛載點(diǎn) mountpoint -d /mnt/udisk
#打印文件系統(tǒng)的主設(shè)備號(hào)和次設(shè)備號(hào)
0:21
功能需求:
經(jīng)過(guò)測(cè)試,只有mountpoint
能完成第二點(diǎn)功能需求,所以直接使用shell命令來(lái)進(jìn)行檢查:
bool CheckMount()
{
string shell = "mountpoint -d " + m_localPath;
QProcess proc;
proc.start(shell.c_str());
if (!proc.waitForFinished())
return false;
auto output = proc.readAll();
return !output.isEmpty())
}
Linux下的NFS服務(wù)安裝比較方便,Windows下常見的NFS服務(wù)軟件可以使用haneWIN NFS Server
1. 下載地址:https://r.hanewin.net/nfs1261.zip
2. 配置方法:打開目錄下的exports文件,配置NFS服務(wù)目錄,比如共享D盤下的NFSData目錄:
D:\NFSData -name:nfs -exec -maproot:0 -alldirs
mount -t nfs -o nolock 192.168.1.10:/nfs /home/share