1. 程式人生 > >十一、NFS服務器配置和管理

十一、NFS服務器配置和管理

nfs配置、文件共享、autofs

11.1、NFS簡介

NFS是Network File System的縮寫,中文名為網絡文件系統,它是一種能使安裝了不同操作系統的計算機之間通過網絡進行共享的網絡協議。由於NFS可以快速地進行文件共享,有效地提供資源的利用率,節省本地磁盤空間,方便集中管理,所以應用廣泛。

NFS采用C/S工作模式,NFS服務器設置好共享文件目錄後,其他的NFS客戶端就可以把這個由遠端服務器共享出來的目錄到本地系統上的某個自行定義的掛載點,並進行使用。

技術分享

NFS支持的功能很多,而不同的功能由不同的程序來實現,每啟動一個功能就需要打開一些端口進行數據傳輸。所以與其他大部分的C/S結構不同,NFS並不是監聽一些固定端口,而是隨機采用一些未被使用的小於1024的端口作為數據傳輸。但是客戶端需要連接服務器時首先必須知道服務端程序提供服務的端口,而NFS端口的隨機性為客戶端連接帶來了麻煩,為此NFS使用了遠程過程調用RPC(Remote Procedure Call)來解決。

當NFS啟動時,它會隨機地使用服務器上未被使用的小於1024的端口來為服務端口,然後會把端口號、進程ID和監聽IP等信息在RPC服務中註冊。這樣一來,RPC服務就知道各個NFS功能對應的服務端口,當客戶端通過固定端口111連接上RPC服務後,RPC就會把NFS各個功能所對應的端口號返回給客戶端。至此,客戶端就可以通過這些端口直接與NFS進行通信。

技術分享

11.2、NFS服務器安裝與配置

NFS服務器主要設計的軟件有rpcbind和nfs-utils,它們分別是RPC和NFS主程序,關於這兩個軟件包,其作用分別為:

rpcbind:監聽端口111/tcp, 111/udp,最主要的功能就是在指定每個NFS功能所對應的端口號,並且匯報給客戶端,讓客戶端可以連結到正確的端口上去。

nfs-utils:NFS的主程序,監聽端口2049/tcp, 2049/udp,包括提供NFS服務所需要的rpc.nfsd和rpc.mountd兩個守護進程和其他相關配置文件。

[[email protected] home]# yum install -y rpcbind nfs-utils   #yum安裝軟件包
[[email protected] home]# rpm -ql rpcbind      #查看文件的具體安裝路徑
/etc/rc.d/init.d/rpcbind                    #rpcbind自動啟動腳本
/sbin/rpcbind                               #主程序
/usr/sbin/rpcinfo
/usr/share/doc/rpcbind-0.2.0                #文檔
/usr/share/doc/rpcbind-0.2.0/AUTHORS
/usr/share/doc/rpcbind-0.2.0/ChangeLog
/usr/share/doc/rpcbind-0.2.0/README
/usr/share/man/man8/rpcbind.8.gz           #幫助文件
/usr/share/man/man8/rpcinfo.8.gz
/var/cache/rpcbind

#啟動NFS服務時,先啟動rpcbind,後啟動nfs服務
[[email protected] home]# service rpcbind start   #啟動rpcbind
Starting rpcbind: [  OK  ]
[[email protected] home]# service nfs start       #啟動nfs
Starting NFS services:  [  OK  ]
Starting NFS mountd: [  OK  ]
Starting NFS daemon: [  OK  ]
Starting RPC idmapd: [  OK  ]

#關閉NFS服務時,先關閉nfs服務,後關閉rpcbind服務
[[email protected] home]# service nfs stop
Shutting down NFS daemon: [  OK  ]
Shutting down NFS mountd: [  OK  ]
Shutting down RPC idmapd: [  OK  ]
[[email protected] home]# service rpcbind stop
Stopping rpcbind: [  OK  ]

NFS服務端的配置文件通過/etc/exports配置文件來實現,更改配置文件後需要通過exports命令使更改後的配置生效。

  • exports配置文件

/etc/exports文件是NFS主要的配置文件,該文件用於設置服務器的共享目錄,以及目錄允許訪問的主機、訪問權限等信息。NFS安裝後會在/etc目錄下創建一個空白的exports文件,即沒有任何的共享目錄,用戶需要進行手工編輯。文件每一行定義了一個共享目錄,其格式為:

共享目錄 [客戶端1(選項1,選項2 ...)]   [客戶端2(選項1,選項2 ...)] ...

共享目錄與各客戶端之間以空格進行分隔,除了共享目錄以外,其他內容可選。


