一、NFS文件共享服務(wù)器概念:
NFS是network file sytem的縮寫(xiě),它允許網(wǎng)絡(luò)中的計(jì)算機(jī)之間共享資源。在NFS的應(yīng)用中,本地NFS的客戶(hù)端應(yīng)用可以透明地讀寫(xiě)位于遠(yuǎn)端NFS服務(wù)器上的文件,就像訪問(wèn)本地文件一樣。
二、NFS工作原理:

image
- 首先NFS服務(wù)器端開(kāi)啟rpcbind;
- 然后服務(wù)端開(kāi)啟NFS服務(wù),這時(shí)NFS的各項(xiàng)功能都需要向RPC服務(wù)注冊(cè),這時(shí)rpc會(huì)通知portmap模塊將可用的端口分配給statd,rquotad進(jìn)程等;
- 然后NFS客戶(hù)端RPC服務(wù)就會(huì)通過(guò)網(wǎng)絡(luò)向NFS服務(wù)端的RPC服務(wù)的111端口發(fā)出NFS文件存取功能的詢(xún)問(wèn)請(qǐng)求。
- NFS服務(wù)端的RPC服務(wù)找到對(duì)應(yīng)的已注冊(cè)的NFS daemon端口后,通知NFS客戶(hù)端的RPC服務(wù)。
- 此時(shí)NFS客戶(hù)端就可獲取到nfs服務(wù)端各個(gè)進(jìn)程的正確端口,然后通過(guò)客戶(hù)端rpc就直接與NFS服務(wù)器的rpc進(jìn)行存取數(shù)據(jù)了(rpc知道了nfs的具體端口,就可以實(shí)現(xiàn)遠(yuǎn)程調(diào)用,即傳輸)。
ps:有一點(diǎn)需要注意的是nfs并不是單獨(dú)存在的,而是由NFS-server,RPC,PORTMAP這三個(gè)模塊組成。
NFS-server只負(fù)責(zé)將數(shù)據(jù)通過(guò)以文件系統(tǒng)的方式共享出去,
并進(jìn)行登錄管理和權(quán)限管理,并不負(fù)責(zé)數(shù)據(jù)的傳輸,而數(shù)據(jù)的傳輸則有RPC來(lái)完成。
PORTMAP主要是來(lái)分配端口給statd,rquotad等進(jìn)程,NFS服務(wù)除了啟動(dòng)nfsd本身監(jiān)聽(tīng)的端口2049/tcp和2049/udp,
還會(huì)啟動(dòng)以上進(jìn)程來(lái)完成文件共享。
三、NFS安裝部署:
服務(wù)器和客戶(hù)端都裝好nfs服務(wù)組件:
yum -y install nfs-utils
配置服務(wù)端:
1、編輯/etc/exports文件
/data/lutixia 192.168.0.0/24(rw,sync)
/data/lutixia 是服務(wù)端想要共享出去的目錄,提前創(chuàng)建好。
192.168.0.0/24 表示這個(gè)網(wǎng)段都可以來(lái)掛載,也可以設(shè)置具體某個(gè)ip。
(rw,sync) 表示客戶(hù)端掛載服務(wù)端目錄后的權(quán)限,這里表示可讀可寫(xiě),
以及實(shí)時(shí)同步,還有其他選項(xiàng),后面介紹。
2、導(dǎo)出(廣播)編輯的文件,并啟動(dòng)rpc和nfs服務(wù)
exportfs -r
systemctl start rpcbind
systemctl start nfs
配置客戶(hù)端:
1、可用showmount搜索網(wǎng)絡(luò)中可用的共享文件
[root@localhost nfs]# showmount -e 192.168.0.187
Export list for 192.168.0.187:
/data/lutixia 192.168.0.0/24
# 192.168.0.187 服務(wù)端的IP
2、創(chuàng)建目錄,用于掛載
mkdir /mnt/nfs
3、掛載
mount -t nfs 192.168.0.187:/data/lutixia /mnt/nfs
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 20G 1.6G 18G 9% /
...
/dev/sda1 297M 108M 190M 37% /boot
192.168.0.187:/data/lutixia 20G 5.0G 15G 26% /mnt/nfs
#可以看到已經(jīng)掛載上了。
4、掛載完成之后,進(jìn)入目錄,可能會(huì)發(fā)現(xiàn)無(wú)法創(chuàng)建和修改文件。
[root@localhost nfs]# mkdir abc
mkdir: cannot create directory ‘a(chǎn)bc’: Permission denied
這主要是因?yàn)榭蛻?hù)端訪問(wèn)服務(wù)器時(shí),身份被壓縮成nobody,相對(duì)服務(wù)器文件系統(tǒng)來(lái)說(shuō),就是其他用戶(hù)。所以要想編輯,需要在服務(wù)端對(duì)文件授權(quán)或者更改exports文件,設(shè)置no_root_squash(不壓縮客戶(hù)端root身份)。
nfs服務(wù)端修改exports文件,加上no_root_squash參數(shù):
/data/lutixia 192.168.0.0/24(rw,sync,no_root_squash)
然后重新導(dǎo)出:
exportfs -r
nfs客戶(hù)端再次創(chuàng)建文件:
[root@localhost nfs]# mkdir abc
[root@localhost nfs]# ls
abc
服務(wù)端的/etc/exports文件詳解:
[root@localhost ~]# exportfs -v
/data/lutixia 192.168.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
其中:
rw:可讀可寫(xiě)
ro:僅可讀
sync:是指數(shù)據(jù)同步寫(xiě)入內(nèi)存和磁盤(pán)
root_squash:如果客戶(hù)端用root身份訪問(wèn),則被壓縮成nobody,權(quán)限也將受到限制。
no_root_squash:也就是不壓縮,客戶(hù)端使用root身份登錄,全有所有權(quán)限,很危險(xiǎn)。
all_squash:不管訪問(wèn)者是什么身份,包括root,全部壓縮至匿名用戶(hù)。
no_all_squash:保留訪問(wèn)用戶(hù)的身份uid以及gid,一般只能查看,不能修改,權(quán)限問(wèn)題,但是可以強(qiáng)制保存。
secure:nfs通過(guò)1024以下的安全TCP/IP端口發(fā)送
異常報(bào)錯(cuò):
卸載時(shí)報(bào)錯(cuò):
umount.nfs4: /mnt/nfs: device is busy
#使用以下命令強(qiáng)行解除掛載
umount -l /mnt/nfs
或者使用
#將會(huì)顯示使用這個(gè)模塊的pid
fuser -m /mnt/nfs
#將會(huì)直接kill那個(gè)pid
fuser -mk /mnt/nfs
以上簡(jiǎn)單幾個(gè)步驟即可實(shí)現(xiàn)nfs文件共享服務(wù)器的搭建部署,下一章節(jié)繼續(xù)聊聊nfs的自動(dòng)掛載技術(shù)。
獲取文章更新,以及常用軟件,可以關(guān)注公眾號(hào): 笨辦法學(xué)linux

image