以下所使用的環境為:
虛擬化軟件:VMware Workstation 17 Pro
麒麟系統版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
一、 NFS服務概述
NFS(Network File System),即網絡文件系統。是一種使用于分散式文件協議通過網絡讓不同的機器、不同的操作系統能夠分享個人數據,讓應用程序通過網絡可以訪問位于服務器磁盤中的數據。NFS在文件傳輸或信息傳輸的過程中,依賴于RPC協議。RPC(Remote Procedure Call),即遠程過程調用。是客戶端能夠執行其它系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的,能實現基于網絡的資料共享,是因為NFS使用了PRC提供的傳輸協議,可以說NFS是RPC的一個程序。NFS一般使用在中小型網站集群后端存儲,存儲一些靜態的資源(如圖片、附件)。如果是大型網站,則會使用mooseFS-mfs。在企業應用中,使用FastDFS-fastdfs較多。
NFS可以通過網絡讓不同的機器、不同的操作系統彼此分享文件。當用戶想使用遠程文件時,只要用mount命令就可以把遠程文件系統掛載到自己的文件系統下。NFS支持的功能很多,不同的功能使用不同的程序來啟動,并且會主動向RPC服務注冊所采用的端口和功能信息。RCP服務使用固定端口111監聽來著NFS客戶端的請求。
二、RPC守護進程
NFS服務依賴于RPC服務,至少需要啟動3個系統守護進程。
- **nfsd:**NFS的守護進程,主要功能是管理客戶端是否能夠登錄服務器
- mountd:RPC安裝守護進程,主要功能是管理NFS的文件系統。當客戶端順利通過rpc.nfsd登錄NFS服務后,在使用NFS服務所提供的憑證前,還必須通過文件使用權限的驗證。讀取NFS的配置文件/etc/exports來比對客戶端的權限。
- rpcbind:進行端口映射。當客戶端嘗試連接并使用RPC服務器提供的服務,rpcbind 會將所管理的端口(服務對應的端口)提供給客戶端,從而使客戶可以通過該端口向服務器請求服務。
三、NFS軟件包
1.RPC主程序:rpcbind
在啟動RPC服務之前,需要做好端口的映射工作。在啟動任何一個RPC服務之前,都需要啟動rpcbind。
查看本機是否安裝rpcbind,可以看到rpcbind是默認安裝好,但是未啟動、未加入開機自啟
2. NFS主程序:nfs-utils
提供rpc.nfsd和rpc.mountd這兩個NFS daemons 和其他相關文檔、說明文件、執行文件等。
查看本機是否安裝nfs-utils,默認已經安裝
3. 管理NFS目錄列表:exportfs
exportfs命令需要參考配置文件/etc/exports。
常用參數
參數 | 說明 |
---|---|
-a | 輸出配置文件中的內容,或全選配置文件中目錄 |
-r | 重新讀取配置文件中的設置,并立即生效,無需重啟服務 |
-u | 卸載某一個目錄 |
-v | 顯示共享目錄 |
4. 客戶端查詢指令:showmount
exportfs 是NFS服務端所使用的命令,而 showmount 主要用在Client端。showmount 可以用來查看 NFS 服務器共享出來的目錄。
通過查詢可以發現 showmount 是由 nfs-utils 軟件包提供的
查詢服務端的共享
showmount -e 192.168.110.1
四、NFS配置文件
NFS服務器共享目錄時所使用的配置文件為 /etc/exports,文件默認不存在,需要手動創建
/share 192.168.110.0/24(ro)
/share 192.168.110.0/24(ro) 192.168.120.0/24(rw) # 存在多個客戶端,以空格分隔
- /share:共享目錄的絕對路徑
- 192.168.110.0/24:允許訪問的客戶端
- ro:只讀,共享選項,可設置其他文件訪問權限
客戶端常用配置
客戶端配置 | 說明 |
---|---|
192.168.110.1 | 指定主機 |
192.168.110.1/24 192.168.110.* | 指定網段 |
www.meaauf.com | 指定域名 |
*.meaauf.com | 指定域 |
* | 所有主機 |
權限選項
當客戶端在掛載NFS服務器共享目錄時,會根據NFS服務器的權限選項來設置共享權限。
訪問權限選項 | 說明 |
---|---|
ro | 只讀 |
rw | 讀寫 |
NFS用戶映射選項
選項 | |
---|---|
all_squash | 將遠程用戶訪問的所有普通用戶和其所屬用戶組都映射為匿名用戶或用戶組(nobody) |
no_all_squash | 不將遠程訪問的普通用戶和其所屬組映射為匿名用戶或用戶組【默認】 |
root_squash | 將root用戶和所屬用戶組映射為匿名用戶或用戶組【默認】 |
no_root_squash | 不將root用戶和所屬用戶組映射為匿名用戶或用戶組 |
anonuid=xxx | 將遠程訪問的所有用戶都映射為匿名用戶,指定該匿名用戶賬號的UID(匿名用戶為服務端的本地賬戶) |
anongid=xxx | 將遠程訪問的所有用戶組都映射為匿名組,指定該匿名組賬號的UID(匿名組為服務端的本地組) |
NFS其他訪問權限
選項 | |
---|---|
secure | 限制客戶端只能從小于1024的TCP/IP端口連接NFS服務器【默認】 |
insecure | 允許客戶端從大于1024的TCP/IP端口連接NFS服務器 |
sync | 將數據同步寫入內存緩存區和磁盤中,效率降低,可以保證數據一致性 |
async | 將數據先保存在內存緩沖區,必須時才寫入磁盤 |
wdelay | 檢測是否存在相關的寫操作,將這些寫操作一起執行,提高效率【默認】 |
no_wdelay | 有寫操作則立即執行,應該與sync一起使用 |
subtree-check | 如果輸出目錄是一個子目錄,則NFS服務器將檢查其父目錄的權限【默認】 |
no_subtree_check | 輸出目錄是一個子目錄,NFS不會檢查其父目錄的權限,提高效率 |
五、NFS服務器部署
案例需求
- 將Kylin-1搭建為內網YUM服務器,為Kylin-2通軟件包
- 在Kylin-1上開啟NFS服務,共享路徑為YUM倉庫目錄
- 僅允許Kylin-2訪問目錄,權限為讀寫
節點設置
主機 | 網絡信息 | 說明 |
---|---|---|
Kylin-1 | 192.168.110.1/24 | NFS服務器 |
Kylin-2 | 192.168.110.2/24 | 測試客戶端 |
[Step1]:
Kylin-1配置:安裝所需軟件
yum install -y nfs-utils rpcbind
[Step2]:
Kylin-1配置:編輯配置文件
vim /etc/exports# 寫入下列內容
/mnt/cdrom 192.168.110.2(rw)
[Step3]:
Kylin-1配置:查看rpcbind服務狀態,默認狀態為關閉
[Step4]:
Kylin-1配置:啟動rpcbind和nfs-server,并加入開機自啟,調整防火墻策略
systemctl enable --now rpcbind.service
systemctl enable --now nfs-server.service
firewall-cmd --add-service=rpc-bind --permanent # 防火墻需要放行NFS的三個組件
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload
[Step5]:
Kylin-1驗證:查看NFS的權限目錄,可以看到所有默認配置
cat /var/lib/nfs/etab
[Step6]:
Kylin-1驗證:查看本地NFS共享目錄
exportfs -a
[Step7]:
Kylin-1驗證:顯示本地系統中注冊到rpcbind協議版本2的所有RPC服務
rpcinfo -p localhost
[Step8]:
Kylin-2配置:啟動RPC守護進程和nfs服務
systemctl enable --now nfs-server.service
systemctl enable --now rpcbind.service
[Step9]:
Kylin-2驗證:查看服務端的全部共享目錄
showmount -e 192.168.110.1
[Step10]:
Kylin-2驗證:新建目錄/mnt/nfs,將目錄掛載到/mnt/nfs(掛載點需要提前創建)
mkidr /mnt/nfs
mount 192.168.110.1:/mnt/cdrom /mnt/nfs
[Step11]:
Kylin-2配置:配置yum倉庫文件,將原有的倉庫文件備份
cd /etc/yum.repos.d/
mv kylin_x86_64.repo{,.bak}
vim nfs.repo# 輸入下列內容
[yum]
name=yum
baseurl=file:///mnt/nfs
enabled=1
gpgcheck=0
[Step12]:
Kylin-2配置:清除YUM的緩存目錄,重新創建緩存數據
yum clean all # 清除YUM的緩存目錄
yum makecache # 重新創建緩存數據
[Step13]:
Kylin-2驗證:嘗試下載vsftpd
[Step14]:
Kylin-2配置:將NFS共享寫入配置文件中,以實現開機自動掛載
vim /etc/fstab# 追加下列內容
192.168.110.1:/mnt/cdrom /mnt/nfs nfs4 defaults 0 0
[Step15]:
Kylin-2配置:客戶端卸載NFS掛載
umount /mnt/nfs # 如果顯示[device is busy],可以添加 -lf 參數強制卸載
六、autofs自動掛載
autofs自動掛載文件系統服務,需要后臺automount進程支持。缺省配置下,客戶端的NFS訪問在系統重啟后就消失了;如果將掛載寫入/etc/fstab文件中,會實現永久掛載,即使不訪問,該掛載點仍然是存在;autofs可以實現按需掛載,當你訪問該目錄時會自動掛載,超時會自動卸載。掛載點也無需提前新建,autofs會自動幫我們新建該目錄。
autofs服務的配置文件
-
/etc/auto.master:主配置文件
-
/etc/auto.xxx:映射文件,文件必須以auto開頭,后綴無任何要求
默認情況下,麒麟操作系統的鏡像中不存在autofs的安裝包
主配置文件的編寫方式:
/misc /etc/auto.misc # autofs提供給我們的示例文件
- /misc:掛載點的父目錄
- /etc/auto.misc:掛載點的映射文件
查看掛載點的映射文件 /etc/auto.misc
[Step1]:
為了方便后續實驗,此處重新設置一個NFS共享
mkdir /share
vim /etc/exports# 寫入下列內容,經過測試好像[192.168.110.*]無法匹配該網段
/share 192.168.110.0/24(rw)
[Step2]:
重新讀取配置文件
exportfs -r
七、Kylin桌面版autofs配置
麒麟操作系統桌面版基于Ubuntu,包管理工具使用的是apt。
案例需求
- 在Kylin-1上存在1個NFS共享,共享的目錄為 /mnt/cdrom
- 將共享的目錄掛載到 Desktop 上的 /mnt/nfsshare
- 共享權限為讀寫
節點設置
主機 | 網絡信息 | 說明 |
---|---|---|
Kylin-1 | 192.168.110.1/24 | NFS服務器 |
Desktop | 192.168.110.4/24;外網網卡(訪問外網) | Kylin V10桌面版 |
[Step1]:
安裝nfs-common
sudo apt install -y nfs-common
> 輸入當前用戶密碼
[Step2]:
啟動rpc守護進程和NFS服務
sudo systemctl start rpcbind
sudo systemctl start nfs-client.target
[Step3]:
顯示NFS服務器的共享信息
showmount -e 192.168.110.1
[Step4]:
安裝autofs服務
sudo apt-get install autofs
[Step5]:
編輯autofs主配置文件
sudo vim /etc/auto.master# 寫入下列內容,/mnt為掛載點的父目錄
/mnt /etc/auto.mnt
[Step6]:
將示例文件拷貝為映射文件,編輯映射文件
sudo cp /etc/auto.misc /etc/auto.mnt
sudo vim /etc/auto.mnt# 寫入下列內容
nfsshare -fstype=nfs,rw 192.168.110.1:/share
[Step7]:
查看/mnt目錄,可以看到此時不存在任何目錄。啟動autofs服務后,會自動創建該目錄
sudo systemctl start autofs
八、Kylin服務器版autofs配置
麒麟操作系統服務器版的的鏡像源中默認不存在autofs安裝包,需要連接互聯網使用第三方源。
案例需求
- 在Kylin-1上存在1個NFS共享,共享的目錄為 /mnt/cdrom
- 將共享的目錄掛載到 Desktop 上的 /mnt/nfsshare
- 共享權限為讀寫
節點設置
主機 | 網絡信息 | 說明 |
---|---|---|
Kylin-1 | 192.168.110.1/24 | NFS服務器 |
Kylin-3 | 192.168.110.3/24;外網網卡(訪問外網) | Kylin服務器版 |
[Step1]:
安裝rpcbind和nfs-utils
yum install -y rpcbind nfs-utils
[Step2]:
啟動rpc守護進程和nfs服務
systemctl start rpcbind.service
systemctl start nfs.service
[Step3]:
查看NFS服務器的共享
showmount -e 192.168.110.1
[Step4]:
安裝autofs服務
yum install -y autofs
[Step5]:
編輯autofs主配置文件
vim /etc/auto.master# 寫入下列內容
/mnt /etc/auto.mnt
[Step6]:
編輯autofs映射文件
cp /etc/auto.misc /etc/auto.mnt
vim /etc/auto.mnt# 修改內容如下
nfsshare -fstype=nfs,rw 192.168.110.1:/share
[Step7]:
查看mnt目錄內容,可以看到為空。啟動autofs服務并加入到開機自啟,然后訪問掛載點目錄,此時mnt目錄下會自動創建掛載點
ll /mnt/
systemctl enable --now autofs.service
ll /mnt/nfsshare