一、NFS服務簡介
NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位於服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。
NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的文件系統”,它是獨立於操作系統,容許不同硬件及操作系統的系統共同進行文件的分享。
NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其他系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因爲NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啓動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麼理解RPC和NFS的關係:NFS是一個文件系統,而RPC是負責負責信息的傳輸。
NFS協議提供了一種遠程文件系統規範:
二、系統環境
系統平臺: CentOS 7.3
NFS Server: 192.168.8.88
關閉防火牆
# systemctl stop firewalld --臨時關閉防火牆 # systemctl disable firewalld --永久關閉防火牆 |
關閉selinux
臨時關閉:
# setenforce 0 |
永久關閉:
# vim /etc/selinux/config SELINUX=disabled --將enforcing改爲disabled |
# reboot --重啓系統永久生效 |
三、安裝NFS服務
NFS的安裝是非常簡單的,只需要兩個軟件包即可,而且在通常情況下,是作爲系統的默認包安裝的。
nfs-utils:包含NFS服務端守護進程、NFS客戶端的工具和NFS命令與控制腳本
rpcbind:提供RPC的端口映射的守護進程及其相關文檔、執行文件等
1. 查看系統中是否安裝了對應的軟件
# rpm -qa nfs* && rpm -qa rpcbind |
2. 使用yum工具安裝nfs、rpcbind軟件包
# yum -y install nfs-utils rpcbind --如果已經安裝過了,所以顯示“無須任何處理” |
四、配置NFS服務
NFS服務的配置相對比較簡單,只需要在相應的配置文件中進行設置,然後啓動NFS服務即可。
NFS服務的常用目錄:
/etc/exports NFS服務的主要配置文件
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 客戶端的查看命令
/var/lib/nfs/etab 記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab 記錄曾經登錄過的客戶端信息
NFS服務的主配置文件爲 /etc/exports,NFS使用/etc/exports定義需要共享的目錄及訪問對象的控制,NFS在默認情況下不共享任何目錄(/etc/exports文件爲空)當需要共享目錄時需要手動設置。
/etc/exports文件內容格式:
# <共享目錄> [客戶端1 選項(訪問權限,用戶映射,其他)] [客戶端2 選項(訪問權限,用戶映射,其他)] |
1. 共享目錄
共享目錄是指NFS系統中需要共享給客戶端使用的目錄。
2. 客戶端
客戶端是指網絡中可以訪問這個NFS共享目錄的計算機。
客戶端常用的指定方式:
指定ip地址的主機:192.168.8.200
指定子網中的所有主機:192.168.8.0/24 或192.168.8.0/255.255.255.0
指定域名的主機:www.domain.com
指定域中所有的主機: *.domain.com
所有主機: *
3. 選項
控制共享目錄的訪問權限和用戶映射等,如果選項不止一個,以逗號“,”隔開。
編輯格式中的選項用來設置共享目錄的訪問權限、用戶映射等。
(1)訪問權限選項:
ro: 設置共享目錄爲只讀的權限
rw: 設置共享目錄爲可讀寫的權限
(2)用戶映射選項:
all_squash:將遠程訪問的所有普通用戶及所屬組都映射爲匿名用戶或用戶組,相當於使用nobody用戶訪問該共享目錄(此參數爲默認設置);
no_all_squash:與all_squash相反;
root_squash:將root用戶及所屬組都映射爲匿名用戶或用戶組(默認設置);
no_root_squash:與rootsquash相反,即以root身份訪問;
anonuid=xxx:將遠程訪問的所有用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx);
anongid=xxx:將遠程訪問的所有用戶組都映射爲匿名用戶組賬戶,並指定該匿名用戶組賬戶爲本地用戶組賬戶(GID=xxx)。
(3)其它選項:
sync:將數據同步寫入內存緩衝區與磁盤中,效率低,但可以保證數據的一致性;
async:將數據先保存在內存緩衝區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
secure:限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置);
insecure:允許客戶端從大於1024的tcp/ip端口連接服務器;
subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率。
五、NFS服務的啓動與停止
對/etc/exports文件進行了正確的配置以後,就可以啓動NFS服務器了。
1. 啓動NFS服務
爲了使NFS服務器能正常工作,需要啓動rpcbind和nfs兩個服務。
# systemctl start rpcbind.service # systemctl start nfs.service |
2. 查詢NFS服務狀態
# systemctl status rpcbind.service # systemctl status nfs.service |
3. 停止NFS服務
需要停止NFS服務運行時,停止nfs服務即可,因爲對於系統中有其他服務(如NIS)需要使用,所以不需要停止rpcbind服務。
# systemctl stop nfs.service |
4. 設置NFS服務的自動啓動狀態
對於實際的應用系統,每次啓動CentOS系統後都手工啓動nfs服務是不現實的,需要設置系統在指定的運行級別自動啓動rpcbind和nfs服務。
# systemctl enable rpcbind.service # systemctl enable nfs-server.service # systemctl is-enabled nfs-server.service --查看nfs服務是否在啓動系統時啓用 |
六、NFS服務配置實例
在/etc/exports文件中,每一行代表一個共享目錄,並且描述了該目錄如何被共享
# vim /etc/exports |
/share *(ro) # /share爲共享目錄,所有主機具有隻讀權限,遠程訪問的所有用戶以及所屬組都映射爲匿名用戶或用戶組 /test 192.168.8.12(rw,no_root_squash) 192.168.8.13(ro) # /test爲共享目錄,IP爲192.168.8.12主機就有可讀可寫權限,並以root身份訪問,ip爲192.168.8.13的主機具有隻讀的權限,並以匿名用戶的身份訪問 /data 192.168.8.0/24(rw,anonuid=1001,anongid=100) # /data爲共享目錄,192.168.8.0網段的所有主機具有可讀可寫權限,並以匿名用戶身份訪問,且指定其uid爲1001,gid爲100
NFS服務端:
1. 將NFS 服務端的/share共享給192.168.8.0/24網段,權限爲讀寫。
# vim /etc/exports /share 92.168.8.0/24(rw) # mkdir /share --創建共享目錄 |
2. 重新啓動NFS服務
# systemctl restart rpcbind.service # systemctl restart nfs.service 確認NFS是否已經啓動 # rpcinfo -p --下面的顯示錶示已經啓動 |
3. 服務端使用showmount或者exportfs命令查詢NFS的共享目錄
# showmount -e 127.0.0.1 --查看自己共享的目錄 Export list for 127.0.0.1: /share 192.168.8.0/24
或者 # exportfs /share 192.168.8.0/24
# showmount -a --顯示已經與客戶端連接上的目錄信息 |
NFS客戶端:
1. 查看NFS服務器共享列表
客戶端通過showmount命令可以查看NFS服務器上所有的共享目錄,以便掛載這些共享目錄,其命令格式如下:
# showmount -e NFS服務端IP # showmount -e 192.168.8.88 --這裏192.168.8.88是NFS服務器的IP Export list for 192.168.8.88: /share 192.168.8.0/24 |
2. 掛載NFS服務端的共享目錄
命令格式:
# mount NFS服務器IP:/共享目錄 /本地掛載點目錄 # mkdir /local --創建掛載目錄 # mount 192.168.8.88:/share /local --將共享目錄掛載到本地的/local目錄 # mount | grep nfs --查看是否掛載成功 |
掛載成功後,查看文件是否和服務端一致
3. 測試共享文件的訪問權限
服務器:
# cd /share # cp /etc/passwd /share/test |
客戶端:
# ls /local # cat /local/test --可以查看到/local/test中的內容 # echo "123" > /local/test --無法重定向,權限不夠,因爲默認是以匿名用戶身份訪問的 |
服務器:(再來到服務器修改/etc/exports中修改設置)
# vim /etc/exports /share 192.168.8.0/24(rw,no_root_squash) --改爲以root身份訪問 或者 # chmod 777 -R /share --共享目錄本身的寫權限沒有開放給其他用戶 # systemctl restart nfs.service --每次改動了/etc/exports文件都要重啓nfs服務 |
客戶端:
# echo "123" > /local/test --可以重定向 |
4. 客戶端卸載已掛載的NFS共享目錄
# umount /local |
七、啓動自動掛載NFS文件系統
在客戶端添加配置文件,進行開機自動掛載NFS文件系統。
# vim /etc/fstab 192.168.8.88:/share /local nfs defaults 0 0 |
保存退出,重啓系統。可以發現共享目錄已經自動掛載。
八、相關命令
1. exportfs
如果我們在啓動了NFS之後又修改了/etc/exports,是不是還要重新啓動nfs呢?這個時候我們就可以用exportfs 命令來使改動立刻生效,該命令格式如下:
# exportfs [-aruv]
-a 全部掛載或卸載 /etc/exports中的內容
-r 重新讀取/etc/exports 中的信息 ,並同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸載單一目錄(和-a一起使用爲卸載所有/etc/exports文件中的目錄)
-v 在export的時候,將詳細的信息輸出到屏幕上
例:
# exportfs -au --卸載所有共享目錄 # exportfs -rv --重新共享所有目錄並輸出詳細信息 |
2. nfsstat
用於查看列出NFS的運行狀態。
3. rpcinfo
查看rpc執行信息,可以用於檢測rpc運行情況的工具,利用rpcinfo -p 可以查看出rpc開啓的端口所提供的程序有哪些。其中nfs的端口是2049,rpcbind的端口是111,其餘則是rpc開啓的。
4. showmount
-a 顯示已經於客戶端連接上的目錄信息
-e IP或者hostname 顯示此IP地址共享的目錄