一运悲、NFS服務(wù)簡(jiǎn)介
NFS 就是NetworkFileSystem 的縮寫采幌,最早之前是由sun?這家公司所發(fā)展出來的惯悠。 它最大的功能就是可以透過網(wǎng)絡(luò)职车,讓不同的機(jī)器洲胖、不同的操作系統(tǒng)济榨、可以彼此分享個(gè)別的檔案 (share files)。所以绿映,你也可以簡(jiǎn)單的將他看做是一個(gè)文件服務(wù)器 (file server) 呢擒滑!這個(gè) NFS 服務(wù)器可以讓你的 PC 來將網(wǎng)絡(luò)遠(yuǎn)程的 NFS 服務(wù)器分享的目錄,掛載到本地端的機(jī)器當(dāng)中叉弦, 在本地端的機(jī)器看起來丐一,那個(gè)遠(yuǎn)程主機(jī)的目錄就好像是自己的一個(gè)磁盤分區(qū)槽一樣 (partition)!使用上面相當(dāng)?shù)谋憷?/p>
因?yàn)?NFS 支持的功能相當(dāng)?shù)亩嘌捅煌墓δ芏紩?huì)使用不同的程序來啟動(dòng)库车, 每啟動(dòng)一個(gè)功能就會(huì)啟用一些端口來傳輸數(shù)據(jù),因此樱拴, NFS 的功能所對(duì)應(yīng)的端口才沒有固定住柠衍, 而是隨機(jī)取用一些未被使用的小于 1024 的埠口來作為傳輸之用洋满。但如此一來又造成客戶端想要連上服務(wù)器時(shí)的困擾, 因?yàn)榭蛻舳说靡婪?wù)器端的相關(guān)埠口才能夠聯(lián)機(jī)吧拧略!
此時(shí)我們就得需要遠(yuǎn)程過程調(diào)用 (RPC) 的服務(wù)啦芦岂!RPC 最主要的功能就是在指定每個(gè) NFS 功能所對(duì)應(yīng)的 port number ,并且回報(bào)給客戶端垫蛆,讓客戶端可以連結(jié)到正確的埠口上去禽最。 那 RPC 又是如何知道每個(gè) NFS 的埠口呢?這是因?yàn)楫?dāng)服務(wù)器在啟動(dòng) NFS 時(shí)會(huì)隨機(jī)取用數(shù)個(gè)埠口袱饭,并主動(dòng)的向 RPC 注冊(cè)川无,因此 RPC 可以知道每個(gè)埠口對(duì)應(yīng)的 NFS 功能,然后 RPC 又是固定使用 port 111 來監(jiān)聽客戶端的需求并回報(bào)客戶端正確的埠口虑乖, 所以當(dāng)然可以讓 NFS 的啟動(dòng)更為輕松愉快了懦趋!
所以你要注意,要啟動(dòng) NFS 之前疹味,RPC 就要先啟動(dòng)了仅叫,否則 NFS 會(huì)無法向 RPC 注冊(cè)。 另外糙捺,RPC 若重新啟動(dòng)時(shí)诫咱,原本注冊(cè)的數(shù)據(jù)會(huì)不見,因此 RPC 重新啟動(dòng)后洪灯,它管理的所有服務(wù)都需要重新啟動(dòng)來重新向 RPC 注冊(cè)坎缭。
當(dāng)客戶端有 NFS 檔案存取需求時(shí),他會(huì)如何向服務(wù)器端要求數(shù)據(jù)呢签钩?
客戶端會(huì)向服務(wù)器端的 RPC (port 111) 發(fā)出 NFS 檔案存取功能的詢問要求掏呼;
服務(wù)器端找到對(duì)應(yīng)的已注冊(cè)的 NFS daemon 埠口后,會(huì)回報(bào)給客戶端铅檩;
客戶端了解正確的埠口后憎夷,就可以直接與 NFS daemon 來聯(lián)機(jī)。
由于 NFS 的各項(xiàng)功能都必須要向 RPC 來注冊(cè)昧旨,如此一來 RPC 才能了解 NFS 這個(gè)服務(wù)的各項(xiàng)功能之 port number, PID, NFS 在服務(wù)器所監(jiān)聽的 IP 等等岭接,而客戶端才能夠透過 RPC 的詢問找到正確對(duì)應(yīng)的埠口。 也就是說臼予,NFS 必須要有 RPC 存在時(shí)才能成功的提供服務(wù)鸣戴,因此我們稱 NFS 為 RPC server 的一種。事實(shí)上粘拾,有很多這樣的服務(wù)器都是向 RPC 注冊(cè)的窄锅,舉例來說,NIS (Network Information Service) 也是 RPC server 的一種呢
二、所需要的軟件及軟件結(jié)構(gòu)
要設(shè)定好 NFS 服務(wù)器我們必須要有兩個(gè)軟件才行入偷,分別是:
RPC 主程序:rpcbind
就如同剛剛提的到追驴,我們的 NFS 其實(shí)可以被視為一個(gè) RPC 服務(wù),而要啟動(dòng)任何一個(gè) RPC 服務(wù)之前疏之,我們都需要做好 port 的對(duì)應(yīng) (mapping) 的工作才行殿雪,這個(gè)工作其實(shí)就是『 rpcbind 』這個(gè)服務(wù)所負(fù)責(zé)的!也就是說锋爪,在啟動(dòng)任何一個(gè) RPC 服務(wù)之前丙曙,我們都需要啟動(dòng) rpcbind 才行! (在 CentOS 5.x 以前這個(gè)軟件稱為 portmap其骄,在 CentOS 6.x 之后才稱為 rpcbind 的亏镰!)
NFS 主程序:nfs-utils
就是提供 rpc.nfsd 及 rpc.mountd 這兩個(gè) NFS daemons 與其他相關(guān) documents 與說明文件、執(zhí)行文件等的軟件拯爽!這個(gè)就是 NFS 服務(wù)所需要的主要軟件啦索抓!一定要有喔!
?NFS 這個(gè)咚咚真的是很簡(jiǎn)單毯炮,上面我們提到的 NFS 軟件中逼肯,配置文件只有一個(gè),執(zhí)行檔也不多桃煎, 記錄文件也三三兩兩而已吶汉矿!趕緊先來看一看吧! ^_^
主要配置文件:/etc/exports
這個(gè)檔案就是 NFS 的主要配置文件了备禀!不過,系統(tǒng)并沒有默認(rèn)值奈揍,所以這個(gè)檔案『不一定會(huì)存在』曲尸,你可能必須要使用 vim 主動(dòng)的建立起這個(gè)檔案喔!我們等一下要談的設(shè)定也僅只是這個(gè)檔案而已吶男翰!
NFS 文件系統(tǒng)維護(hù)指令:/usr/sbin/exportfs
這個(gè)是維護(hù) NFS 分享資源的指令另患,我們可以利用這個(gè)指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸除或重新分享等等蛾绎,這個(gè)指令是 NFS 系統(tǒng)里面相當(dāng)重要的一個(gè)喔昆箕!至于指令的用法我們?cè)诘紫聲?huì)介紹。
分享資源的登錄檔:/var/lib/nfs/*tab
在 NFS 服務(wù)器的登錄文件都放置到 /var/lib/nfs/ 目錄里面租冠,在該目錄下有兩個(gè)比較重要的登錄檔鹏倘, 一個(gè)是 etab ,主要記錄了 NFS 所分享出來的目錄的完整權(quán)限設(shè)定值顽爹;另一個(gè) xtab 則記錄曾經(jīng)鏈接到此 NFS 服務(wù)器的相關(guān)客戶端數(shù)據(jù)纤泵。
客戶端查詢服務(wù)器分享資源的指令:/usr/sbin/showmount
這是另一個(gè)重要的 NFS 指令。exportfs 是用在 NFS Server 端镜粤,而 showmount 則主要用在 Client 端捏题。這個(gè) showmount 可以用來察看 NFS 分享出來的目錄資源喔玻褪!
就說不難吧!主要就是這幾個(gè)啰公荧!
三带射、系統(tǒng)環(huán)境
系統(tǒng)CentOS6.8
IP 192.168.2.203
四、安裝NFS服務(wù)
1循狰、查看系統(tǒng)是否已安裝NFS
[root@bogon ~]# rpm -qa |grep nfs
[root@bogon ~]# rpm -qa |grep rpcbind
[root@bogon ~]#
2窟社、安裝NFS
[root@bogon ~]#yum-yinstallnfs-utils rpcbind
已加載插件:fastestmirror
設(shè)置安裝進(jìn)程
Loading mirror speeds from cached hostfile
... ...
已安裝:
? nfs-utils.x86_641:1.2.3-70.el6_8.2rpcbind.x86_640:0.2.0-12.el6? ? ? ? ? ? ? ? ? ? ? ? ?
作為依賴被安裝:
? keyutils.x86_64 0:1.4-5.el6? ? ? ? libevent.x86_640:1.4.13-4.el6? ? ? ? libgssglue.x86_640:0.1-11.el6? ? ? ? ?
? libtirpc.x86_64 0:0.2.1-11.el6_8? ? nfs-utils-lib.x86_640:1.1.5-11.el6? ? python-argparse.noarch0:1.2.1-2.1.el6?
完畢!
五晤揣、服務(wù)端配置
在NFS服務(wù)端上創(chuàng)建共享目錄/data/lys并設(shè)置權(quán)限
[root@bogon ~]#mkdir-p /data/lys
[root@bogon ~]# ll /data/總用量 4drwxr-xr-x.2root root409610月2118:10 lys
[root@bogon ~]#chmod666/data/lys/
編輯export文件
[root@bogon ~]# vim /etc/exports /data/lys192.168.2.0/24(rw,no_root_squash,no_all_squash,sync)
常見的參數(shù)則有:
參數(shù)值? ? 內(nèi)容說明
rw ro? ? 該目錄分享的權(quán)限是可擦寫 (read-write) 或只讀 (read-only)桥爽,但最終能不能讀寫,還是與文件系統(tǒng)的 rwx 及身份有關(guān)昧识。
sync async? ? sync代表數(shù)據(jù)會(huì)同步寫入到內(nèi)存與硬盤中钠四,async 則代表數(shù)據(jù)會(huì)先暫存于內(nèi)存當(dāng)中,而非直接寫入硬盤跪楞!
no_root_squash root_squash? ? 客戶端使用 NFS 文件系統(tǒng)的賬號(hào)若為 root 時(shí)缀去,系統(tǒng)該如何判斷這個(gè)賬號(hào)的身份?預(yù)設(shè)的情況下甸祭,客戶端 root 的身份會(huì)由 root_squash 的設(shè)定壓縮成 nfsnobody缕碎, 如此對(duì)服務(wù)器的系統(tǒng)會(huì)較有保障。但如果你想要開放客戶端使用 root 身份來操作服務(wù)器的文件系統(tǒng)池户,那么這里就得要開 no_root_squash 才行咏雌!
all_squash? ? 不論登入 NFS 的使用者身份為何, 他的身份都會(huì)被壓縮成為匿名用戶校焦,通常也就是 nobody(nfsnobody) 啦赊抖!
anonuid anongid? ? anon 意指 anonymous (匿名者) 前面關(guān)于
*_squash 提到的匿名用戶的 UID 設(shè)定值,通常為 nobody(nfsnobody)寨典,但是你可以自行設(shè)定這個(gè) UID 的值氛雪!當(dāng)然,這個(gè) UID 必需要存在于你的 /etc/passwd當(dāng)中耸成! anonuid 指的是 UID 而 anongid 則是群組的 GID 啰报亩。
配置生效
[root@bogon lys]# exportfs -r
啟動(dòng)rpcbind、nfs服務(wù)
[root@bogon lys]# service rpcbind start
正在啟動(dòng) rpcbind:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
[root@bogon lys]# service nfs start
啟動(dòng) NFS 服務(wù):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
啟動(dòng) NFS mountd:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
啟動(dòng) NFS 守護(hù)進(jìn)程:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
正在啟動(dòng) RPC idmapd:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
查看?RPC 服務(wù)的注冊(cè)狀況
[root@bogon lys]# rpcinfo -p localhost
? program vers proto? port? service
? ? 1000004tcp111? portmapper
? ? 1000003tcp111? portmapper
? ? 1000002tcp111? portmapper
? ? 1000004udp111? portmapper
? ? 1000003udp111? portmapper
? ? 1000002udp111? portmapper
? ? 1000051udp49979? mountd
? ? 1000051tcp58393? mountd
? ? 1000052udp45516? mountd
? ? 1000052tcp37792? mountd
? ? 1000053udp32997? mountd
? ? 1000053tcp39937? mountd
? ? 1000032tcp2049? nfs
? ? 1000033tcp2049? nfs
? ? 1000034tcp2049? nfs
? ? 1002272tcp2049? nfs_acl
? ? 1002273tcp2049? nfs_acl
? ? 1000032udp2049? nfs
? ? 1000033udp2049? nfs
? ? 1000034udp2049? nfs
? ? 1002272udp2049? nfs_acl
? ? 1002273udp2049? nfs_acl
? ? 1000211udp51112? nlockmgr
? ? 1000213udp51112? nlockmgr
? ? 1000214udp51112? nlockmgr
? ? 1000211tcp43271? nlockmgr
? ? 1000213tcp43271? nlockmgr
? ? 1000214tcp43271nlockmgr
選項(xiàng)與參數(shù):-p :針對(duì)某 IP (未寫則預(yù)設(shè)為本機(jī)) 顯示出所有的 port 與 porgram 的信息井氢;-t :針對(duì)某主機(jī)的某支程序檢查其 TCP 封包所在的軟件版本弦追;-u :針對(duì)某主機(jī)的某支程序檢查其 UDP 封包所在的軟件版本;
在你的 NFS 服務(wù)器設(shè)定妥當(dāng)之后花竞,我們可以在 server 端先自我測(cè)試一下是否可以聯(lián)機(jī)喔骗卜!就是利用 showmount 這個(gè)指令來查閱!
[root@bogon lys]# showmount -e localhost
Export list for localhost:/data/lys192.168.2.0/24
選項(xiàng)與參數(shù):-a :顯示目前主機(jī)與客戶端的 NFS 聯(lián)機(jī)分享的狀態(tài);-e :顯示某部主機(jī)的 /etc/exports 所分享的目錄數(shù)據(jù)寇仓。
六举户、客戶端配置
安裝nfs-utils客戶端
[root@bogon ~]#yum-yinstallnfs-utils
已安裝:
? nfs-utils.x86_641:1.2.3-70.el6_8.2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
作為依賴被安裝:
? keyutils.x86_64 0:1.4-5.el6? ? ? ? libevent.x86_640:1.4.13-4.el6? ? ? ? libgssglue.x86_640:0.1-11.el6? ? ? ? ?
? libtirpc.x86_64 0:0.2.1-11.el6_8? ? nfs-utils-lib.x86_640:1.1.5-11.el6? ? python-argparse.noarch0:1.2.1-2.1.el6?
? rpcbind.x86_64 0:0.2.0-12.el6? ? ?
完畢!
創(chuàng)建掛載目錄
[root@bogon ~]#mkdir/lys
查看服務(wù)器拋出的共享目錄信息
[root@bogon ~]# showmount -e192.168.2.203Export list for192.168.2.203:/data/lys192.168.2.0/24
為了提高NFS的穩(wěn)定性遍烦,使用TCP協(xié)議掛載俭嘁,NFS默認(rèn)用UDP協(xié)議
[root@bogon ~]#mount-t nfs192.168.2.203:/data/lys /lys -o proto=tcp -o nolock
七、測(cè)試結(jié)果
查看掛載結(jié)果
[root@bogon ~]#df-h
Filesystem? ? ? ? ? ? Size? Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root
? ? ? ? ? ? ? ? ? ? ? 18G? 1.1G? 16G7% /tmpfs? ? ? ? ? ? ? ? 112M? ? 0112M0% /dev/shm/dev/sda1? ? ? ? ? ? 477M? 54M? 398M12% /boot192.168.2.203:/data/lys
? ? ? ? ? ? ? ? ? ? ? 18G? 1.1G? 16G7% /lys
服務(wù)端
[root@bogon lys]#echo"test"> test.txt
客戶端
[root@bogon ~]#cat/lys/test.txt test
[root@bogon ~]# echo "204" >> /lys/test.txt
服務(wù)端
[root@bogon lys]#cat/data/lys/test.txt
test204
卸載已掛在的NFS
[root@bogon ~]#umount/lys/[root@bogon ~]#df-h
Filesystem? ? ? ? ? ? Size? Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root
? ? ? ? ? ? ? ? ? ? ? 18G? 1.1G? 16G7% /tmpfs? ? ? ? ? ? ? ? 112M? ? 0112M0% /dev/shm/dev/sda1? ? ? ? ? ? 477M? 54M? 398M12% /boot
到此結(jié)束
補(bǔ)充部分:
為了方便配置防火墻服猪,需要固定nfs服務(wù)端口
NFS啟動(dòng)時(shí)會(huì)隨機(jī)啟動(dòng)多個(gè)端口并向RPC注冊(cè)供填,這樣如果使用iptables對(duì)NFS端口進(jìn)行限制就會(huì)有點(diǎn)麻煩,可以更改配置文件固定NFS服務(wù)相關(guān)端口罢猪。
[root@bogon lys]# rpcinfo -p localhost
? program vers proto? port? service
? ? 1000004tcp111? portmapper
? ? 1000003tcp111? portmapper
? ? 1000002tcp111? portmapper
? ? 1000004udp111? portmapper
? ? 1000003udp111? portmapper
? ? 1000002udp111? portmapper
? ? 1000051udp49979? mountd
? ? 1000051tcp58393? mountd
? ? 1000052udp45516? mountd
? ? 1000052tcp37792? mountd
? ? 1000053udp32997? mountd
? ? 1000053tcp39937? mountd
? ? 1000032tcp2049? nfs
? ? 1000033tcp2049? nfs
? ? 1000034tcp2049? nfs
? ? 1002272tcp2049? nfs_acl
? ? 1002273tcp2049? nfs_acl
? ? 1000032udp2049? nfs
? ? 1000033udp2049? nfs
? ? 1000034udp2049? nfs
? ? 1002272udp2049? nfs_acl
? ? 1002273udp2049? nfs_acl
? ? 1000211udp51112? nlockmgr
? ? 1000213udp51112? nlockmgr
? ? 1000214udp51112? nlockmgr
? ? 1000211tcp43271? nlockmgr
? ? 1000213tcp43271? nlockmgr
? ? 1000214tcp43271nlockmgr
分配端口近她,編輯配置文件:
[root@bogon lys]# vim /etc/sysconfig/nfs
添加:
RQUOTAD_PORT=30001LOCKD_TCPPORT=30002LOCKD_UDPPORT=30002MOUNTD_PORT=30003STATD_PORT=30004
重啟
[root@bogon lys]# service nfs restart
關(guān)閉 NFS 守護(hù)進(jìn)程:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
關(guān)閉 NFS mountd:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
關(guān)閉 NFS 服務(wù):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
Shutting down RPC idmapd:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
啟動(dòng) NFS 服務(wù):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
啟動(dòng) NFS mountd:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
啟動(dòng) NFS 守護(hù)進(jìn)程:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
正在啟動(dòng) RPC idmapd:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [確定]
查看結(jié)果
[root@bogon lys]# rpcinfo -p localhost
? program vers proto? port? service
? ? 1000004tcp111? portmapper
? ? 1000003tcp111? portmapper
? ? 1000002tcp111? portmapper
? ? 1000004udp111? portmapper
? ? 1000003udp111? portmapper
? ? 1000002udp111? portmapper
? ? 1000051udp30003? mountd
? ? 1000051tcp30003? mountd
? ? 1000052udp30003? mountd
? ? 1000052tcp30003? mountd
? ? 1000053udp30003? mountd
? ? 1000053tcp30003? mountd
? ? 1000032tcp2049? nfs
? ? 1000033tcp2049? nfs
? ? 1000034tcp2049? nfs
? ? 1002272tcp2049? nfs_acl
? ? 1002273tcp2049? nfs_acl
? ? 1000032udp2049? nfs
? ? 1000033udp2049? nfs
? ? 1000034udp2049? nfs
? ? 1002272udp2049? nfs_acl
? ? 1002273udp2049? nfs_acl
? ? 1000211udp30002? nlockmgr
? ? 1000213udp30002? nlockmgr
? ? 1000214udp30002? nlockmgr
? ? 1000211tcp30002? nlockmgr
? ? 1000213tcp30002? nlockmgr
? ? 1000214tcp30002nlockmgr
可以看到,隨機(jī)端口以固定
iptables策略問題完美解決I排痢U成印!