一、nfs參數說明
1、NFS服務啟動的進程說明。
服務或進程名 | 用途說明 |
---|---|
nfsd(rpc.nfsd) | rpc.nfsd的主要功能是管理NFS客戶端是否能夠登入NFS服務端主機,其中還包含登入者的ID判別等 |
mountd(rpc.mountd) | rpc.mountd的主要功能則是管理NFS文件系統。當NFS客戶端順利通過rpc.nfsd登入NFS服務端主機時,在使用NFS服務器提供數據之前,它會去讀NFS的配置文件/etc/exports來比對NFS客戶端的權限,通過這一關之后,還會經過NFS服務端本地文件系統使用權限(就是owner、group、other權限)的認證程序。如果都通過了,NFS客戶端就可以取得使用NFS服務器端文件的權限。注意,這個/etc/exports文件也是我們用來管理NFS共享目錄的使用權限與安全設置的地方,特別強調,NFS本身設置的是網絡共享權限,整個共享目錄的權限還和目錄自身的系統權限有關。 |
rpc.lockd(非必要) | 可以來鎖定文件,用於多客戶端同時寫入。 |
rpc.statd(非必要) | 檢查文件的一致性,與rpc.lockd有關。c、d兩個服務需要客戶端服務器端同時開啟才可以;rpc.statd:監聽來自其它主機重啟的通知,並且管理本地系統重啟時主機列表。 |
rpc.idmapd | 名字映射后台進程。 |
2、NFS要共享的目錄 NFS客戶端地址(權限參數)
NFS共享的目錄:為NFS服務端要共享的實際目錄,要用絕對路徑,如(/data)。注意共享目錄的本地權限,如果需要讀寫共享,一定要讓本地目錄可以被NFS客戶端的用戶(nfsnobody)讀寫。
NFS客戶端地址:為NFS服務端授權的可訪問共享目錄的NFS客戶端地址,可以為單獨的IP地址或主機名、域名等,也可以為整個網段地址,還可以用“*”來匹配所有客戶端服務器,這里所謂的客戶端一般來說就是前端的業務服務器,例如:Web服務,詳見下表。
權限參數集:對授權的NFS客戶端的訪問權限設置。
3、指定NFS客戶端地址的配置詳細說明
客戶端地址 | 具體地址 | 說明 |
---|---|---|
授權單一客戶端訪問NFS | 192.168.56.101 | 一般情況下,生產環境中此配置不多 |
授權整個網段可訪問NFS | 192.168.56..0/24 | 其中的24等同於255.255.255.0,指定網段為生產環境中最常見的配置。配置簡單、維護方便 |
授權整個網段可訪問NFS | 172.0.0.* | 指定網段的另外寫法(不推薦使用) |
授權某個域名客戶端訪問 | nfs.nulige.com | 此方法生產環境中一般情況不常用 |
授權某個域名客戶端訪問 | *nulige.com | 此方法生產環境中一般情況不常用 |
4、NFS Client掛載參數詳解
參數 | 參數功能 | 默認參數 |
---|---|---|
fg、bg | 當在客戶端執行掛載時,可選擇是前台(fg)還是在后台(bg)執行。若在前台執行,則mount會持續嘗試掛載,直到成功或掛載時間超時為止,若在后台執行,則mount會在后台持續多次進行mount,而不會影響到前台的其他程序操作。如果網絡聯機不穩定,或是服務器常常需要開關機,建議使用bg比較妥當。 | fg |
soft、hard | 當NFS Client以soft掛載Server時,若網絡或Server出現問題,造成Client和Server無法傳輸資料,Client就會一直嘗試,直到timeout后顯示錯誤才停止.若使用soft mount的話,可能會在timeout出現時造成資料丟失,故一般不建議使用。 若用hard模式掛載硬盤時,剛好和soft相反,此時Client會一直嘗試連線到Server,若Server有回應就繼續剛才的操作,若沒有回應NFS Client會一直嘗試,此時無法umount或kill,所以常常會配合intr使用。這是默認值。 | hard |
intr | 當時用hard掛載的資源timeout后,若有指定intr參數,可以在timeout后把它中斷掉,者避免出問題時系統整個被NFS鎖死,建議使用intr。 | 無 |
rsize、wsize | 讀出(rsize)與寫入(wsize)的區塊大小(block size),這個設置值可以影響客戶端與服務器端傳輸數據的緩沖存儲量,一般來說,如果在局域網內(LAN),並且客戶端與服務器端都具有足夠的內存,這個值可以設置大一點,比如說65535(bytes),提升緩沖區塊將可提升NFS 文件系統的傳輸能力。但設置的值也不要太大,最好以網絡能夠傳輸的最大值為限。 | Centos6 默認值: rsize=131072 wsize=131072 |
proto=udp | 使用UDP協定來傳輸資料,在LAN中會有比較好的性能。若要跨越Internet的話,使用proto=udp多傳輸的數據會有比較好的糾錯能力。 | proto=udp |
可通過man nfs查看上述參數信息。如果追求極致,可以使用如下掛載參數: mount -t nfs -o fg,hard,intr,rsize=131072,wsize=131072 172.16.1.31:/data/ /mnt | ||
但是如果考慮以簡單、易用為原則,可直接選擇默認值就可以 mount -t nfs 172.16.1.31:/data/ /mnt |
5、mount -o 參數對應選項
mount命令-o選項后面可以接的參數,注意,有些選項只有出現在/etc/fstab里面才有效,下面這些選項可以應用在絕大多數文件系統上,但是sync僅適合ext2、ext3、fat、vfat和ufs等文件系統。
參數 | 參數意義 | 系統默認值 |
---|---|---|
suid、nosuid | 當掛載的文件系統上有任何SUID的程序時,只要使用nosuid就能取消設置SUID的功能。 | suid |
rw、 ro | 可以指定文件系統是只讀(ro)或讀寫(rw)。 | rw |
dev、nodev | 是否可以保留裝置文件的特殊功能,一般來說只有/dev才會有特殊的裝置,因此可以選擇nodev。 | dev |
exec、noexec | 是否具有執行文件的權限,如果想要掛載的僅是普通資源數據區(如:圖片、附件),那么可以選擇noexec。 | exec |
user、nuser | 是否允許用戶進行文件的掛載與卸載功能,如果要保護文件系統,最好不要提供用戶進行掛載與卸載。 | nouser |
auto、noauto | 這個auto指的是“mount -a”時會不會被掛載的項目,如果不需要這個分區隨時被掛載,可以設置為noauto | auto |
async | 涉及文件系統I/O的操作都是異步處理,即不會同步寫到磁盤,此參數會提高性能,但會降低數據的安全性,一般情況下,生產環境下不推薦使用,除非對性能要求很高,但是對數據可靠性不太要求的場合。 | |
sync | 該參數和async相反。有I/O操作時,都會同步處理I/O,即把數據同步寫入吸盤,此參數會犧牲一點I/O性能,但是,換來的是掉電后數據的安全性。 | |
atime | 在每一次數據訪問時,會同步更新訪問文件的inode時間戳,是默認選項。 在高並發的情況下,建議通過明確加上noatime,來取消這個默認選項,以達到提升I/O性能,優化I/O的目的。 | atime |
defaults | 這個是fstab里的默認值,包括rw、suid、dev、exec、auto、nouser、and async,默認情況大部分都是默認值。 | |
nodirname | 不更新文件系統上的directory inode時間戳,高並發環境,推薦顯示應用該選項,可以提高系統I/O性能。 | |
remount | 嘗試重新掛載一個已經掛載了的文件系統,這通常被用來改變一個文件系統的掛載標志,從而使得一個只讀文件系統變的可寫,這個動作不會改變設備或者掛載點。當系統故障時進入single或rescue模式修復系統時,會發現根文件系統經常會變成只讀文件系統,不允許修改,此時該命令就派上用場了。具體命令為:“mount -o remount,rw /”表示將根文件系統重新掛載使得可寫。single或rescue模式修復系統時這個命令十分重要。 | |
dirsync | 目錄更新時間同步寫入磁盤 |
6、NFS配置權限設置常用參數說明
參數名稱 | 參數用途 |
---|---|
rw | 讀寫權限 |
ro | 只讀權限 |
sync | 請求或寫入數據時,數據同步寫入到NFS Server的硬盤后才返回。優點:數據安全不會丟;缺點:性能比不啟動該參數要差 |
async | 寫入時數據會先寫入到內存緩沖區,直到硬盤有空檔才會再寫入磁盤,這樣可以提升寫入效率!風險為若服務器宕機或不正常關機,不會緩沖未寫入磁盤的數據(解決辦法:服務器主板電池或UPS不間斷電源) |
no_root_squash | 訪問NFS Server共享目錄的用戶如果是root的話,它對該共享目錄具有root權限。這個配置原本是為無盤客戶端准備的。用戶應避免使用。 |
root_squash | 如果訪問NFS Server共享目錄的用戶時root,則它的權限將被壓縮成匿名用戶,同時它的UID和GID通常會變成nfsnobody賬號身份。 |
all_squash | 不管訪問NFS Server共享目錄的用戶身份如何,它的權限都將被壓縮成匿名用戶,同時它的UID和GID都會變成nfsnobody帳號身份。在早期多個NFS 客戶端同時讀寫NFS Server數據時,這個參數很有用。 在生產中配置NFS 的重要技巧: l)確保所有客戶端服務器對NFS共享目錄具備相同的用戶訪問權限 a.all_squash 把所有客戶端都壓縮成固定的匿名用戶(UID相同) b.就是anonuid,anongid 指定的UID和GID的用戶。 2)所有的客戶端和服務端都需要有一個相同的UID和GID的用戶,即nfsnobody(UID必須相同)。 |
anonuid | 參數以anon*開頭即指anonymous匿名用戶,這個用戶的UID設置值通常為nfsnobody的UID值,當然也可以自行設置這個UID值。但是,UID必須存在於/etc/passwd 中。在多NFS Clients時,如多台Web Server共享一個NFS目錄,通過這個參數可以使得不同的NFS Clients寫入的數據對所有NFS Clients保持同樣的用戶權限,即為配置的匿名UID對應用戶權限,這個參數很有用,一般默認即可。 |
anongid | 同anonuid,區別就是把uid(用戶id)換成gid(組id)。 |
帶底紋標記的表示為常用參數,更多可以參考man exports |
7、NFS服務文件或命令的說明
NFS常用路徑 | 說明 |
---|---|
/etc/exports | NFS服務主配置文件,配置NFS具體共享服務的站點,默認內容為空。以單行為單位。 [root@nfs01 ~]# cat /etc/exports # share /data by rsq for everyone at 20180127 /data 172.16.1.0/24(rw,sync) |
/usr/sbin/exportfs | NFS服務的管理命令。例如:可以加載NFS配置生效,還可以直接配置NFS共享目錄,即無需配置/etc/exports實現共享. [root\@nfs01 \~]# /usr/sbin/exportfs -rv \<==加載配置生效,等價優雅重啟/etc/init.d/nfs reload exporting 172.16.1.0/24:/data 這里有一個服務平滑重啟的概念,即超市、銀行到了關門時間了,但還是會繼續提供服務給已經在門里的人,但是新來的就會被擋在門外了。網站服務平滑重啟,是提升用戶體驗必須要考慮的。 exportfs不但可以加載配置生效,也可以通過命令直接共享目錄。越過/etc/exportfs,但是重啟失效。 |
/usr/sbin/showmount | 常用在客戶端,查看NFS配置及掛載結果的命令。 show mount information for an NFS server 配置nfsserver,分貝在服務器及客戶端查看掛載情況。 |
/var/lib/nfs/etab | NFS配置文件的完整參數設定的文件(有很多沒有配置但是默認就有的NFS參數)。 |
/proc/mounts | 客戶端掛載參數 [root@web01 ~]# grep “mnt” /proc/mounts 172.16.1.31:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.8,minorversion=0,local_lock=none,addr=172.16.1.31 0 0 |
/var/lib/nfs/rmtab | 客戶端訪問服務器exports的信息列表 |