NFS(Network File System)即網絡文件系統,它容許網絡中的計算機之間經過網絡共享資源。將NFS主機分享的目錄,掛載到本地客戶端當中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,在客戶端端看起來,就像訪問本地文件同樣。web
RPC,基於C/S模型。程序可使用這個協議請求網絡中另外一臺計算機上某程序的服務而不需知道網絡細節,甚至能夠請求對方的系統調用。centos
對於Linux而言,文件系統是在內核空間實現的,即文件系統好比ext三、ext4等是在Kernel啓動時,之內核模塊的身份加載運行的。安全
NFS自己的服務並無提供數據傳遞的協議,而是經過使用RPC(遠程過程調用 Remote Procedure Call)來實現。當NFS啓動後,會隨機的使用一些端口,NFS就會向RPC去註冊這些端口。RPC就會記錄下這些端口,RPC會開啓111端口。經過client端和sever端端口的鏈接來進行數據的傳輸。在啓動nfs以前,首先要確保rpc服務啓動。服務器
原理以下:網絡
而後client端經過獲取的NFS端口來創建和server端的NFS鏈接並進行數據的傳輸。app
如下爲啓動各服務的做用異步
rpc:遠程過程調用協議,是實現本地調用遠程主機實現系統調用的協議。(中介)async
portmapper:負責分配rpc server的端口,並在client端請求時,負責響應目的rpc server端口返回給client端,工做在tcp與udp的111端口上。tcp
mountd:是nfs服務的認證服務的守護進程,client在收到返回的真正端口時,就會去鏈接mountd,認證取得令牌。ide
nfsd:nfs的守護進程,負責接收到用戶的調用請求後與內核發出請求並獲得調用結果響應給用戶,工做在tcp和udp的2049端口。
idmapd:是NFS的一個程序,用來負責遠程client端建立文件後的權限問題。
quotad:用用於實現磁盤配額,當client端掛載nfs後能夠限制磁盤空間的大小。
I:安裝NFS和rpc
yum install -y rpc-bind nfs-utils
【安裝nfs服務】
II:安裝rpcbind
yum install -y rpcbind
【安裝rpc服務】
#### 練習題 ####
/data01/w 10.0.0.41主機掛載(可讀可寫,數據同步,全部用戶都要進行身份轉換)
/data01/r 172.16.1.0/24網段主機掛載(只讀權限,數據異步傳輸,全部用戶不要進行轉換)
當將同一目錄共享給多個客戶機,但對每一個客戶機提供的權限不一樣時,能夠這樣:
[共享的目錄] [主機名1或IP1(參數1,參數2)] [主機名2或IP2(參數3,參數4)]
第一列,能夠共享的目錄,共享到網絡的文件系統
第二列,可訪問主機
172.16.1.7 ----指定IP地址的主機
nfsclient.test.com------指定域名的主機
172.16.1.0/24-------指定網段中的全部主機
* ----------表明全部主機
ro 只讀訪問
rw 讀寫訪問
sync 全部數據在請求時寫入共享
async NFS在寫入數據前能夠相應請求
secure NFS經過1024如下的安全TCP/IP端口發送
insecure NFS經過1024以上的端口發送
wdelay 若是多個用戶要寫入NFS目錄,則歸組寫入(默認)
no_wdelay 若是多個用戶要寫入NFS目錄,則當即寫入,當使用async時,無需此設置。
Hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 若是共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)
no_subtree_check 和上面相對,不檢查父目錄權限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。
no_all_squash 保留共享文件的UID和GID(默認)
root_squash root用戶的全部請求映射成如anonymous用戶同樣的權限(默認)
no_root_squas root用戶具備根目錄的徹底管理訪問權限
anonuid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的UID
/data01/w 10.0.0.41(rw,sync,all_squash) /data01/r 172.16.1.0/24/(ro,async,no_all_squash)
mkdir /data01/{r,w} -p ; chown nfsnobody.nfsnobody /data01/{r,w}
注意:先啓動rpc服務,再啓動nfs服務。
systemctl start rpcbind
systemctl start nfs
systemctl reload nfs --- 平滑重啓
相同點:兩者都是使配置文件從新生效
不一樣點:
reload (從新加載),reload會從新加載配置文件,服務不會中斷。並且reload時會測試conf語法等,若是出錯會rollback用上一次正確配置文件保持正常運行。也叫平滑重啓,不會對已經鏈接的服務形成影響。
restart (重啓)(先stop後start),會重啓服務。這個重啓會形成服務一瞬間的中斷,若是配置文件出錯會致使服務啓動失敗,那就是更長時間的服務中斷了。
注意:修改配置文件前必定要先備份!爲了保證線上服務高可用,推薦使用reload
I:安裝nfs服務
yum install nfs-utils -y
backup服務器(10.0.0.41) mkdir /w -p mount -t nfs 10.0.0.31:/data01/w /w web01服務器(172.16.1.7) mkdir /r -p mount -t nfs 172.16.1.31:/data01/r /r
I:把mount 的命令放到/etc/rc.d/rc.local 裏面去,vi /etc/rc.d/rc.local ,而後把mount -t nfs 172.16.1.31:data01/r /r 這個命令塞進去。保存退出就行了
I:172.16.1.31:/data01 /mnt nfs defaults 0 0
第一個歷程: 系統啓動開機自檢
第二個歷程: 加載系統掛載文件 /etc/fstab 沒法實現網絡掛載
第三個歷程: 啓動系統服務程序 network remote-fs.target(centos7) netfs(centos6)
第四個歷程: 特殊服務從新加載 /etc/fstab 實現網絡掛載
-a:把/etc/fstab中列出的路徑所有掛載。
-t:須要mount的類型,如nfs等。
-r:將mount的路徑定爲read only
-v mount:過程的每個操做都有message傳回到屏幕上
rsize=n:(讀取內存空間大小)在NFS服務器讀取文件時NFS使用的字節數,默認值是1 024個字節。
wsize=n:(設置存儲空間大小)向NFS服務器寫文件時NFS使用的字節數,默認值是1 024個字節。
timeo=n:從超時後到第1次從新傳送佔用的1/7秒的數目,默認值是7/7秒
hard:使用硬掛載的方式掛載系統,該值是默認值,重複請求直到NFS服務器迴應。
intr:容許NFS中斷文件操做和向調用它的程序返回值,默認不容許文件操做被中斷。
umount -lf /mnt --- 強制卸載
-l Lazy unmount --- 懶惰卸載
-f force --- 強制卸載
rpcinfo --- 查看nfs服務是否進行註冊
rpcinfo -p localhost/172.16.1.31
showmount --- 查看nfs服務存在哪些能夠掛載目錄
showmount -e localhost/172.16.1.31
exportfs --- 臨時建立存儲目錄/ nfs服務平滑重啓
exportfs -rv
exportfs -o rw,sync,all_squash 172.16.1.0/24:/data100
/var/lib/nfs/etab --- 存儲服務默認配置記錄文件(日誌文件)
/etc/exports --- 存儲服務配置文件
/proc/mounts --- 存儲客戶端默認掛載參數信息
存儲服務配置文件參數
存儲服務目錄權限有關 755
存儲服務目錄權限繼承
存儲客戶端掛載參數