NFS簡介NFS(Network File System)網絡文件系統,由NFS伺服器端和NFS客戶端構成,通過網絡(一般是區域網)使不同主機系統,可以彼此共享文件。NFS客戶端mount掛載NFS伺服器端共享的文件目錄到NFS客戶端本地系統的某一個掛載點下,NFS客戶端本地訪問掛載點的共享目錄時,像是訪問本地的磁碟分區或目錄一樣,實際上訪問的是掛載的NFS伺服器目錄。
RPC遠程過程調用
NFS伺服器端和客戶端之間的數據傳輸通過相對應網絡埠,由於NFS支持的功能比較多,不同的功能會使用不同的程序啟動,每啟動一個功能就會啟用一些埠來傳輸數據,因此NFS的功能對應的埠不固定,那麼造成NFS伺服器和NFS客戶端數據傳輸的通信障礙(NFS客戶端必須知道NFS伺服器端的數據傳輸埠才能通信進行數據交互)則需要RPC(Remote procedure Call)遠程過程調用來統一管理NFS埠,並且統一對外的埠是111,RPC會記錄NFS埠的信息,這樣就可以通過RPC實現NFS伺服器和NFS客戶端的埠通信。(RPC指定每個NFS功能所對應的埠,並且通知客戶端,使客戶端可連接到相應的埠上)
NFS工作流程
先啟動NFS伺服器端的RPC服務並開啟111埠,然後啟動NFS伺服器端,NFS會隨機使用一些埠,然後NFS就向PRC註冊這些埠,RPC記錄這些埠等待客戶端RPC的請求,啟動客戶端RPC,向伺服器端PRC請求伺服器端NFS埠,伺服器端的RPC將之前記錄的NFS埠信息告知客戶端,客戶端通過獲取到的NFS埠來建立和伺服器端的NFS連接進行數據傳輸。
注:在啟動伺服器端NFS前啟動RPC服務,否則伺服器端NFS無法向RPC註冊;如果PRC服務重啟,之前註冊好的NFS埠數據會全部丟失。
搭建NFS共享存儲服務1、查看系統環境準備相應的安裝包
部署NFS服務需要NFS和RPC軟體包
linux-szge:~ # uname -a
Linux linux-szge 3.0.76-0.11-default #1 SMP Fri Jun 14 08:21:43 UTC 2013 (ccab990) x86_64 x86_64 x86_64 GNU/Linux
linux-szge:~ # cat /etc/issue
Welcome to SUSE Linux Enterprise Server 11 SP3 (x86_64) - Kernel \r (\l).
註:內核和作業系統不同,使用的安裝包的版本也有差異,故需要根據作業系統和內核准備相應的軟體包
2、檢查是否安裝NFS和RPC
linux-szge:~ # rpm -qa | egrep "nfs|rpcbind"
3、安裝NFS和RPC
linux-szge:~ # zypper install rpcbind*
linux-szge:~ # zypper install nfs*
linux-szge:~ # rpm -qa | egrep "nfs|rpcbind"
nfsidmap-0.25-0.11.29
nfs-doc-1.2.3-18.29.1
rpcbind-0.1.6+git20080930-6.18.1
nfs-client-1.2.3-18.31.1
nfs-kernel-server-1.2.3-18.29.1
或者到下載相應的源碼包或rpm包安裝
註:伺服器端和客戶端本地都需要安裝NFS和RPC
4、啟動RPC
linux-szge:~ # service rpcbind start 啟動RPC
linux-szge:~ # netstat -anpp | grep rpcbind 查看監聽的埠是111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2641/rpcbind
linux-szge:~ # rpcinfo -p localhost 未啟動NFS前查看NFS服務向RPC註冊的埠信息
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
...
詳情請看rpcinfo --help詳解
linux-szge:~ # chkconfig rpcinfo on rpcinfo設置為開機自啟動
linux-szge:~ #chkconfig --list rpcinfo
rpcinfo 0:off 1:off 2:off 3:on 4:off 5:on 6:off
詳情請看chkconfig --help詳解
5、配置及啟動NFS
配置NFS伺服器端
linux-szge: ~ # mkdir /data/lml;chmod 666 /data/lml/ 創建共享目錄/data/lml並設置權限
linux-szge:~ # vim /etc/exports 編輯NFS主要配置文件exports(默認是空的)
/data/lml 172.30.3.73(rw,sync,no_root_squash,no_all_squash) 172.30.3.73可讀寫共享目錄/data/lml
註:在172.30.3.73和(之間不能有空格,否則nfs寫入時會報錯read-only file system
NFS配置exports文件格式
註:客戶端地址可以寫IP,網段,主機名
NFS常用配置參數
啟動NFS伺服器端
linux-szge:~ # service nfsserver start 啟動伺服器端NFS
註:如果已啟動伺服器端NFS,後修改了/etc/exports配置,需要重新加載NFS或者重啟RPC和NFS
linux-szge:~ # service nfsserver reload 重新加載伺服器NFS
linux-szge:~ # exportfs -rv 重新加載伺服器NFS(r表示重啟,v表示顯示export的選項)
linux-szge:~ # service rpcbind restart 先重啟RPC
linux-szge:~ # service nfsserver restart 後重啟NFS
linux-szge:~ # rpcinfo -p localhost 啟動NFS後查看RPC註冊的埠信息
program vers proto port service
100000 4 tcp 111 portmapper
...
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
...
linux-szge:~ # chkconfig nfs on NFS設置為開機自啟動
linux-szge:~ #chkconfig --list nfs
nfs 0:off 1:off 2:off 3:on 4:off 5:on 6:off
伺服器端測試是否可聯機
linux-szge:~ # showmount -e 測試是否可聯機
Export list for linux-szge:
/data/lml 172.30.3.73
詳情請看showmount --help詳解
配置NFS客戶端
linux: ~ # mkdir /getshare 創建共享目錄
linux:~ # service rpcbind restart先重啟RPC
linux:~ # showmount -e 172.30.1.199 掃描伺服器端NFS目錄(172.30.1.199是伺服器端NFS的IP)
mount掛載NFS伺服器端的共享目錄/data/lml到客戶端本地的/getshare下
linux:~ # mount -t nfs 172.30.1.199:/data/lml /getshare
掛載格式
mount -t nfs 主機名或IP:/共享目錄 /掛載點
linux:~ # df 查看掛載情況
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 28G 11G 73% /
...
172.30.1.199:/data/lml 26G 8K 26G 1% /getshare
註:訪問本地的/getshare相當於訪問172.30.1.199的共享目錄/data/lml
6、測試NFS能否正常使用
172.30.3.73客戶端
掛載點創建文件test
linux:~ #cd /getshare ;echo "llalala" > test;ls -l
-rw-r--r-- 1 root root 8 May 7 15:28 test
172.30.1.199伺服器端
共享目錄查看是否有掛載點創建的test文件,有表示NFS可正常使用
linux-szge:~ # cd /data/lml;ls -l
-rw-r--r-- 1 root root 8 May 7 15:28 test