Linux NFS 詳解


目錄:

     1、了解NFS服務

     2、NFS主要文件

     3、NFS安裝

     4、NFS配置

     5、NFS客戶端配置

     6、固定NFS端口

     7、Windows掛載NFS

 

1、了解NFS服務

      NFS是Network  File System(網絡文件系統)。主要功能是通過網絡讓不同的服務器之間可以共享文件或者目錄。NFS客戶端一般是應用服務器(比如web,負載均衡等),可以通過掛載的方式將NFS服務器端共享的目錄掛載到NFS客戶端本地的目錄下。

      因為 NFS 支持的功能相當的多,而不同的功能都會使用不同的程序來啟動, 每啟動一個功能就會啟用一些端口來傳輸數據,因此, NFS 的功能所對應的端口才沒有固定住, 而是隨機取用一些未被使用的小於 1024 的埠口來作為傳輸之用。但如此一來又造成客戶端想要連上服務器時的困擾, 因為客戶端得要知道服務器端的相關埠口才能夠聯機吧!

     此時我們就得需要遠程過程調用 (RPC) 的服務啦!RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,並且回報給客戶端,讓客戶端可以連結到正確的埠口上去。 那 RPC 又是如何知道每個 NFS 的埠口呢?這是因為當服務器在啟動 NFS 時會隨機取用數個埠口,並主動的向 RPC 注冊,因此 RPC 可以知道每個埠口對應的 NFS 功能,然后 RPC 又是固定使用 port 111 來監聽客戶端的需求並回報客戶端正確的埠口, 所以當然可以讓 NFS 的啟動更為輕松愉快了。

      NFS在文件傳送過程中依賴與RPC(遠程過程調用)協議。NFS本身是沒有提供信息傳送的協議和功能的,但是能夠用過網絡進行圖片,視頻,附件等分享功能。只要用到NFS的地方都需要啟動RPC服務,不論是NFS的服務端還是客戶端。

      NFS和RPC的關系:可以理解為NFS是一個網絡文件系統(比喻為租房的房主),而RPC是負責信息的傳輸(中介),客戶端(相當於租房的租客)。

 

2、NFS主要文件

