一、下載依賴包
本來想的是在本地的centos虛擬機(jī)上使用yum命令下載安裝包,有嘗試過yum install --downloadonly --downloaddir=<你的目錄> nfs-utils,但是下載到的文件只有nfs-utils文件本身的rpm包,不包括任何的依賴,問了下AI,還有一種方法,repotrack --download_path=<你的目錄> nfs-utils,本地的虛擬機(jī)執(zhí)行報錯,就沒再折騰了。直接問AI在centos7.9.2009上安裝nfs-utils需要什么依賴包,AI給了結(jié)果。
序號 安裝包名稱 說明
1 libtirpc-0.2.4-0.16.el7.x86_64.rpm 傳輸層RPC庫
2 tcp_wrappers-7.6-77.el7.x86_64.rpm 網(wǎng)絡(luò)訪問控制工具
3 libbasicobjects-0.1.1-32.el7.x86_64.rpm 基礎(chǔ)對象庫
4 libcollection-0.7.0-32.el7.x86_64.rpm 集合庫
5 libevent-2.0.21-4.el7.x86_64.rpm 事件通知庫
6 libref_array-0.1.5-32.el7.x86_64.rpm 引用數(shù)組庫
7 libpath_utils-0.2.1-32.el7.x86_64.rpm 路徑處理工具庫
8 libini_config-1.3.1-32.el7.x86_64.rpm INI配置文件解析庫
9 libnfsidmap-0.25-19.el7.x86_64.rpm NFS用戶ID映射庫
10 keyutils-1.5.8-3.el7.x86_64.rpm Linux密鑰管理工具
11 rpcbind-0.2.0-49.el7.x86_64.rpm 通用地址與RPC程序號映射服務(wù)(必需)
12 libverto-libevent-0.2.5-4.el7.x86_64.rpm libverto的libevent事件循環(huán)模塊
13 quota-4.01-19.el7.x86_64.rpm 磁盤配額管理工具
14 quota-nls-4.01-19.el7.noarch.rpm 磁盤配額工具的國家語言支持
15 gssproxy-0.7.0-30.el7_9.x86_64.rpm GSSAPI代理(可能為可選,但包含在完整集合中)
16 nfs-utils-1.3.0-0.68.el7.x86_64.rpm NFS服務(wù)主程序包
知道依賴包后,直接登錄阿里云的鏡像網(wǎng)站根據(jù)文件名下載。下載完后,按照順序進(jìn)行安裝就行。
二、服務(wù)端配置,固定nfs使用的端口
默認(rèn)編輯的配置文件為/etc/nfs.conf文件,但是服務(wù)端沒有這個配置文件,直接配置/etc/default/nfs-kernel-server(服務(wù)端為基于debian的操作系統(tǒng))。
1、為各個服務(wù)設(shè)置固定端口
在文件中找到或創(chuàng)建對應(yīng)的段落,并添加或修改 port 參數(shù)。
1》為 mountd 設(shè)置固定端口:在 [mountd] 段落中設(shè)置 port。
2》為 nfsd 設(shè)置監(jiān)聽端口:在 [nfsd] 段落中設(shè)置 port。通常 NFS 主服務(wù)默認(rèn)使用 2049 端口,如果需要修改可以在這里指定 。
3》為 statd 設(shè)置固定端口:在 [statd] 段落中設(shè)置 port(監(jiān)聽端口)和 outgoing-port(發(fā)出通知的端口)。
# /etc/nfs.conf
[nfsd]
# 設(shè)置內(nèi)核 NFS 服務(wù)監(jiān)聽的端口,默認(rèn)為2049,通常無需修改
# port=2049
[mountd]
# 設(shè)置 mountd 服務(wù)的端口 (TCP 和 UDP)
port=40001
[lockd]
# 設(shè)置 nlockmgr 服務(wù)的端口 (TCP 和 UDP)
port=40002
[statd]
# 設(shè)置 statd 服務(wù)的端口 (TCP 和 UDP)
port=40003
配置/etc/default/nfs-kernel-server,設(shè)置 mountd 的端口和 nfsd 的選項
# Options for rpc.mountd.
RPCMOUNTDOPTS="--port 40001"
# Options for rpc.nfsd.
RPCNFSDOPTS="--port 2049"
編輯 /etc/default/nfs-common,設(shè)置 statd 的端口
# Options for rpc.statd.
STATDOPTS="--port 40002 --outgoing-port 40003"
NEED_STATD="yes"
2、為 lockd (NLM) 配置內(nèi)核參數(shù)
lockd 服務(wù)的端口無法在上述配置文件中設(shè)置,需要通過內(nèi)核模塊參數(shù)或 sysctl 來配置,sysctl -p來生效。
fs.nfs.nlm_tcpport = 40004
fs.nfs.nlm_udpport = 40004
三、服務(wù)端共享目錄配置
編輯/etc/export,文件編輯完成執(zhí)行exportfs -ra生效配置。
/data 客戶端ip(rw,sync,no_root_squash,no_subtree_check,insecure)
參數(shù)解析:
- 基本訪問權(quán)限選項
這類選項控制客戶端對共享目錄最基本的讀寫能力。
選項 默認(rèn)值 說明
ro 默認(rèn) 以只讀方式共享目錄。客戶端無法修改其中的內(nèi)容。
rw 允許客戶端進(jìn)行讀寫操作。
sync 默認(rèn) 同步寫入模式。服務(wù)器在處理下一個請求前,必須將數(shù)據(jù)更改寫入磁盤。這保證了數(shù)據(jù)一致性,但性能稍低。
async 異步寫入模式。服務(wù)器會先告知客戶端寫入完成,稍后再將數(shù)據(jù)寫入磁盤。此選項可以提升性能,但如果在數(shù)據(jù)未實際寫入磁盤前服務(wù)器重啟或崩潰,可能導(dǎo)致數(shù)據(jù)丟失或損壞。
secure 默認(rèn) 要求NFS請求源端口小于1024(即特權(quán)端口)。通常用于增強(qiáng)安全性。
insecure 允許來自非特權(quán)端口(>=1024)的NFS請求。
- 用戶身份映射選項
NFS的核心挑戰(zhàn)之一是處理不同機(jī)器上 UID/GID 的不一致。這類選項用于解決這個問題,特別是針對root用戶。
選項 默認(rèn)值 說明
root_squash 默認(rèn) 壓縮root用戶權(quán)限。將來自客戶端root用戶的請求映射到服務(wù)器上的匿名用戶(通常是 nfsnobody 或 nobody),從而防止客戶端root在服務(wù)器上擁有超級用戶權(quán)限。
no_root_squash 不壓縮root用戶權(quán)限。允許客戶端的 root 用戶以服務(wù)器上的 root 身份訪問文件系統(tǒng)。這會帶來巨大安全風(fēng)險,除非有特殊需求,否則強(qiáng)烈不建議使用。
all_squash 壓縮所有用戶。將所有客戶端用戶(包括root)的請求都映射到匿名用戶。這在導(dǎo)出公共目錄(如 /home/ftp)時非常有用。
anonuid / anongid 通常為65534 (nfsnobody) 配合 root_squash 或 all_squash 使用,手動指定匿名用戶應(yīng)被映射到的特定UID和GID。例如:all_squash,anonuid=1000,anongid=1000 會將所有訪問者映射為 UID 1000 的用戶。
- 文件系統(tǒng)行為和性能選項
選項 說明
wdelay 默認(rèn)。如果NFS服務(wù)器檢測到有相關(guān)的寫入請求即將到來,它會稍等片刻,將多個寫入請求合并后一次性寫入磁盤,以提高效率。
no_wdelay 關(guān)閉寫入延遲。當(dāng)收到大量互不相關(guān)的小請求時,延遲反而會降低性能,此時可以啟用此選項。注意: 該選項通常與 sync 配合使用才有效。
subtree_check 啟用子樹檢查。當(dāng)只導(dǎo)出一個文件系統(tǒng)下的子目錄(而非整個文件系統(tǒng))時,服務(wù)器需要額外檢查每個請求的文件是否在導(dǎo)出的子樹內(nèi)。這增加了安全性,但可能降低可靠性。
no_subtree_check 新版本默認(rèn)。禁用子樹檢查??梢蕴嵘煽啃?,但會略微降低安全性。
nohide 如果服務(wù)器在一個導(dǎo)出的文件系統(tǒng)內(nèi)部掛載了另一個文件系統(tǒng),默認(rèn)情況下客戶端掛載父目錄后,在掛載點處會看到一個空目錄(被“隱藏”)。啟用nohide可以讓客戶端直接穿透看到內(nèi)部掛載的文件系統(tǒng)內(nèi)容。
crossmnt 這是一個更強(qiáng)的“不隱藏”選項。如果父文件系統(tǒng)設(shè)置了crossmnt,客戶端在掛載父目錄后,可以自動訪問其下掛載的所有子文件系統(tǒng),即使這些子文件系統(tǒng)沒有被顯式導(dǎo)出。
- 安全和高級選項
選項 說明
fsid=... 用于明確標(biāo)識一個導(dǎo)出。在NFSv4中,需要為導(dǎo)出根(通常是整個NFS共享的根)設(shè)置 fsid=0 或 fsid=root。對于普通導(dǎo)出,它常用于確保文件系統(tǒng)有唯一的標(biāo)識符,特別是在使用nohide或存在同名設(shè)備時。
sec=... 指定該導(dǎo)出允許使用的安全模式。例如 sec=krb5 要求使用Kerberos V5進(jìn)行用戶認(rèn)證??梢灾付ǘ鄠€,如 sec=krb5:krb5i:krb5p。
xprtsec=... 在Linux NFS服務(wù)器上,此選項用于要求客戶端使用傳輸層安全性(TLS),例如 xprtsec=tls 要求客戶端必須協(xié)商一個TLS會話才能訪問該導(dǎo)出
四、客戶端文件夾掛載
1、手動掛載
mount -o noresvport,soft 192.168.1.100:/srv/nfs/share /mnt/nfs
參數(shù)解析:
1》noresvport: 這個參數(shù)的意思是“不使用保留端口”。它的作用是讓 NFS 客戶端在網(wǎng)絡(luò)中斷后重新連接時,使用一個新的 TCP 端口。這可以避免因使用舊端口導(dǎo)致的重連失敗,特別適合需要高可用性的場景,比如連接發(fā)生故障轉(zhuǎn)移的 NAS 或云存儲 。簡單來說,它讓你的 NFS 連接在面對網(wǎng)絡(luò)波動時更“堅強(qiáng)”。默認(rèn)使用的端口是<1024的,使用這個參數(shù),連接的端口就是>1024的,但是這個參數(shù)要配合export文件中的insecure一起使用,單獨使用會報錯。
2》soft: 這個參數(shù)決定了當(dāng) NFS 服務(wù)器無響應(yīng)時,客戶端的表現(xiàn)。設(shè)置為 soft 后,如果客戶端嘗試多次重傳(retransmissions)后仍無響應(yīng),就會向訪問文件的應(yīng)用程序返回一個錯誤(I/O error),而不是讓進(jìn)程“卡死” 。這樣可以避免應(yīng)用程序因 NFS 服務(wù)中斷而無休止地等待。
2、自動掛載
vi /etc/fstab
192.168.1.100:/srv/nfs/share /mnt/nfs nfs noresvport,soft,_netdev 0 0
參數(shù)解析:
noresvport,soft,_netdev: 掛載選項。這里必須添加 _netdev 選項。它告訴系統(tǒng)這是一個網(wǎng)絡(luò)設(shè)備,需要在網(wǎng)絡(luò)就緒后再嘗試掛載,否則可能會導(dǎo)致開機(jī)過程卡住或掛載失敗。我們還將手動掛載時的參數(shù)原樣搬了過來。