簡介
NFS(Network File System)FS是由Sun開發並發展起來的一項用於在不同機器,不同操作系統之間通過網絡共享數據。客戶端用mount命令把遠程的NFS文件系統掛載到本地即可,操作遠程服務端的文件跟操作本地的文件幾乎沒什麼區別。
一、NFS工作原理與RPC服務的關係
二、NFS服務的安裝配置及文件介紹
三、客戶端的使用
一、NFS工作原理與RPC服務的關係
1、NFS的工作原理如下圖:
1)、訪問一個本地的文件還是NFS文件對客戶端來說是透明的,當文件打開時,由內核決定。文件打開後,內核將本地文件的所有引用傳遞給-->本地文件訪問框中,而將一個NFS文件的所有引用傳遞給-->NFS客戶端框中。
2)、NFS客戶端通過其TCP/IP模塊向NFS服務器發送RPC請求,NFS主要使用UDP,最新的也可以使用TCP。
3)、NFS服務器在端口2049接收作爲UDP數據包的客戶端請求,儘管NFS可以被視爲使用端口映射,允許服務器使用一個臨時端口,但大多數都是直接指定UDP2049端口。
4)、當NFS服務器收到一個客戶端請求時,它將這個請求傳遞給本地文件訪問例程,然後訪問服務器上的一個本地的磁盤文件。
5)、NFS服務器需花一定時間來處理一個客戶端請求,訪問本地文件系統一般情況也需一部分時間,在這段時間內,服務器不應該阻止其他客戶端的請求。爲了實現這一功能,大多數NFS服務器都是多線程--服務器內核中實際上有多個NFS服務器在NFS本身的加鎖管理程序中運行,具體根據操作系統。大多數類Unix內核不是多線程,一個共同的技術就是啓動一個用戶進程(常爲:nfsd)的多個實例。這個實例執行一個系統調用,使其作爲一個內核進程保留在操作系統內核中。
6)、在客戶端主機上,NFS客戶端需花一定時間來處理一個用戶進程的請求,NFS客戶端向服務器主機發出一個RPC調用 ,然後等待服務器應答,爲了給使用NFS客戶端主機上的用戶進程提供更多併發性,在客戶端內核中一般運行多個NFS客戶端,同樣具體實現也根據操作系統。
2、RPC服務
RPC最主要的功能就是指定每個NFS功能所對應的端口號,並且響應給客戶端,讓客戶端可以連接到正確的端口上。當服務器在啓動NFS時會隨機選用數個端口,並主動地向RPC註冊。因此RPC可以知道每個端口對應的NFS功能。然後RPC固定使用端口111來監聽客戶端的請求並回報客戶端正確的端口,所以可以讓NFS的啓動更爲容易。注意:啓動NFS之前,要先啓動RPC;否則NFS會無法向RPC註冊。另外,重新啓動RPC時原本註冊的數據會不見,因此RPC重新啓動後它管理的所有程序都需要重新啓動以重新向RPC註冊。
客戶端向NFS服務器請求數據的過程:
(1)客戶端會向服務器端的RPC(port 111)發出NFS文件存取功能的詢問請求。
(2)服務器端找到對應的已註冊的NFS daemon端口後會回報給客戶端。
(3)客戶端了解正確的端口後,就可以直接與NFS守護進程來連接
二、NFS服務器的安裝配置與文件介紹
1、NFS服務器的安裝
服務器系統:CentOS6.4.x86_64
IP規劃:NFS服務器IP地址:172.16.14.1 NFS客戶端IP地地址:172.16.14.2
需要用到的軟件包:
[root@localhost ~]# yum -y install nfs-utils rpcbind #YUM安裝NFS服務端 rpcbind-0.2.0-11.el6.x86_64.rpm #NFS服務器所依賴的軟件包 nfs-utils-1.2.3-36.el6.x86_64.rpm #NFS軟件包
查看軟件是否安裝:
2、文件介紹
NFS服務腳本:/etc/rc.d/init.d/nfs
NFS主配置文件:/etc/sysconfig/nfs
配置文件:/etc/exports 默認此文件爲空,需手動添加
主配置文件書寫格式: Export HOST(Options) Export:共享的目錄 HOST:主機地址 Options:選項
Options: rw: #讀寫權限 ro: #只讀權限 secure: #要求客戶端請求端口小於1024默認開啓 insecure: #NFS通過1024以上的端口發送 async: #異步寫入,性能好,數據可靠性差 sync: #同步寫入,性能差,數據可靠性高 wdelay: #寫入延遲 no_wdelay: #不做寫入延遲 hide: #在NFS共享目錄中不共享其子目錄 nohide: #共享NFS目錄的子目錄 crossmnt: #交叉掛載 no_acl: #關閉nfs支持acl功能 root_squash: #壓縮root用戶權限爲nfsnobody no_root_squash: #不壓縮root用戶的權限 all_squash: #所有的用戶都壓縮權限 anonuid=nfsuser,anongid=nfsgroup: #指定用戶帳號做匿名用戶帳號
3、服務端使用命令:
showmount -a: 顯示當前主機所共享的NFS文件系統中,有哪些已經被客戶端掛載 -d: 顯示當前主機所共享的NFS文件系統中,每個掛載連接 exportfs -r: 重新導出 -a: 操作所有文件系統 -u: 取消導出 -v: 顯示詳細信息 -ra:重新共享所有目錄 -au:卸載所有共享目錄 rpcinfo -p: 查看NFS註冊使用的端口
4、啓動NFS服務器
注:RHEL5系統不是"rcpbind"服務,而是"portmap"服務.請大家做的時候注意.
5、配置NFS服務器
[root@localhost ~]# mkdir /nfs_server #創建nfs服務器端共享目錄 [root@localhost ~]# cat > /etc/exports << EOF > /nfs_server 172.16.0.0/16(rw,root_squash) > EOF #共享nfs_server目錄,只允許172.16.0.0網段訪問,並且有可寫權限,壓縮root用戶的權限
三、客戶端的使用
1、查看NFS服務器共享了哪些目錄
[root@localhost ~]# showmount -e 172.16.14.1 #顯示服務器共享了哪些文件系統列表 Export list for 172.16.14.1: /nfs_server 172.16.0.0/16 #NFS服務器共享的目錄
2、客戶端掛載使用NFS文件系統
[root@localhost ~]# mkdir /nfs_client #創建客戶端掛載點 [root@localhost ~]# mount -t nfs 172.16.14.1:/nfs_server /nfs_client #掛載NFS文件系統.-t:指定文件系統類型 [root@localhost ~]# mount | grep nfs_client #查看是否掛載成功 172.16.14.1:/nfs_server on /nfs_client type nfs (rw,vers=4,addr=172.16.14.1,clientaddr=172.16.14.2)
3、在NFS服務器和客戶端分別創建普通用戶"centos"與"redhat",這裏需要說明一下,NFS做驗證是基於用戶ID,用戶名相同是不能訪問的,必須在ID相同的情況下可以才訪問."root"用戶默認權限是被壓縮的.下面我們來做一下測試如:
1)、先查看NFS服務器"nfsuser"用戶是否對共享文件夾"/nfs_server"有可寫權限,並設置好權限:
2)、在NFS服務器端和客戶端分別創建一個用戶爲"nfsuser",且用戶ID不同,如下圖:
3)、在客戶端使用"nfsuser"用戶來驗證是否能寫入,且保證服務端沒有用戶ID爲601的,如下圖:
4)、分別在NFS服務器端與客戶端創建"centos"和"redhat"用戶,且用戶UID相同,如下圖:
5)、先查看NFS服務器"centos"用戶是否對共享文件夾"/nfs_server"有可寫權限,並設置好權限:
6)、在客戶端使用"redhat"用戶驗證是否能寫入;並在服務器端與客戶端查看文件的屬主及屬組,如下圖:
NFS網絡文件系統到此結束,後續會添加一些其他認證功能;敬請關注...