要設定好 NFS 服務器我們必須要有兩個軟件才行,分別是:

    • RPC 主程序:rpcbind
      就如同剛剛提的到,我們的 NFS 其實可以被視為一個 RPC 服務,而要啟動任何一個 RPC 服務之前,我們都需要做好 port 的對應 (mapping) 的工作才行,這個工作其實就是『 rpcbind 』這個服務所負責的!也就是說, 在啟動任何一個 RPC 服務之前,我們都需要啟動 rpcbind 才行! (在 CentOS 5.x 以前這個軟件稱為 portmap,在 CentOS 6.x 之后才稱為 rpcbind 的!)
    • NFS 主程序:nfs-utils
      就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其他相關 documents 與說明文件、執行文件等的軟件!這個就是 NFS 服務所需要的主要軟件啦!一定要有喔!

 NFS 這個咚咚真的是很簡單,上面我們提到的 NFS 軟件中,配置文件只有一個,執行檔也不多, 記錄文件也三三兩兩而已吶!趕緊先來看一看吧!

    • 主要配置文件:/etc/exports
      這個檔案就是 NFS 的主要配置文件了!不過,系統並沒有默認值,所以這個檔案『 不一定會存在』,你可能必須要使用 vim 主動的建立起這個檔案喔!我們等一下要談的設定也僅只是這個檔案而已吶!

    • NFS 文件系統維護指令:/usr/sbin/exportfs
      這個是維護 NFS 分享資源的指令,我們可以利用這個指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸除或重新分享等等,這個指令是 NFS 系統里面相當重要的一個喔!至於指令的用法我們在底下會介紹。

    • 分享資源的登錄檔:/var/lib/nfs/*tab
      在 NFS 服務器的登錄文件都放置到 /var/lib/nfs/ 目錄里面,在該目錄下有兩個比較重要的登錄檔, 一個是 etab ,主要記錄了 NFS 所分享出來的目錄的完整權限設定值;另一個 xtab 則記錄曾經鏈接到此 NFS 服務器的相關客戶端數據。

    • 客戶端查詢服務器分享資源的指令:/usr/sbin/showmount
      這是另一個重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。這個 showmount 可以用來察看 NFS 分享出來的目錄資源喔!

3、NFS安裝

# yum -y install nfs-utils rpcbind

需要先啟動rpcbind服務
# systemctl enable nfs
# systemctl enable rpcbind
# systemctl start rpcbind
# systemctl start nfs

 

4、NFS配置

# mkdir /nfsfile      #如果在配置文件中使用了all_squash權限壓縮,需要給nfsfile文件授權:# chown nfsnobody /nfsfile

# cat /etc/exports
/nfsfile 10.6.0.0/8(rw,all_squash,sync)

 

參數 內容說明
rw|ro
該目錄分享的權限是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與文件系統的 rwx 及身份有關。
sync|async 
 sync 代表數據會同步寫入到內存與硬盤中,async 則代表數據會先暫存於內存當中,而非直接寫入硬盤!
 no_root_squash|root_squash 客戶端使用 NFS 文件系統的賬號若為 root 時,系統該如何判斷這個賬號的身份?預設的情況下,客戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對服務器的系統會較有保障。但如果你想要開放客戶端使用 root 身份來操作服務器的文件系統,那么這里就得要開 no_root_squash 才行!
all_squash
不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名用戶,通常也就是 nobody(nfsnobody) 啦!
anonuid|anongid    
anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名用戶的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是群組的 GID 啰。

 

 配置生效

# exportfs -rv

查看rpc使用狀況

# rpcinfo -p localhost

選項與參數:
-p :針對某 IP (未寫則預設為本機) 顯示出所有的 port 與 porgram 的信息;
-t :針對某主機的某支程序檢查其 TCP 封包所在的軟件版本;
-u :針對某主機的某支程序檢查其 UDP 封包所在的軟件版本;

在你的 NFS 服務器設定妥當之后,我們可以在 server 端先自我測試一下是否可以聯機喔!就是利用 showmount 這個指令來查閱!

# showmount -e localhost
Export list for localhost:
/nfsfile 10.6.0.0/8
選項與參數:
-a :顯示目前主機與客戶端的 NFS 聯機分享的狀態;
-e :顯示某部主機的 /etc/exports 所分享的目錄數據。

 

5、nfs客戶端配置

# yum -y install nfs-utils
# mkdir /nfsmnt

# showmount -e 10.6.2.198 #查看NFS共享的目錄
Export list for 10.6.2.198:
/nfsfile 10.6.0.0/8

為了提高NFS的穩定性,使用TCP協議掛載,NFS默認用UDP協議

# mount -t nfs 10.6.2.198:/nfsfile /nfsmnt -o proto=tcp -o nolock

 

6、固定NFS端口

為了方便配置防火牆,需要固定nfs服務端口,NFS啟動時會隨機啟動多個端口並向RPC注冊,這樣如果使用iptables對NFS端口進行限制就會有點麻煩,可以更改配置文件固定NFS服務相關端口。  

# rpcinfo -p localhost
# vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
# service nfs restart     #再使用:# rpcinfo -p localhost 就可以查看到端口了。

 

7、Windows 掛載NFS

安裝nfs客戶端:

查看遠程服務器上的 NFS 共享目錄,運行命令提示符:
> showmount -e 10.6.2.198

導出列表在 10.6.2.198:

 

/nfsfile 10.6.0.0/8

 
掛載 NFS 目錄
> mount 10.6.2.198:/nfsfile N:
 
卸載 NFS 目錄
> umount -a
 
掛載匿名共享的 NFS 目錄需要添加2個注冊表項,然后重啟。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default]
"AnonymousUid"=dword:00000000
"AnonymousGid"=dword:00000000
這里的 Uid 和 Gid 就是遠程服務器上 NFS 共享目錄屬主的 uid 和 gid
# id
uid=0(root) gid=0(root)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM