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
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
su - nfs cd /var/web touch nfs.txt ls -l
現在客戶端掛載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 #提示檔案為只讀
許可權問題說明:
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 顯示詳細資訊
(2)nfsstat
檢視NFS共享狀態
-s,--server 不使用該引數時,預設顯示伺服器端與客戶端狀態,使用該引數後將僅顯示伺服器端狀態
-c,--client僅顯示客戶端狀態
-n,--nfs 僅顯示客戶端狀態
-m 顯示掛載資訊
-l 列表形式顯示資訊
(3)rpcinfo
RPC資訊報表
-m 顯示指定主機rpcbind操作資訊表
-p 顯示指定主機RPC註冊資訊
-s 顯示指定主機所有註冊RPC資訊程式,不指定時預設顯示本機資訊