共享目錄:提供NFS客戶端使用的目錄

客戶端:可以訪問共享目錄的計算機,可以通過IP地址和主機名進行指定,也可以使用子網掩碼指定網段或者使用通配符‘*‘或‘?‘進行模糊指定。

選項:指定該共享目錄的訪問權限,如果不指定,則NFS使用默認選項。

客戶端示例:

客戶端說明
Demoserver主機名為Demoserver的計算機
10.0.0.71IP地址為10.0.0.71的計算機
192.168.2.0/24子網192.168.2.0中的所有計算機
host?.example.com?表示任意字符
*.example.com.example.com域中的所有計算機
*所有計算機

客戶端常用選項:

客戶端選項說明
ro客戶端只能以只讀方式訪問共享目錄中的文件,不能寫入
rw對共享目錄可讀寫
sync將數據同步寫入內存與硬盤中
async
異步IO方式,數據會先暫存在內存中,待需要時再寫入硬盤
secure
限制NFS服務只能使用小於1024端口號進行數據傳輸
insecure
使用大於1024端口
wdelay
如果多個客戶端要對同一目錄進行讀寫,則將這些操作集中執行
no_wdelay
有寫操作則立即寫入,當設置了async選項時,該選項無效
hide
共享目錄時,不共享目錄中的子目錄
no_hide
共享子目錄
subtree_check
強制NFS檢查共享目錄父目錄的權限
no_subtree_check
不檢查父目錄權限
all_squash
不管登錄NFS的使用者是什麽身份,都把他的UID和GID映射為匿名用戶和用戶組
no_all_squash保留用戶原來的UID和GID,不進行映射
anonuid指定NFS服務器使用/etc/passwd文件中UID為該值的用戶作為匿名用戶,應該盡量保持客戶端和服務器端用戶UID的一致性
anongid指定NFS服務器使用/etc/group文件中GID為該值的用戶作為匿名用戶組
root_squash如果登錄NFS服務器使用共享目錄的使用者是root,則把這個使用者的權限映射為匿名用戶
no_root_squash如果登錄NFS服務器使用共享目錄的使用者是root,保留它的root權限,這可能會導致嚴重的安全問題
  • exportfs命令:輸出共享目錄

NFS服務啟動時,會讀取/etc/exports配置文件的內容,把文件中設置的共享目錄輸出,供客戶端使用。在NFS服務啟動後,如果要對/etc/exports進行更改,需要通過exportfs對共享目錄進行輸出,其命令格式為:

/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]
/usr/sbin/exportfs -r [-v]
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f

常用選項:

-a:全部輸出或取消輸出所有的共享目錄

-i:忽略/etc/exports配置文件,而使用默認或命令行中指定的選項

-o:指定輸出的客戶端選項

-r:重新讀取/etc/exports中的配置,並同步/var/lib/nfs/xtab與/etc/exports的內容

-u:取消一個或多個共享目錄的輸出

-v:如果不跟其他選項一起使用,則顯示當前共享的所有目錄及他們的選項設置,如果輸出或取消輸出共享目錄,則顯示進行了那些操作

11.3、NFS客戶端配置

要在NFS客戶端上使用服務器的共享目錄,需要在本地主機上啟動rpcbind服務,然後使用showmount命令查看NFS服務器共享的目錄有哪些,使用mkdir命令在本地建立共享目錄的掛載點,最後使用mount命令掛載共享目錄到本地。

showmount命令格式為:

showmount  [選項]  [主機IP或名稱]

常用選項:

-a:一般在NFS服務器上使用,用於顯示已經掛載服務器共享目錄的客戶端及他們使用的共享目錄

-d:與-a類似,但只顯示目錄,不顯示具體客戶端

-e:顯示指定NFS服務器輸出的共享目錄列表

-h:顯示幫助信息

-v:顯示版本信息

--no-headers:不輸出標題信息

掛載點可以由用戶自行指定,創建掛載點後,就可以掛載共享目錄,掛載共享目錄使用的命令與掛載本地文件系統的命令一樣,使用mount命令,其格式為:

mount  [選項]  NFS服務器IP或主機名:共享目錄  掛載點

常用選項:

