linux學習-NFS文件共享

    NFS(Network File System),即網絡文件系統,普遍用於linux文件共享。在虛擬化場景中,也是一種重要的後端存儲使用形式。目前NFS有三個版本,分別是NFSv2、NFSv3、NFSv4。V3擁有更多的特點,包括更快的速度、更大的單個文件大小、更多的排錯的錯誤及成功信息,對TCP協議的支持等等。NFSV4提供了有狀態的鏈接,更容易最終鏈接狀態,增強了安全特性。centos7版本默認是使用v4版本提供網絡文件系統共享服務,NFS監聽在TCP2049。

 一、NFS服務器配置

NFS服務器的通過讀取/etc/exports配置文件設定哪些客戶端可以訪問哪些NFS共享文件系統,該文件的書寫原則如下:

    空白行將備忽略

    以#號開頭的內容爲註釋

    配置文件中可以通過\符號進行換行

    每個共享的文件系統需要獨立一行條目

    客戶端主機列表需要使用空格隔開

    配置文件中支持通配符。

    一條完成的共享目錄語法結構如下,其中,客戶端主機可以是一個網段、單臺主機或主機名

共享路徑    客戶端主機(選項)

    也可以爲多個客戶主機社會之不同的訪問選項,語法結果如下:

共享路徑    客戶端1(選項) 客戶端2(選項)

最簡單的NFS配置可以僅給定一個共享路徑與一個客戶端主機,而不指定選項,沒有選項時,NFS將使用默認設置,默認屬性爲ro,sync,wdela,no_root_squqash

功能屬性如下

NFS選項功能描述
ro只讀共享
sync同步寫操作
wdelay

延遲寫操作

no_root_squash不屏蔽遠程root權限
rw可讀寫共享
async異步寫操作
root_sqlush屏蔽遠程root權限
all_squash屏蔽所有的遠程用戶權限

async選項 允許NFS服務器在沒有完全把數據寫入硬盤前就返回成功消息給客戶端,而此時數據實際還存放在內存中。

sync選項 將確保在數據真正寫入存儲設備後纔會返回成功消息。

wdelay爲延遲寫入,決定了先將數據寫入內存,在寫入硬盤,然後將多個寫入請求合併後寫入硬盤,可以減少對硬盤IO的次數,優化性能。
root_squash使得用戶端使用root賬號訪問NFS時,服務器系統默認會自定將root映射爲服務器本地匿名賬號,通過anonuid可以指定匿名賬號ID,默認爲65534

no_root_squash可以保留root權限

all_squash選項則可以屏蔽所有賬戶權限,將所有用戶對NFS的訪問自動映射爲服務器本地的匿名賬戶。

默認情況下是沒有進行squash操作


NFS服務器配置,共享目錄爲/var/web/與/var/cloud,172.31.208.0/24網段的主機均可以讀寫訪問web目錄,且不屏蔽對root用戶對web目錄的訪問權限,任何主機都可以同步只讀訪問/var/cloud目錄

配置步驟爲安裝軟件,添加共享賬戶,創建共享目錄,修改權限,設置NFS共享配置文件以及啓動共享服務

yum -y install nfs-utils rpcbind
useradd -u 1003 nfs
mkdir /var/{web,cloud}
chmod a+w /var/web
cat <<EOF>> /etc/exports
> /var/web/ 172.31.208.0/24(rw,async,no_root_squash)
> /var/cloud/ * (ro,sync)
> EOF
systemctl restart nfs
systemctl enable nfs

二、客戶端訪問NFS共享

    客戶端可以通過showmount命令來查看服務器共享信息,通過mount掛載NFS共享

    客戶端掛載NFS服務器共享目錄/var/web到本機/var/web,該目錄可讀可寫,且root賬號不會被映射爲匿名賬號(root的權限會被保留):

yum install -y nfs-utils
showmount -e 172.31.208.80

image.png

mkdir /var/web
useradd -u 1003 nfs
mount 172.31.208.80:var/web /var/web        #手動掛載
echo \>"172.31.208.80:/var/web /var/web nfs defaults 0 0">>/etc/fstab     #設置開機自動掛載
chmod a+w /var/web                           #給所有用戶可讀寫權限
cd /var/web; touch root.txt                  #NFS目錄寫入文件
ll /var/web

