NFS

什么是NFS

NFS就是Network FileSystem的縮寫。它最大的功能就是可以透過網(wǎng)絡(luò),讓不同的機器、不同的操作系統(tǒng)、可以彼此分享個別的檔案 。

什么是RPC

RPC是Remote Procedure Call的縮寫。客戶端就是通過遠(yuǎn)程調(diào)用RPC服務(wù)才知道該連接服務(wù)端的哪個端口號。RPC 最主要的功能就是在指定每個 NFS 功能所對應(yīng)的 端口號,并且回報給客戶端,讓客戶端可以連結(jié)到正確的端口上去。 那 RPC 又是如何知道每個 NFS 的埠口呢?這是因為當(dāng)服務(wù)器在啟動NFS 時會隨機取用數(shù)個端口,并主動的向 RPC 注冊,因此 RPC 可以知道每個端口對應(yīng)的 NFS 功能,然后 RPC 又是固定使用 port 111 來監(jiān)聽客戶端的需求并回報客戶端正確的端口。
NOTE:PRC要在NFS之前啟動,否則NFS會無法向RPC注冊。

NFS與PRC服務(wù)及文件系統(tǒng)相關(guān)性

NFS啟動的RPC damons

我們現(xiàn)在知道 NFS 服務(wù)器在啟動的時候就得要向 RPC 注冊,所以 NFS 服務(wù)器也被稱為 RPC server 之一。 那么 NFS 服務(wù)器主要的任務(wù)是進行文件系統(tǒng)的分享,文件系統(tǒng)的分享則與權(quán)限有關(guān)。 所以 NFS 服務(wù)器啟動時至少需要兩個 daemons ,一個管理客戶端是否能夠登入的問題, 一個管理客戶端能夠取得的權(quán)限。如果你還想要管理 quota 的話,那么 NFS 還得要再加載其他的 RPC 程序就是了。我們以較單純的 NFS 服務(wù)器來說:

  • rpc.nfsd:
    最主要的 NFS 服務(wù)器服務(wù)提供商。這個 daemon 主要的功能就是在管理客戶端是否能夠使用服務(wù)器文件系統(tǒng)掛載信息等, 其中還包含這個登入者的 ID 的判別喔!
  • rpc.mountd
    這個 daemon 主要的功能,則是在管理 NFS 的文件系統(tǒng)哩!當(dāng)客戶端順利的通過 rpc.nfsd 而登入服務(wù)器之后,在他可以使用 NFS 服務(wù)器提供的檔案之前,還會經(jīng)過檔案權(quán)限 (就是那個 -rwxrwxrwx 與 owner, group 那幾個權(quán)限啦) 的認(rèn)證程序!他會去讀 NFS 的配置文件 /etc/exports 來比對客戶端的權(quán)限,當(dāng)通過這一關(guān)之后客戶端就可以取得使用 NFS 檔案的權(quán)限啦!(注:這個也是我們用來管理 NFS 分享之目錄的權(quán)限與安全設(shè)定的地方哩!)
  • rpc.locked(非必要)
    這個玩意兒可以用在管理檔案的鎖定 (lock) 用途。為何檔案需要『鎖定』呢? 因為既然分享的 NFS 檔案可以讓客戶端使用,那么當(dāng)多個客戶端同時嘗試寫入某個檔案時, 就可能對于該檔案造成一些問題啦!這個 rpc.lockd 則可以用來克服這個問題。 但 rpc.lockd 必須要同時在客戶端與服務(wù)器端都開啟才行喔!此外, rpc.lockd 也常與 rpc.statd 同時啟用。
  • rpc.statd(非必要)
    可以用來檢查檔案的一致性,與 rpc.lockd 有關(guān)!若發(fā)生因為客戶端同時使用同一檔案造成檔案可能有所損毀時, rpc.statd 可以用來檢測并嘗試回復(fù)該檔案。與 rpc.lockd 同樣的,這個功能必須要在服務(wù)器端與客戶端都啟動才會生效。
NFS AUTH

NFS服務(wù)配置

服務(wù)端配置

安裝必要的包

使用NFS服務(wù)需要安裝兩個包:nfs-utils和rpcbind

