NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。html
NFS最先是由Sun公司發展出來的,服務器
簡單的來講:它就是是能夠透過網絡,讓不一樣的主機、不一樣的操做系統能夠共享存儲。網絡
如下是NFS最顯而易見的好處:less
1. 節省本地存儲空間,將經常使用的數據存放在一臺NFS服務器上且能夠經過網絡訪問,那麼本地終端將能夠減小自身存儲空間的使用。async
2. 用戶不須要在網絡中的每一個機器上都建有Home目錄,Home目錄能夠放在NFS服務器上且能夠在網絡上被訪問使用。tcp
3. 一些存儲設備CDROM和Zip(一種高儲存密度的磁盤驅動器與磁盤)等均可以在網絡上被別的機器使用。這能夠減小整個網絡上可移動介質設備的數量。ide
NFS 的基本原則是「允許不一樣的客戶端及服務端經過一組RPC分享相同的文件系統」,它是獨立於操做系統,允許不一樣硬件及操做系統的系統共同進行文件的分享。測試
NFS在文件傳送或信息傳送過程當中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其餘系統中程序的一種機制。NFS自己是沒有提供信息傳輸的協議和功能的,但NFS卻能讓咱們經過網絡進行資料的分享,這是由於NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。能夠說NFS自己就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER。因此只要用到NFS的地方都要啓動RPC服務,不管是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能經過RPC來實現PROGRAM PORT的對應。能夠這麼理解RPC和NFS的關係:NFS是一個文件系統,而RPC是負責負責信息的傳輸。ui
服務端:spa
安裝準備:(個人環境是6.5 其實我也不知看着內核有啥用)
[root@NFS-server ~]# cat /etc/redhat-release #查看系統版本 CentOS release 6.8 (Final) [root@NFS-server ~]# uname -r #查看系統內核版本 2.6.32-642.11.1.el6.x86_64 [root@NFS-server ~]# uname -m #查看系統是否64位 x86_64
須要的軟件
nfs-utils: 這個是NFS服務主程序(包含rpc.nfsd、rpc.mountd、daemons)
rpcbind: 這個是CentOS6.X的RPC主程序(CentOS5.X的爲portmap)
檢查軟件是否安裝
[root@NFS-server ~]# rpm -qa nfs-utils rpcbind #檢查安裝的軟件包rpcbind-0.2.0-12.el6.x86_64 nfs-utils-1.2.3-70.el6_8.2.x86_64
這是已經安裝了,若是沒有安裝
[root@NFS-server ~]# yum install -y nfs-utils rpcbind #安裝上述所需的兩個軟件包
4、啓動NFS服務端相關服務
---開啓rpcbind服務
[root@NFS-server ~]# /etc/init.d/rpcbind status #查詢rpcbind服務狀態並啓動rpcbind (pid 1281) is running... [root@NFS-server ~]# LANG=en
[root@NFS-server ~]# lsof -i :111 #查詢rpcbind監聽狀態 (111是rpcbind的主端口)COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1281 rpc 6u IPv4 10766 0t0 UDP *:sunrpc rpcbind 1281 rpc 8u IPv4 10769 0t0 TCP *:sunrpc (LISTEN) rpcbind 1281 rpc 9u IPv6 10771 0t0 UDP *:sunrpc rpcbind 1281 rpc 11u IPv6 10774 0t0 TCP *:sunrpc (LISTEN)
[root@NFS-server ~]# netstat -lntup |grep rpcbind #查詢rpcbind服務啓動狀態 (同lsof查詢端口效果同樣)tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1281/rpcbind tcp 0 0 :::111 :::* LISTEN 1281/rpcbind udp 0 0 0.0.0.0:608 0.0.0.0:* 1281/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 1281/rpcbind udp 0 0 :::608 :::* 1281/rpcbind udp 0 0 :::111 :::* 1281/rpcbind
[root@NFS-server ~]# chkconfig --list rpcbind #檢查rpcbind自啓動狀況rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
1
|
root@NFS-server ~]# rpcinfo -p localhost #查看NFS服務項rpc服務器註冊的端口信
|
<這個是還未啓動FNS服務的rpcbind狀態>
---啓動NFS服務
[root@NFS-server ~]# /etc/init.d/nfs status #查看NFS服務並啓動rpc.svcgssd is stopped rpc.mountd (pid 1526) is running... nfsd (pid 1542 1541 1540 1539 1538 1537 1536 1535) is running... rpc.rquotad (pid 1521) is running...
[root@NFS-server ~]# netstat -lntup|grep nfs #查看NFS端口啓動(FNS默認端口爲2049)[root@NFS-server ~]# lsof -i :2049 #查看NFS端口啓動(FNS默認端口爲2049)[root@NFS-server ~]# netstat -lntup|grep 2049 #查看NFS端口啓動(FNS默認端口爲2049)tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -tcp 0 0 :::2049 :::* LISTEN -udp 0 0 0.0.0.0:2049 0.0.0.0:* -udp 0 0 :::2049 :::* -
[root@NFS-server ~]# rpcinfo -p localhost #啓動NFS事後rpcbind服務已經啓用了對FNS的端口映射
<這個是啓動FNS服務事後 的rpcbind的狀態>
[root@NFS-server ~]# chkconfig --list nfs #查看nfs的開機自啓動狀況nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@NFS-server ~]# chkconfig nfs on #讓FNS開機自啓動
因爲在FNS服務過程當中,必須先啓動rpcbind,再啓動nfs,這樣才能讓NFS在rpcbind上註冊成功
[root@NFS-server ~]# less /etc/init.d/rpcbind #查看rpcbind服務啓動詳情
同理咱們查看nfs服務的自啓動詳情
[root@NFS-server ~]# less /etc/init.d/nfs
<由上面能夠看出系統默認會讓rpcbind服務先啓動,再啓動nfs服務,可是在實際生產環境中,咱們最好不要用chkconfig來控制服務的開機自啓動,咱們生產環境中咱們通常用rc.local來管理。主要是爲了方便之後查閱哪些服務開機本身,而且能控制前後順序,如圖>
<爲了規範化咱們用rc.local來管理開機自啓動>
[root@NFS-server ~]# vi /etc/rc.local
NFS服務常見進程的詳細說明
咱們能夠重NFS服務的啓動過程看到如下幾個進程:
[root@NFS-server ~]# ps -ef |egrep "rpc|nfs" #查看nfs相進程rpcuser 1303 1 0 Nov22 ? 00:00:00 rpc.statd #檢查文件一致性root 1512 2 0 Nov22 ? 00:00:00 [rpciod/0] rpc 2723 1 0 02:43 ? 00:00:00 rpcbind root 2896 1 0 02:56 ? 00:00:00 rpc.rquotad #磁盤配額進程root 2901 1 0 02:56 ? 00:00:00 rpc.mountd #權限管理驗證等root 2908 2 0 02:56 ? 00:00:00 [nfsd4] root 2909 2 0 02:56 ? 00:00:00 [nfsd4_callbacks] root 2910 2 0 02:56 ? 00:00:00 [nfsd] root 2911 2 0 02:56 ? 00:00:00 [nfsd] root 2912 2 0 02:56 ? 00:00:00 [nfsd] root 2913 2 0 02:56 ? 00:00:00 [nfsd] #NFS主進程,管理登入,身份斷定root 2914 2 0 02:56 ? 00:00:00 [nfsd] root 2915 2 0 02:56 ? 00:00:00 [nfsd] root 2916 2 0 02:56 ? 00:00:00 [nfsd] root 2917 2 0 02:56 ? 00:00:00 [nfsd] root 2948 1 0 02:56 ? 00:00:00 rpc.idmapd #名稱映射
<若是對上述進程不明白能夠 用man命令查閱幫助信息,如 「man rpc.statd」>
5、配置NFS服務端
前面介紹了NFS的啓動,接下來咱們配置NFS服務端的配置
/etc/exports 是NFS程序的配置文件。而且默認爲空
/etc/exports文件的配置格式爲:
NFS共享目錄 NFS客戶端地址1(參數1,參數2,參數3......) 客戶端地址2(參數1,參數2,參數3......)
NFS共享目錄 NFS客戶端地址(參數1,參數2,參數3......)
<咱們在此共享給 192.168.1.0/24全部主機,>
<man exports 查看 例子和參數詳情。以下:>
配置完成exports後平滑重啓NFS服務 ,下面兩條命令等同
[root@NFS-server ~]# /etc/init.d/nfs reload [root@NFS-server ~]# exportfs -r
[root@NFS-server ~]# showmount -e 127.0.0.1 #查看本機掛載狀況
<必須先啓動rpcbinc 再啓動nfs纔會顯示正確>
[root@NFS-server ~]# mount -t nfs 192.168.1.5:/data /mnt #在本機測試掛載
客戶端掛載:
1.安裝軟件
yum install -y nfs-utils rpcbind
2.啓動rpcbind
/etc/init.d/rpcbind start
3.配置開機自啓動
chkconfig rpcbind on
或者修改rc.local
4.測試服務端共享狀況
showmount -e 192.168.0.2015.掛載
mkdir -p /data
mount -t nfs 192.168.1.5:/home/wwwroot /home/wwwroot
6.測試是否有讀寫權限
掛載結束
掛載是要注意的幾點
1.客戶端添加掛載盤的時候用
exportfs -rv
不須要重啓
2注意權限問題服務端掛載的參數
NFS主要有3類選項:
訪問權限選項
設置輸出目錄只讀:ro
設置輸出目錄讀寫:rw
用戶映射選項
all_squash:將遠程訪問的全部普通用戶及所屬組都映射爲匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(默認設置);
root_squash:將root用戶及所屬組都映射爲匿名用戶或用戶組(默認設置);
no_root_squash:與rootsquash取反;
anonuid=xxx:將遠程訪問的全部用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx);
anongid=xxx:將遠程訪問的全部用戶組都映射爲匿名用戶組帳戶,並指定該匿名用戶組帳戶爲本地用戶組帳戶(GID=xxx);
其它選項
secure:限制客戶端只能從小於1024的tcp/ip端口鏈接nfs服務器(默認設置);
insecure:容許客戶端從大於1024的tcp/ip端口鏈接服務器;
sync:將數據同步寫入內存緩衝區與磁盤中,效率低,但能夠保證數據的一致性;
async:將數據先保存在內存緩衝區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操做,若是有則將這些寫操做一塊兒執行,這樣能夠提升效率(默認設置);
no_wdelay:如有寫操做則當即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
no_subtree:即便輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣能夠提升效率;
資源參考:
http://www.cnblogs.com/alonones/p/6105586.html
http://blog.csdn.net/dongfengkuayue/article/details/27386067
http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html