您好,登錄后才能下訂單哦!
如何進(jìn)行nfs不同版本的掛載與解析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
NFS,是Network File System的簡(jiǎn)寫,即網(wǎng)絡(luò)文件系統(tǒng)。網(wǎng)絡(luò)文件系統(tǒng)是FreeBSD支持的文件系統(tǒng)中的一種,也被稱為NFS. NFS允許一個(gè)系統(tǒng)在網(wǎng)絡(luò)上與他人共享目錄和文件。通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠(yuǎn)端系統(tǒng)上的文件 。
運(yùn)行模式: C/S
版本異同:RHEL6.5以NFSv3作為默認(rèn)版本,NFSv3使用TCP、UDP協(xié)議(端口號(hào)是2049),默認(rèn)是UDP; RHEL7以NFSv4作為默認(rèn)版本,NFSv4使用TCP協(xié)議(端口號(hào)是2049)和NFS服務(wù)器建立連接。
原理示意圖:
RHEL6.5環(huán)境:
服務(wù)端配置安裝
1、包安裝
# rpm -qa | grep nfs-utils
# yum install nfs-utils rpcbind
要部署NFS服務(wù),需要安裝上面兩個(gè)軟件包
1.nfs-utils:NSF主程序
包括rpc.nfsd,rpc.mountd等等
2.rpcbind:rpc主程序
NFS可以被視為一個(gè)RPC程序,在啟動(dòng)任何一個(gè)RPC程序之前,需要做好端口映射工作,這個(gè)映射工作
就是由rpcbind服務(wù)來完成的,因此必須先啟動(dòng)rpcbind服務(wù),再啟動(dòng)nfs服務(wù)
2、NFS文件配置:
[root@test /]# vi /etc/exports
#增加一行:
/tmp/test0920 11.11.165.0/24(rw,no_root_squash,no_all_squash,sync)
:x保存退出;
3、使配置生效:
[root@test /]# exportfs -r
注:配置文件說明:
/tmp/test0920 為共享的目錄,使用絕對(duì)路徑。
11.11.165.0/24
4、測(cè)試:
[root@localhost ~]# showmount -e
Export list for test1:
/tmp/test0920 11.11.165.0/24
5、設(shè)置服務(wù)開機(jī)自啟
Chkconfig rpcbind on
Chkconfig --level 345 rpcbind on
Chkconfig nfs on
Chkconfig --level 345 nfs on
客戶端的配置:
1、yum -y install nfs-utils
2、mount -t nfs 11.11.165.115:/tmp/test0920 /data
3、編輯/etc/fstab
增加11.11.165.115:/tmp/test0920 /data nfs defaults 0 0
注意默認(rèn)是nfs掛載
如果選擇nfs4掛載,則可以用以下語句
mount -t nfs4 11.11.165.115:/tmp/test0920 /data
編輯/etc/fstab
則可以
11.11.165.115:/tmp/test0920 /data nfs4 defaults 0 0
或者
11.11.165.115:/tmp/test0920 /data nfs defaults,v4 0 0
容易出現(xiàn)的問題:
在/etc/sysconfig/nfs文件里,將
# Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3"
# v4 protocol support
#RPCNFSDARGS="-N 4" 將這句的#去掉后
則出現(xiàn)
[root@testsj ~]# mount -t nfs 11.11.165.115:/tmp/test0920 /data
mount.nfs: Protocol not supported
[root@testsj ~]# mount -t nfs4 11.11.165.115:/tmp/test0920 /data
mount.nfs4: Protocol not supported
因?yàn)殛P(guān)閉了nfs4, 則nfs4和4以下的協(xié)議都不支持了
當(dāng)你加上#號(hào)后,nfs4和nfs3都可以掛載了
RHEL7.3環(huán)境:
在/etc/sysconfig/nfs文件里
RPCNFSDARGS="-V 4.2"
編輯/etc/fstab
則可以
11.11.165.115:/tmp/test0920 /data nfs4.2 defaults 0 0
或者
11.11.165.115:/tmp/test0920 /data nfs defaults,v4.2 0 0
服務(wù)和防火墻稍有差別
[root@linuxprobe ~]# systemctl start rpcbind
[root@linuxprobe ~]# systemctl enable rpcbind
[root@linuxprobe ~]# systemctl start nfs-server
[root@linuxprobe ~]# systemctl enable nfs-server
進(jìn)站允許策略
# firewall-cmd --add-service=nfs --zone=internal --permanent
# firewall-cmd --add-service=mountd --zone=internal --permanent
# firewall-cmd --add-service=rpc-bind --zone=internal --permanent
加安全認(rèn)證的配置
在desktop30上掛載來自于server30的NFS共享,要求
1 /public掛載在目錄/mnt/nfsmount上
2 /protected掛載在目錄/mnt/nfssecure,并使用安全的方式,秘鑰在http://ldap.example.com/pub/desktop30.keytab
3 這些文件系統(tǒng)在系統(tǒng)啟動(dòng)時(shí)自動(dòng)掛載
[root@desktop30 mnt]# systemctl enable nfs-server.service
[root@desktop30 mnt]# systemctl enable nfs-secure.service
ln -s '/usr/lib/systemd/system/nfs-secure.service' '/etc/systemd/system/nfs.target.wants/nfs-secure.service'
[root@desktop30 mnt]# systemctl start nfs-secure.service
[root@desktop30 mnt]# mkdir nfsmount
[root@desktop30 mnt]# mkdir nfssecure
[root@desktop30 mnt]# wget -O /etc/krb5.keytab http://ldap.example.com/pub/desktop30.keytab
[root@desktop30 mnt]# vim /etc/fstab
172.16.30.130:/public /mnt/nfsmount nfs ro 0 0
server30.example.com:/protected /mnt/nfssecure nfs rw,sec=krb5p 0 0
協(xié)議版本解析:
NFS協(xié)議到現(xiàn)在經(jīng)歷了V1,V2,V3,V4版本,但是它有一個(gè)缺點(diǎn)就是協(xié)議沒有用戶認(rèn)證機(jī)制,而且數(shù)據(jù)在網(wǎng)絡(luò)上傳送的時(shí)候是明文傳送,所以安全性極差,一般只能在局域網(wǎng)中使用。
NFSv3是1995年發(fā)布的,相比NFSv3,NFSv4發(fā)生了比較大的變化,最大的變化是NFSv4有狀態(tài)了。NFSv2和NFSv3都是無狀態(tài)協(xié)議,服務(wù)區(qū)端不需要維護(hù)客戶端的狀態(tài)信息。無狀態(tài)協(xié)議的一個(gè)優(yōu)點(diǎn)在于災(zāi)難恢復(fù),當(dāng)服務(wù)器出現(xiàn)問題后,客戶端只需要重復(fù)發(fā)送失敗請(qǐng)求就可以了,直到收到服務(wù)器的響應(yīng)信息。但是某些操作必須需要狀態(tài),如文件鎖。如果客戶端申請(qǐng)了文件鎖,但是服務(wù)器重啟了,由于NFSv3無狀態(tài),客戶端再執(zhí)行鎖操作可能就會(huì)出錯(cuò)了。NFSv3需要NLM協(xié)助才能實(shí)現(xiàn)文件鎖功能,但是有的時(shí)候兩者配合不夠協(xié)調(diào)。NFSv4設(shè)計(jì)成了一種有狀態(tài)的協(xié)議,自身實(shí)現(xiàn)了文件鎖功能,就不需要NLM協(xié)議了。
NFSv4和NFSv3的差別如下:
(1) NFSv4設(shè)計(jì)成了一種有狀態(tài)的協(xié)議,自身實(shí)現(xiàn)了文件鎖功能和獲取文件系統(tǒng)根節(jié)點(diǎn)功能,不需要NLM和MOUNT協(xié)議協(xié)助了。
(2) NFSv4增加了安全性,支持RPCSEC-GSS身份認(rèn)證。
(3) NFSv4只提供了兩個(gè)請(qǐng)求NULL和COMPOUND,所有的操作都整合進(jìn)了COMPOUND中,客戶端可以根據(jù)實(shí)際請(qǐng)求將多個(gè)操作封裝到一個(gè)COMPOUND請(qǐng)求中,增加了靈活性。
(4) NFSv4文件系統(tǒng)的命令空間發(fā)生了變化,服務(wù)器端必須設(shè)置一個(gè)根文件系統(tǒng)(fsid=0),其他文件系統(tǒng)掛載在根文件系統(tǒng)上導(dǎo)出。
(5)
NFSv4支持delegation。由于多個(gè)客戶端可以掛載同一個(gè)文件系統(tǒng),為了保持文件同步,NFSv3中客戶端需要經(jīng)常向服務(wù)器發(fā)起請(qǐng)求,請(qǐng)求文件屬性信息,判斷其他客戶端是否修改了文件。如果文件系統(tǒng)是只讀的,或者客戶端對(duì)文件的修改不頻繁,頻繁向服務(wù)器請(qǐng)求文件屬性信息會(huì)降低系統(tǒng)性能。NFSv4可以依靠delegation實(shí)現(xiàn)文件同步。當(dāng)客戶端A打開一個(gè)文件時(shí),服務(wù)器會(huì)分配給客戶端A一個(gè)delegation。只要客戶端A具有delegation,就可以認(rèn)為與服務(wù)器保持了一致。如果另外一個(gè)客戶端B訪問同一個(gè)文件,則服務(wù)器會(huì)暫緩客戶端B的訪問請(qǐng)求,向客戶端A發(fā)送RECALL請(qǐng)求。當(dāng)客戶端A接收到RECALL請(qǐng)求時(shí)將本地緩存刷新到服務(wù)器中,然后將delegation返回服務(wù)器,這時(shí)服務(wù)器開始處理客戶端B的請(qǐng)求。
(6) NFSv4修改了文件屬性的表示方法。由于NFS是Sun開發(fā)的一套文件系統(tǒng),設(shè)計(jì)之出NFS文件屬性參考了UNIX中的文件屬性,可能Windows中不具備某些屬性,因此NFS對(duì)操作系統(tǒng)的兼容性不太好。NFSv4將文件屬性劃分成了三類:
Mandatory Attributes: 這是文件的基本屬性,所有的操作系統(tǒng)必須支持這些屬性。
Recommended Attributes: 這是NFS建議的屬性,如果可能操作系統(tǒng)盡量實(shí)現(xiàn)這些屬性。
Named Attributes: 這是操作系統(tǒng)可以自己實(shí)現(xiàn)的一些文件屬性。
(7)服務(wù)器端拷貝:
如果客戶需要從一個(gè)NFS服務(wù)器拷貝數(shù)據(jù)到另外一個(gè)NFS服務(wù)器,nfsv4可以讓兩臺(tái)NFS服務(wù)器之間直接拷貝數(shù)據(jù),不需要經(jīng)過客戶端。
(8)資源預(yù)留和回收:
NFSv4為虛擬分配提供的新特性。隨著存儲(chǔ)虛擬分配功能的普及使用,nfsv4可以為預(yù)留固定大小的存儲(chǔ)空間;同樣在文件系統(tǒng)上刪除文件后,也能夠在存儲(chǔ)上面釋放相應(yīng)空間。
(9)國際化支持:
NFSv4文件名、目錄、鏈接、用戶與組可以使用 UTF-8字符集,UTF-8兼容ASCII碼,使得NFSv4支持更多語言。
(10)RPC合并調(diào)用:
NFSv4允許將多個(gè)請(qǐng)求合并為一個(gè)rpc引用,在NFSv3每個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)rpc調(diào)用。WAN環(huán)境中,NFSv4合并rpc調(diào)用可以顯著降低延遲。
(11)安全性:
NFSv4用戶驗(yàn)證采用“用戶名+域名”的模式,與Windows AD驗(yàn)證方式類似,NFSv4強(qiáng)制使用Kerberos驗(yàn)證方式。(Kerberos與Windows AD都遵循相同RFC1510標(biāo)準(zhǔn)),這樣方便windows和*nix環(huán)境混合部署。
(12)pNFS
并行NFS文件系統(tǒng),元數(shù)據(jù)服務(wù)器負(fù)責(zé)用戶請(qǐng)求調(diào)度、數(shù)據(jù)服務(wù)器負(fù)責(zé)客戶請(qǐng)求處理。pNFS需要NFS服務(wù)器和客戶端協(xié)同支持
后來的 NFSv4.1,與NFSv4.0相比,NFSv4.1最大的變化是支持并行存儲(chǔ)了。在以前的協(xié)議中,客戶端直接與服務(wù)器連接,客戶端直接將數(shù)據(jù)傳輸?shù)椒?wù)器中。當(dāng)客戶端數(shù)量較少時(shí)這種方式?jīng)]有問題,但是如果大量的客戶端要訪問數(shù)據(jù)時(shí),NFS服務(wù)器很快就會(huì)成為一個(gè)瓶頸,抑制了系統(tǒng)的性能。NFSv4.1支持并行存儲(chǔ),服務(wù)器由一臺(tái)元數(shù)據(jù)服務(wù)器(MDS)和多臺(tái)數(shù)據(jù)服務(wù)器(DS)構(gòu)成,元數(shù)據(jù)服務(wù)器只管理文件在磁盤中的布局,數(shù)據(jù)傳輸在客戶端和數(shù)據(jù)服務(wù)器之間直接進(jìn)行。由于系統(tǒng)中包含多臺(tái)數(shù)據(jù)服務(wù)器,因此數(shù)據(jù)可以以并行方式訪問,系統(tǒng)吞吐量迅速提升。現(xiàn)在新的是nfsv4.2
所以盡可能用nfs4
補(bǔ)充:
nfs4掛載的fsid問題
問題現(xiàn)象:
掛載nfs4時(shí),報(bào)錯(cuò):reason given by server :No such file or directory
背景知識(shí):
NFSv4將所有共享使用一個(gè)虛擬文件系統(tǒng)展示給客戶端。偽文件系統(tǒng)根目錄(/)使用fsid=0標(biāo)示,只有一個(gè)共享可以是fsid=0??蛻舳诵枰褂谩皀fs server ip:/”掛載偽文件系統(tǒng),偽文件系統(tǒng)一般使用RO方式共享,其他共享可以通過mount –bind選項(xiàng)在偽文件系統(tǒng)目錄下掛載。客戶端掛載過程需要通過mount –t nfs4指定NFS版本為4,默認(rèn)采用nfsv3。
解決:
以下是我的配置文件,我想掛在/datapool/nfs目錄
/ *(rw,fsid=0,insecure,no_root_squash)
/datapool/nfs *(rw,fsid=1000,insecure,no_root_squash
然后mount -t nfs4 ip:/datapool/nfs /mnt/nfs/
nfs配置參數(shù)選項(xiàng)說明:
ro:共享目錄只讀;
rw:共享目錄可讀可寫;
all_squash:所有訪問用戶都映射為匿名用戶或用戶組;
no_all_squash(默認(rèn)):訪問用戶先與本機(jī)用戶匹配,匹配失敗后再映射為匿名用戶或用戶組;
root_squash(默認(rèn)):將來訪的root用戶映射為匿名用戶或用戶組;
no_root_squash:來訪的root用戶保持root帳號(hào)權(quán)限;
anonuid=<UID>:指定匿名訪問用戶的本地用戶UID,默認(rèn)為nfsnobody(65534);
anongid=<GID>:指定匿名訪問用戶的本地用戶組GID,默認(rèn)為nfsnobody(65534);
secure(默認(rèn)):限制客戶端只能從小于1024的tcp/ip端口連接服務(wù)器;
insecure:允許客戶端從大于1024的tcp/ip端口連接服務(wù)器;
sync:將數(shù)據(jù)同步寫入內(nèi)存緩沖區(qū)與磁盤中,效率低,但可以保證數(shù)據(jù)的一致性;
async:將數(shù)據(jù)先保存在內(nèi)存緩沖區(qū)中,必要時(shí)才寫入磁盤;
wdelay(默認(rèn)):檢查是否有相關(guān)的寫操作,如果有則將這些寫操作一起執(zhí)行,這樣可以提高效率;
no_wdelay:若有寫操作則立即執(zhí)行,應(yīng)與sync配合使用;
subtree_check(默認(rèn)) :若輸出目錄是一個(gè)子目錄,則nfs服務(wù)器將檢查其父目錄的權(quán)限;
no_subtree_check :即使輸出目錄是一個(gè)子目錄,nfs服務(wù)器也不檢查其父目錄的權(quán)限,這樣可以提高效率;
1、在上面的操作過程中,如果你不幸遇到下面這個(gè)問題的話,可以嘗試更新 Linux kernel 或通過打開 IPv6 來解決這個(gè)問題,這是1個(gè) bug:
# mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
mount.nfs4: Cannot allocate memory
2、如果遇到如下問題,可能是因?yàn)槟愕?mount -t nfs 使用的是 nfsv3 協(xié)議,需要明確指出使用 nfsv4 協(xié)議掛載 mount -t nfs4:
# mount -t nfs 172.16.20.1:/ /home/vpsee/bak/
mount: mount to NFS server '172.16.20.1' failed: RPC Error: Program not registered.
# mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
如果網(wǎng)絡(luò)不穩(wěn)定
NFS默認(rèn)是用UDP協(xié)議,換成TCP協(xié)議掛載即可:
mount -t nfs 11.11.165.115:/tmp/test0920 /data -o proto=tcp -o nolock
VMware ESXi5.5主機(jī)無法掛載RHEL6.5 NFS存儲(chǔ)
看完上述內(nèi)容,你們掌握如何進(jìn)行nfs不同版本的掛載與解析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。