選項說明
-t nfs指定要掛載的文件系統類型為NFS
-o ro只讀掛載的文件系統為只讀
-o rw可讀寫
-o rsize=n指定NFS服務器上讀文件時NFS使用的塊大小,單位字節
-o wsize=n指定NFS服務器上寫文件時NFS使用的塊大小,單位字節
-o timeo=n指定超時後重新發送請求的延時時間,單位十分之一秒
-o retrans=n指定放棄掛載前嘗試的次數
-o acregmin=n指定文件在緩沖中存放的最小時間,單位秒
-o acregmax=n指定文件在緩沖中存放的最大時間,單位秒
-o acdirmin=n指定目錄在緩沖中存放的最小時間,單位秒
-o acdirmax=n指定目錄在緩沖中存放的最大時間,單位秒
-o actime=n該選項值代替acregmin,acregmax,acdirmin,acdirmax,把這四個值設為一樣
-o retry=n指定放棄掛載前嘗試的時間,單位分鐘
-o port=n指定連接NFS服務器使用的端口號
-o proto=n指定掛載NFS文件系統時使用的網絡協議
-o fg使用前臺方式完成掛載工作
-o bg使用後臺方式完成掛載工作
-o hard如果超時,則在控制臺顯示server not responding的錯誤信息並重復嘗試連接,直到恢復為止
-o soft如果連接超時,則返回I/O錯誤給請求的程序
-o intr如果NFS文件操作超時,而使用了hard方式掛載,允許中斷文件操作
-o noac禁止緩存,強制進行同步寫
-o fsc啟動本地磁盤緩存

11.4、使用autofs按需掛載共享目錄

傳統NFS共享目錄使用方式中,客戶端要掛載共享目錄一般是通過手工執行mount命令或在fstab文件中配置開機自動掛在這兩種方式完成。但是,NFS客戶端與服務器之間不是永久連接,而NFS一個缺點是當客戶端和服務器連接後,任何一方離線都可能導致另一方不斷等待超時。同時,可能很多用戶掛載了共享目錄,但實際沒有使用,導致NFS服務器資源的消耗,為了解決這些問題,一般做法是使用autofs服務,僅在訪問時動態掛載共享目錄。

autofs是一個按需掛載文件系統的程序,可以直接使用yum安裝。

[[email protected] ~]# yum install -y autofs
[[email protected] ~]# service autofs start
Loading autofs4: [  OK  ]
Starting automount: [  OK  ]

/etc/auto.master是autofs的主配置文件,配置格式為:

掛載點頂層目錄  映射文件

掛載點頂層目錄: 例如要把共享目錄掛在到/nfs/public目錄下,那麽這裏的值就設置為/nfs, 而/nfs/public不需要手工創建

映射文件:該文件是由用戶自行指定並創建,在該文件中設置的NFS系統應該如何掛載

映射文件格式:

掛載點  [-掛載選項]  NFS服務器名或IP:共享目錄

其中,掛載點是基於auto.master文件中所設置的‘掛載點頂層目錄‘的相對路徑。配置文件更改後需要重啟autofs服務式配置生效,也可以使用reload重載。

配置實例

假設NFS服務器nfsserver所輸出的共享目錄有4個,/tmp,/sharefiles/public, /sharefiles/private,/media/cdrom,exports文件具體內容為:

[[email protected] ~]# cat /etc/exports 
/tmp                     192.168.191.*(rw,no_root_squash)
/sharefiles/public       192.168.191.*(rw,all_squash,anonuid=40,anongid=40)
/sharefiles/private      192.168.191.*(rw)
/media/cdrom             192.168.191.*(ro)

要通過autofs服務把這些目錄都掛載到本地

/nfs/tmp
/nfs/public
/nfs/private
/nfs/cdrom

創建掛載點頂層目錄

[[email protected] ~]# mkdir /nfs

編輯/etc/automaster文件,添加如下內容:

/nfs    /etc/auto.nfs

編輯/etc/auto.nfs映射文件:

[[email protected] ~]# cat /etc/auto.nfs 
tmp        -  192.168.191.128:/tmp
public     -  192.168.191.128:/sharefiles/public
private    -  192.168.191.128:/sharefiles/private
cdrom      -  192.168.191.128:/media/cdrom

重啟autofs服務:

[[email protected] nfs]# service autofs reload
Reloading maps
[[email protected] home]# cd /nfs/           #進入nfs目錄,目錄為空
[[email protected] nfs]# ls            
[[email protected] nfs]# ls /nfs/cdrom       #訪問各掛載的目錄
cdrom.txt
[[email protected] nfs]# ls /nfs/private
private
[[email protected] nfs]# ls /nfs/public
public
[[email protected] nfs]# ls /nfs/tmp
yum.log
[[email protected] nfs]# ls                  #當訪問時,掛載的目錄才出現
cdrom  private  public  tmp


本文出自 “隨風而飄” 博客,請務必保留此出處http://yinsuifeng.blog.51cto.com/10173491/1934437

十一、NFS服務器配置和管理