yum install -y nfs-utils

使用yum安裝nfs-utils時會自動安裝rpcbind

配置/etc/export文件

# vim /etc/exports
/tmp 192.168.100.0/24(ro)  localhost(rw)  *(rw,no_root_squash)

在配置文件中增加內(nèi)容,每一行分為三部分:

  • 本地要共享出去的目錄
  • 允許訪問的主機
  • 權(quán)限選項
    每一行最前面是要分享出來的目錄,注意喔!是以目錄為單位啊! 然后這個目錄可以依照不同的權(quán)限分享給不同的主機,像鳥哥上面的例子說明是: 要將 /tmp 分別分享給三個不同的主機或網(wǎng)域的意思。記得主機后面以小括號 () 設(shè)計權(quán)限參數(shù), 若權(quán)限參數(shù)不止一個時,則以逗號 (,) 分開。且主機名與小括號是連在一起的喔!在這個檔案內(nèi)也可以利用 # 來批注呢。
    權(quán)限部分參數(shù)說明
  • rw 表示讀/寫
  • ro 表示只讀
  • sync 表示數(shù)據(jù)同步寫入內(nèi)存緩沖區(qū)與磁盤中,效率較低,但可以保證數(shù)據(jù)的一致性(適合于小文件傳輸)
  • async 表示數(shù)據(jù)先暫時放于內(nèi)存,而非直接寫入硬盤,等到必要時才寫入磁盤(適合于大文件傳輸)
  • no_root_squash 表示root用戶對這個共享的目錄擁有至高的控制權(quán)(不安全,不建議使用)
  • root_squash 表示root用戶對這個共享的目錄的權(quán)限和普通用戶一樣。
  • all_squash 表示不管使用NFS的用戶是誰,其身份都會被限定成一個指定的普通用戶。
  • no_all_squash 表示所有的普通用戶使用nfs都不使用權(quán)限壓縮(默認(rèn)設(shè)置)
  • anonuid/anongid 要和root_squash以及all_squash選項一同使用,用于指定使用NFS的用戶被限定后的uid和gid

啟動NFS服務(wù)

在啟動NFS服務(wù)之前,需要先啟動rpcbind

service rpcbind start
service nfs start
OR
systemctl start rpcbind.service
systemctl stop nfs.service

關(guān)閉NFS服務(wù)

systemctl stop rpcbind.service
systemctl stop nfs.service

客戶端掛載NFS

查看服務(wù)器共享的目錄

showmount -e 服務(wù)器ip地址

會得到如下結(jié)果:

Export list for 192.168.0.1:
/data *

在客戶端掛載NFS

# mount -t nfs 服務(wù)器ip地址:服務(wù)器共享目錄 掛載點
mount -t nfs 192.168.0.1:/data /mnt

其中-t nfs指定掛載的類型為nfs

查看是否掛載成功

命令df用于查看已掛載磁盤的總?cè)萘浚褂萌萘浚S嗳萘康取?/p>

#df -h     

-h 表示使用合適的單位顯示

解除掛載

umount用于解除掛載,格式如下:

# umount 已掛載的目錄

如果遇到:umount.nfs:已掛載目錄:device is busy
可以添加-l參數(shù),如下:

# umount -l 已掛載目錄

選項-l并不是馬上umount,二是在該目錄空閑后再umount,即延遲掛載。

開機自動掛載

方法A:
/etc/fstab里添加如下內(nèi)容:

# 服務(wù)器ip地址:共享的目錄 客戶端掛載點 nfs defaults 1 1
192.168.0.1:/data/    /mnt   nfs     defaults        0 0

第一個1表示備份文件系統(tǒng),第二個1表示從/分區(qū)的順序開始fsck磁盤檢測,0表示不檢測。
方法B:
將手動掛載的命令加入到/etc/rc.local中。
命令exportfs
命令參數(shù):

  • -a表示全部掛載或者卸載
  • -r表示重新掛載
  • -u表示卸載某一目錄
  • -v表示顯示共享的目錄
    使用命令:
    修改配置文件/etx/exports后,使用exportfs命令掛載不需要重啟NFS服務(wù)
# exportfs -arv
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容