您好,登錄后才能下訂單哦!
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兩個守護進程和其他相關配置文件。 |
[root@localhost home]# yum install -y rpcbind nfs-utils #yum安裝軟件包 [root@localhost 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服務 [root@localhost home]# service rpcbind start #啟動rpcbind Starting rpcbind: [ OK ] [root@localhost home]# service nfs start #啟動nfs Starting NFS services: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ] #關閉NFS服務時,先關閉nfs服務,后關閉rpcbind服務 [root@localhost home]# service nfs stop Shutting down NFS daemon: [ OK ] Shutting down NFS mountd: [ OK ] Shutting down RPC idmapd: [ OK ] [root@localhost 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.71 | IP地址為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安裝。
[root@localhost ~]# yum install -y autofs [root@localhost ~]# 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文件具體內容為:
[root@localhost ~]# 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
創建掛載點頂層目錄
[root@localhost ~]# mkdir /nfs
編輯/etc/automaster文件,添加如下內容:
/nfs /etc/auto.nfs
編輯/etc/auto.nfs映射文件:
[root@localhost ~]# 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服務:
[root@localhost nfs]# service autofs reload Reloading maps [root@localhost home]# cd /nfs/ #進入nfs目錄,目錄為空 [root@localhost nfs]# ls [root@localhost nfs]# ls /nfs/cdrom #訪問各掛載的目錄 cdrom.txt [root@localhost nfs]# ls /nfs/private private [root@localhost nfs]# ls /nfs/public public [root@localhost nfs]# ls /nfs/tmp yum.log [root@localhost nfs]# ls #當訪問時,掛載的目錄才出現 cdrom private public tmp
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。