1. 程式人生 > >linux學習-NFS檔案共享

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資訊程式,不指定時預設顯示本機資訊