image.png

su - nfs
cd /var/web
touch nfs.txt
ls -l

image.png


現在客戶端掛載NFS服務器共享目錄/var/cloud到本機/var/cloud目錄,該目錄爲只讀共享,默認root權限會自動映射爲nfsnobody賬號,普通賬號權限將被保留

mkdir /var/cloud
mount 172.31.208.80:/var/cloud/ /var/cloud/
echo \>"172.31.208.80:/var/cloud /var/cloud nfs defaults 0 0">>/etc/fstab     #設置開機自動掛載
cd /var/cloud
touch root.txt                        #提示文件爲只讀

image.png

權限問題說明:

1)客戶端使用普通用戶鏈接服務器時,默認情況下,如果客戶端使用的賬戶UID再服務器上也有相同的用戶UID,則服務器將使用服務器本機上的該UID賬戶進行讀寫操作,如果客戶端訪問服務器所使用的賬戶UID不在服務器上,則服務器自動將賬號轉換爲nobody賬號,此外如果服務器對共享配置了all_squash選項,則服務器會根據anonuid選項的值,將所有賬戶自動轉換爲匿名賬戶

2)客戶端使用root鏈接服務器時,默認會將root轉換爲服務器的上的nfsnobody賬號,如果服務器端對共享屬性配置了no_root_squash選項,則服務器將會將遠程root賬戶轉換爲本機root賬號進行讀寫操作

三、NFS高級設置

NFS所需的服務

centos7中提供NFS服務,提供了很多游泳的服務進程

nfs:NFS服務器主程序

nfslock:爲NFS文件系統提供鎖機制

rpcbind:提供地址與端口註冊服務

rpc.mountd:該進程被NFS服務用來處理NFSv2與NFSv3的mount請求

rpc.nfsd:動態處理客戶端請求

lockd:內核線程,在服務器端與客戶端運行,用來實現NLM網絡協議,運行NFSv2和NFSv3客戶端對文件加鎖

rpc.statd:該進程實現網絡狀態(NSM)協議

rpc.rquotad:該進程提供用戶配額信息

rpc.idmapd:提供NFSv4名稱映射,/etc/idmpad.conf必須配置


NFS客戶端配置

若想客戶端主機可以訪問並使用服務器所提供的共享目錄,可通過mount命令掛載 NFS共享,格式爲

#mount -t nfs -o 選項 服務器主機:/服務器共享目錄 /本地掛載目錄

具體的掛載選項:

intr:當服務器宕機時允許中斷NFS請求

nfserver=version:指定使用哪個版本NFS協議

noacl:關閉acl

nolock:關閉文件鎖機制

port=num:指定NFS服務器端口號,默認num爲0,此時如果遠程NFS進程沒有在rpcbind註冊端口信息,則使用標準的NFS端口號(TCP 2049)

rsize=num:設置最大數據塊大小調整NFS讀取數據的速度,num單位爲字節

wsize=num:設置最大數據塊大小調整NFS寫入數據的速度,num單位爲字寫

tcp:使用TCP掛載協議

udp:使用udp協議掛載


使用NFS命令工具

NFS軟件提供了了命令工具

(1)exportfs

NFS啓動時,/usr/sbin/exportfs命令會自動啓動讀取/etc/exports文件,通過控制rpc.mountd處理掛載請求,然後rpc.nfsd使用文件系統對遠程主機可見,手動執行exportfs命令允許root在不重啓NFS服務的情況下選擇共享或者取消部分共享目錄

選項 -r 重新讀取/etc/exports文件

        -a 全部共享或者全部取消共享

        -u 取消共享,與-a 一起使用可以取消全部共享文件系統

        -v 顯示詳細信息

image.png

(2)nfsstat

查看NFS共享狀態

-s,--server 不使用該參數時,默認顯示服務器端與客戶端狀態,使用該參數後將僅顯示服務器端狀態

-c,--client僅顯示客戶端狀態

-n,--nfs 僅顯示客戶端狀態

-m 顯示掛載信息

-l 列表形式顯示信息


(3)rpcinfo

RPC信息報表

-m 顯示指定主機rpcbind操作信息表

-p 顯示指定主機RPC註冊信息

-s 顯示指定主機所有註冊RPC信息程序,不指定時默認顯示本機信息




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章