1、nfs簡介linux
nfs(network file system)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。vim
nfs主要適用用linux與Unix系統間文件共享,因爲是nfs是明文傳輸,沒法加密,並且只能基於IP認證,因此通常用於公司或校園的局域網。服務器
nfs的優勢就是能大量節省本地存儲空間,將經常使用的數據存放在一臺NFS服務器上且能夠經過網絡訪問,並且訪問的時候就跟訪問本身的家目錄同樣方便,並且數據同步很是穩定、迅速。網絡
nfs是運行在應用層的協議,監聽於2049/tcp端口和2049/udp套接字。app
2、nfs的組成async
nfs能夠由一臺nfs服務器和N臺客戶機組成tcp
客戶機經過tcp/ip協議網絡遠程訪問存放在NFS服務器上的數據ide
在nfs服務器正式啓用前,根據實際環境和需求,配置一些nfs參數測試
3、nfs的應用場景ui
多個機器共享一臺CDROM或其餘設備,這樣比多臺機器都裝一臺CDROM方便的多
大型局域網內,配置一臺NFS服務器用於放置全部用戶的home目錄,無論你周圍局域網哪臺工做站上登陸,都是同一目錄,能給工做帶來極大的方便
不一樣客戶端若是經過NFS觀看影視文件,能節省大量本地空間
在客戶端完成的工做數據,能夠備份到NFS服務器上本身的路徑下
4、nfs的工做原理
nfs是經過rpc(遠程過程調用協議)來實現網絡文件系統共享的,rpc是經過網絡從遠程計算機上請求服務器,不須要經過底層網絡技術的協議
nfs服務器端運行了四個進程:
nfsd
mountd
idmapd
portmapper
idmapd ----實現用戶帳號的集中映射,把全部的帳號都映射成NFSNOBODY,但在訪問時卻能以本地用戶訪問,因此須要目錄的權限
mountd ----用戶驗證客戶端是否在容許訪問此NFS文件系統的客戶端列表中,在就容許訪問
nfsd ----nfs的守護進程,監聽在2049端口上
portmapper ---nfs服務器的rpc服務,監聽在111端口,用於管理遠程過程調用
舉個例子說明工做過程:
客戶機A想查看file文件的信息,此信息存儲在遠程NFS服務器端主機B(掛載在本地目錄/nfs中),A把查看文件信息的請求發給內核,內核經過NFS模塊明白是遠程主機B上的,內核經過RPC協議吧請求封裝成rpc請求經過tcp111端口發給主機B的portmapper,portmapper告訴A主機B主機的mountd服務所在端口,而後A去找mountd請求驗證,mountd看他有的容許列表,若是A在表內,就給一個令牌給A,A拿着這個令牌去找B主機的nfsd進程,請求查看須要的文件,B主機的nfsd進程發起本地調用,向B內核請求查看主機A要查看的文件信息,B內核執行系統調用,將結果返回給nfsd服務,nfsd服務器收到後將結果封裝成rpc請求報文並用過tcp/ip協議發給主機A
5、配置文件
nfs的主配置文件是/etc/exports,此文件定位NFS系統的輸出目錄(共享目錄),訪問權限參數,容許訪問的主機參數,該文件默認爲空,文件每一行提供一個共享目錄的使者,其格式爲
《共享目錄》 【 客戶端1IP(權限參數)】 【客戶端2IP(權限參數)】
共享目錄爲你想要共享出去的目錄絕對路徑
客戶端ip爲你想共享給哪些或哪一個主機
權限參數爲用戶訪問的權限,用戶映射的選項
exportfs -r 重讀配置文件,使其當即生效,無需重啓服務
訪問權限選項:
訪問權限選項 | 說明 |
---|---|
ro | 設置輸出目錄只讀 |
rw | 設置輸出目錄可讀寫 |
用戶映射選項:
用戶映射選項 | 說明 |
---|---|
all_squash | 將遠程訪問的全部普通用戶及所屬組都映射爲匿名用戶或用戶組(nfsnobody) |
no_all_squash | 不將遠程訪問的全部普通用戶及所屬用戶組都映射爲匿名用戶或用戶組(默認設置) |
root_squash | 將root用戶及所屬用戶組都映射爲匿名用戶或用戶組(默認設置) |
no_root_squash | 不將root用戶及所屬用戶組都映射爲匿名用戶或用戶組 |
anonuid=xxx | 將遠程訪問的全部用戶都映射爲匿名用戶,並指定該匿名用戶爲本地用戶賬戶(UID=xxx) |
anongid=xxx | 將遠程訪問的全部用戶組都映射爲匿名用戶組,並指定該匿名用戶組爲本地用戶組(GID=xxx) |
經常使用的其餘選項:
其餘選項 | 說明 |
---|---|
secure | 限制客戶端只能從小於1024的TCP/IP端口鏈接NFS服務器(默認設置) |
insecure | 容許客戶端從大於1024的TCP/IP端口鏈接NFS服務器 |
sync | 將數據同步寫入內存緩衝區或磁盤中,效率較低,但可保證數據一致性 |
async | 將數據先保存在內存緩衝區中,必要時才寫入磁盤 |
wdelay | 檢查是否有相關的寫操做,若是有則這些寫操做一塊兒執行,可提升效率(默認設置) |
no_wdelay | 如有寫操做則當即執行,應與sync配置使用 |
subtree_check | 若輸出目錄是一個子目錄,則NFS服務器將檢查其父目錄的權限(默認設置) |
no_subtree_check | 即便輸出目錄是一個子目錄,NFS服務亦不檢查其父目錄的權限,可提升效率 |
nohide | 若將一個目錄掛載到另外一個目錄之上,則原來的目錄一般就被隱藏起來或看起來像空的同樣。要禁用這種行爲,需啓用hide選項 |
6、nfs使用:
nfs安裝
yum -y install rpcbind nfs-utils
啓動服務
systemctl start rpcbind nfs-server
shoumount命令測試共享目錄狀態
-a 顯示指定NFS服務器的全部客戶端主機及其所鏈接的目錄
-d 顯示指定NFS服務器的已被客戶端鏈接的全部輸出目錄
-e顯示指定NFS服務器的所輸出的共享目錄
客戶端臨時掛載NFS文件系統
yum install rpcbind nfs-utils -y
mount -t nfs ip:/path1 /path2
客戶端設置自動掛載nfs
vim /etc/fstab
ip/path /path2 nfs defaults,_netdev 0 0
mount -a
df -h
檢查輸出目錄所使用的選項:
在配置文件/etc/exports中,即便在命令行中只設置了一兩個選項,但在真正輸出目錄時,實際上還帶有不少默認的選項。經過查看/var/lib/nfs/etab文件,能夠看到具體使用了何選項
7、NFS使用實例:
1.手動搭建一個nfs服務器
開放/nfs/shared目錄,供全部用戶查閱資料
開放/nfs/upload目錄爲172.16.12.0/24網段的數據上傳目錄,並將全部用戶及所屬的用戶組都映射爲nfs-upload,其UID與GID均爲300
服務器端
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install rpcbind nfs-utils
mkdir /nfs
chmod 775 /nfs
groupadd -g 300 nfs-upload
useradd -u 300 -g 300 nfs-upload
echo " /nfs 172.16.12.0/24(ro,all-squash,root_squash,anonuid=300,anongid=300,sync)" > /etc/export
systemctl start rpcbind nfs-server
systemctl enable nfs-server
systemctl enable rpcbind
exportfs -r
客戶端
mkdir /nfs
mount -t nfs 192.168.160.46:/data/nfs /nfs
或
vim /etc/fstab
192.168.160.46:/data/nfs /nfs nfs defaults,_netdev 0 0
mount- a
df -h