linux部署NFS和autofs自動(dòng)掛載實(shí)現(xiàn)過程
(一)NFS
1. 什么是NFS
NFS 是Network File System的縮寫,即網(wǎng)絡(luò)文件系統(tǒng)。英文Network File System(NFS),是基于TCP/IP協(xié)議的應(yīng)用,可以通過網(wǎng)絡(luò),讓不同的機(jī)器、不同的操作系統(tǒng)可以共享彼此的文件。
NFS在文件傳送或信息傳送過程中依賴于RPC服務(wù)。RPC:遠(yuǎn)程過程調(diào)用 (Remote Procedure Call) 是能使客戶端執(zhí)行其他系統(tǒng)中程序的一種機(jī)制。
NFS服務(wù)器可以看作是一個(gè)FILE SERVER。它可以讓你的機(jī)器(客戶端)通過網(wǎng)絡(luò)將遠(yuǎn)端的NFS SERVER共享目錄MOUNT到自己的系統(tǒng)中。
2.NFS守護(hù)進(jìn)程
- nfsd:它是基本的NFS守護(hù)進(jìn)程,主要功能是管理客戶端是否能夠登錄服務(wù)器;
- mountd:它是RPC安裝守護(hù)進(jìn)程,主要功能是管理NFS的文件系統(tǒng)。當(dāng)客戶端登錄到NFS服務(wù)器后,必須通過文件使用權(quán)限的驗(yàn)證。它會(huì)讀取NFS的配置文件/etc/exports來對(duì)比客戶端權(quán)限。
- portmap:主要功能是進(jìn)行端口映射工作。
3.RPC服務(wù)
RPC(Remote Procedure Call)即遠(yuǎn)程過程調(diào)用,記錄NFS服務(wù)器使用的端口號(hào),在NFS客戶端發(fā)送請(qǐng)求時(shí),將對(duì)應(yīng)的端口號(hào)信息傳遞給客戶端,確保客戶端與服務(wù)端能連接上。
注意:在啟動(dòng)NFS服務(wù)之前,必須先啟動(dòng)PRC服務(wù),在Centos7中叫做 rpcbind 服務(wù),否則 NFS Server 無法向RPC注冊(cè)信息,另外,如果RPC服務(wù)重啟,原來注冊(cè)的NFS服務(wù)端的信息也就失效了,也必須重啟NFS服務(wù)。特別要注意的是,修改NFS配置?件后不需要重啟NFS,只需要執(zhí)? exportfs -rv 命令即可或是 systemctl reload nfs。
4. 原理
- 服務(wù)端啟動(dòng)RPC服務(wù),并開啟111端口。
- 然后服務(wù)器端啟動(dòng)NFS服務(wù),并向RPC注冊(cè)端口信息。
- 客戶端啟動(dòng)RPC(portmap服務(wù)),向服務(wù)端的RPC(portmap)服務(wù)請(qǐng)求服務(wù)端的NFS端口
- 服務(wù)端的RPC(portmap)服務(wù)反饋NFS端口信息給客戶端。
- 客戶端通過獲取的NFS端口來建立和服務(wù)端的NFS連接并進(jìn)行數(shù)據(jù)的傳輸。
[root@node2 elysia]# rpcinfo -p 192.168.240.151 program vers proto port service 1000004 tcp111 portmapper 1000003 tcp111 portmapper 1000002 tcp111 portmapper 1000004 udp111 portmapper 1000003 udp111 portmapper 1000002 udp111 portmapper
5. 部署
操作系統(tǒng)版本:centos 7
服務(wù)端:192.168.240.151/24(node1)
客戶端:192.168.240.152/24 (node2)
5.1安裝NFS服務(wù)
從原理可以看出,服務(wù)端和客戶端都是需要下載nfs-utils和rpcbind的。
yum -y install nfs-utils rpcbind
5.2配置防火墻
服務(wù)端和客戶端同時(shí)配置即可。
#iptables -F #使防火墻的策略恢復(fù)到默認(rèn)狀態(tài),沒有任何過濾規(guī)則 #iptables-save #輸出當(dāng)前的 iptables 配置和規(guī)則 #防火墻放行nfs,mountd,rpc-bind服務(wù) firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind #重載防火墻 firewall-cmd --reload
5.3創(chuàng)建服務(wù)端共享目錄
在nfs服務(wù)端上建立用于nfs文件共享的目錄,并設(shè)置足夠的權(quán)限確保其他人也有寫入權(quán)限,我們創(chuàng)建一個(gè)測(cè)試文件readme.txt。
mkdir -p /mnt/shared chmod 777 /mnt/shared echo "hello world" > hello.txt
5.4修改服務(wù)端配置文件
NFS服務(wù)程序的配置文件為/etc/exports,默認(rèn)情況下里面沒有任何內(nèi)容。我們可以按照“共享目錄的路徑允許訪問的NFS客戶端(共享權(quán)限參數(shù))”的格式,定義要共享的目錄與相應(yīng)權(quán)限。
配置 NFS(網(wǎng)絡(luò)文件系統(tǒng))服務(wù)時(shí),主要涉及兩個(gè)配置文件:/etc/exports 和 nfs.conf。以下是這些文件中常用的參數(shù):
(1)./etc/exports
這個(gè)文件用于定義哪些目錄可以被共享,以及它們的訪問權(quán)限。常用參數(shù)包括:
- 共享目錄:指定要共享的目錄路徑。
- 客戶端:指定可以訪問該目錄的客戶端,可以是 IP 地址、主機(jī)名或網(wǎng)絡(luò)段,可以使用通配符來指定網(wǎng)絡(luò)段。
訪問權(quán)限:
rw:讀寫權(quán)限。ro:只讀權(quán)限。no_root_squash:允許客戶端以 root 用戶訪問共享。默認(rèn)會(huì)將 root 權(quán)限映射為普通用戶。root_squash:當(dāng)NFS客戶端以root管理員訪問時(shí),映射為NFS服務(wù)器的匿名用戶all_squash:將所有客戶端請(qǐng)求映射為匿名用戶。
異步/同步:
async:允許 NFS 在將數(shù)據(jù)寫入磁盤之前返回響應(yīng),提高性能。sync:確保數(shù)據(jù)在響應(yīng)前寫入磁盤,增加安全性,但性能較低。
示例:
/srv/nfs 192.168.1.0/24(rw,sync,no_root_squash) /srv/nfs/docs *.example.com(ro)
(2).nfs.conf
這個(gè)文件通常位于 /etc/nfs.conf,用于配置 NFS 服務(wù)的全局參數(shù)。常用的參數(shù)包括:
[nfs]:NFS 相關(guān)設(shè)置。
vers:指定 NFS 版本。mountd_port:指定 mountd 的端口號(hào)。rpcbind_port:指定 rpcbind 的端口號(hào)。
[rpcd]:RPC 相關(guān)設(shè)置。
我們?cè)?etc/exports文件中加入以下行即可,nfs.conf文件有要求自行更改。
/mnt/shared 192.168.240.*(rw,sync,no_root_squash) #/mnt/shared:服務(wù)端共享的目錄 #192.168.240.*:允許訪問的NFS客戶端,這里是一個(gè)網(wǎng)段內(nèi)的主機(jī),也可以是某一個(gè)指定的主機(jī) #(rw,sync,no_root_squash):共享權(quán)限參數(shù)
5.5啟動(dòng)nfs并加入自啟
服務(wù)端配置即可。
systemctl start rpcbind # 啟動(dòng)rpc systemctl start nfs-server #啟動(dòng)nfs systemctl enable rpcbind #設(shè)置開機(jī)自啟 systemctl enable nfs-server #設(shè)置開機(jī)自啟
5.6客戶端創(chuàng)建掛載目錄并掛載
掛載之前,我們可以使用showmount查看一下NFS服務(wù)端的可共享目錄:
[root@node2 ~]# showmount -e 192.168.240.151 Export list for 192.168.240.151: /mnt/shared 192.168.240.*
在NFS客戶端創(chuàng)建一個(gè)掛載目錄,使用mount命令并結(jié)合-t參數(shù),指定要掛載的文件系統(tǒng)類型,并在命令后面寫上服務(wù)器IP地址,服務(wù)器上的共享目錄以及要掛載到客戶端的目錄。
mkdir -p /mnt/nfs mount -t nfs 192.168.240.151:/mnt/shared /mnt/nfs #-t nfs:掛載的文件系統(tǒng)類型為nfs #192.168.240.151:/mnt/shared:NFS服務(wù)端IP地址以及共享目錄 #/mnt/nfs:共享目錄掛載到的客戶端本地目錄
使用df -h查看掛載情況:
[root@node2 ~]# df -h | tail -n 1 192.168.240.151:/mnt/shared 18G 5.1G 13G 29% /mnt/nfs

5.7設(shè)置開機(jī)自動(dòng)掛載
上面我們雖然掛載好了,但是每次開機(jī)都需要重新掛載,非常麻煩,我們只需要在/etc/fstab文件中加入以下配置即可,之后每次開機(jī)系統(tǒng)就會(huì)幫我們自動(dòng)掛載了。
echo "192.168.240.151:/mnt/shared /mnt/nfs nfs defaults 0 0" >> /etc/fstab
5.8測(cè)試
客戶端進(jìn)入掛載目錄,查看是否存在hello.txt文件
cd /mnt/nfs cat hello.txt
[root@node2 ~]# cd /mnt/nfs [root@node2 nfs]# ls hello.txt [root@node2 nfs]# cat hello.txt hello world
出現(xiàn)hello.txt測(cè)試文件,配置完成。
5.9補(bǔ)充
卸載目錄:
umount 是一個(gè)用于卸載文件系統(tǒng)的命令。
在 Linux 和 Unix 系統(tǒng)中,使用 umount 可以安全地?cái)嚅_掛載的設(shè)備或目錄。以下是 umount 的基本用法:
基本語(yǔ)法:
umount [選項(xiàng)] <掛載點(diǎn)或設(shè)備>
示例:
1.卸載掛載點(diǎn):
umount /mnt/mydrive
這將卸載 /mnt/mydrive 目錄下的文件系統(tǒng)。
2.卸載特定設(shè)備:
umount /dev/sdb1
這將卸載 /dev/sdb1 設(shè)備。
常用選項(xiàng):
-l:懶惰卸載,立即卸載但在文件系統(tǒng)不再被使用時(shí)才真正完成。-f:強(qiáng)制卸載,即使設(shè)備忙也嘗試卸載。--timeout:超時(shí)時(shí)間。
注意事項(xiàng):
- 在卸載之前,確保沒有進(jìn)程正在使用該文件系統(tǒng)。
- 如果有數(shù)據(jù)未寫入,則可能會(huì)導(dǎo)致數(shù)據(jù)丟失。
修改超時(shí)卸載時(shí)間:
在 NFS(網(wǎng)絡(luò)文件系統(tǒng))中,修改默認(rèn)的超時(shí)卸載時(shí)間可以通過調(diào)整掛載選項(xiàng)來實(shí)現(xiàn)。NFS 的掛載通常是在 /etc/fstab 文件中配置,也可以在命令行中使用 mount 命令進(jìn)行掛載。以下是如何修改默認(rèn)超時(shí)卸載時(shí)間的方法:
(1).mount命令:
在掛載 NFS 文件系統(tǒng)時(shí),可以使用 timeo 和 retrans 選項(xiàng)來控制超時(shí)行為。
timeo:設(shè)置 NFS 客戶端的請(qǐng)求超時(shí)時(shí)間(以 1/10 秒為單位)。retrans:設(shè)置請(qǐng)求失敗后重試的次數(shù)。
例如,假設(shè)你想設(shè)置超時(shí)時(shí)間為 30 秒(即 300 個(gè) 1/10 秒),并指定重試次數(shù)為 5,可以使用如下命令:
mount -o timeo=300,retrans=5 nfs_server:/path/to/share /mnt/mountpoint
(2). 修改/etc/fstab
如果希望在系統(tǒng)啟動(dòng)時(shí)自動(dòng)掛載 NFS,并應(yīng)用相同的超時(shí)設(shè)置,可以將掛載選項(xiàng)添加到 /etc/fstab 文件中。
示例如下:
nfs_server:/path/to/share /mnt/mountpoint nfs defaults,timeo=300,retrans=5 0 0
注意事項(xiàng)
timeo的單位是 1/10 秒,因此在設(shè)置時(shí)需要將秒數(shù)乘以 10。- 調(diào)整這些參數(shù)時(shí),請(qǐng)根據(jù)網(wǎng)絡(luò)條件和應(yīng)用需求進(jìn)行合理配置,以避免過于頻繁的重試或過長(zhǎng)的等待時(shí)間。
(二)Autofs
與mount命令不同,autofs服務(wù)程序是一種Linux系統(tǒng)守護(hù)進(jìn)程,當(dāng)檢測(cè)到用戶試圖訪問一個(gè)尚未掛載的文件系統(tǒng)時(shí),將自動(dòng)掛載該文件系統(tǒng)。換句話說,將掛載信息填入/etc/fstab文件后,系統(tǒng)在每次開機(jī)時(shí)都自動(dòng)將其掛載,而autofs服務(wù)程序則是在用戶需要使用該文件系統(tǒng)時(shí)才去動(dòng)態(tài)掛載,從而節(jié)約了網(wǎng)絡(luò)資源和服務(wù)器的硬件資源。
autofs的缺點(diǎn):autofs特點(diǎn)是只有?戶請(qǐng)求時(shí)才執(zhí)?掛載,所以當(dāng)?并發(fā)訪問時(shí),開始請(qǐng)求的瞬間需要執(zhí)?掛載,性能較差,因此在?并發(fā)業(yè)務(wù)場(chǎng)景下,寧愿保持掛載也不使?autofs?動(dòng)掛載。
autofs工作原理主要基于以下幾個(gè)關(guān)鍵概念和步驟:
1. 掛載點(diǎn)和配置
autofs 通過配置文件來定義掛載點(diǎn)以及每個(gè)掛載點(diǎn)所對(duì)應(yīng)的具體文件系統(tǒng)。
最常用的配置文件是 /etc/auto.master 和相應(yīng)的子配置文件(如 /etc/auto.mnt)。
在這些文件中,你可以指定需要自動(dòng)掛載的目錄及其掛載選項(xiàng)。
2. 事件驅(qū)動(dòng)
autofs 的核心原理是事件驅(qū)動(dòng)。當(dāng)用戶嘗試訪問一個(gè)未掛載的目錄時(shí),autofs 會(huì)檢測(cè)到這個(gè)訪問請(qǐng)求并觸發(fā)掛載操作。
這種機(jī)制使得只有在需要時(shí)才會(huì)掛載文件系統(tǒng),從而節(jié)省了系統(tǒng)資源。
3. 后臺(tái)守護(hù)進(jìn)程
autofs 由一個(gè)后臺(tái)守護(hù)進(jìn)程運(yùn)行,通常為 automountd。該守護(hù)進(jìn)程負(fù)責(zé)監(jiān)視掛載請(qǐng)求,并根據(jù)配置文件中的設(shè)定自動(dòng)執(zhí)行掛載和卸載操作。
4. 超時(shí)機(jī)制
一旦文件系統(tǒng)被掛載,autofs 會(huì)啟動(dòng)一個(gè)超時(shí)計(jì)時(shí)器。
如果在預(yù)設(shè)的時(shí)間內(nèi)沒有任何對(duì)該掛載點(diǎn)的訪問,autofs 將自動(dòng)卸載該文件系統(tǒng)。
這一特性可以減少不必要的資源占用,同時(shí)提高系統(tǒng)性能。
5. 掛載方式
在掛載時(shí),autofs 會(huì)調(diào)用相應(yīng)的掛載命令(如 mount),并使用配置文件中指定的選項(xiàng)進(jìn)行掛載。例如,對(duì)于 NFS,可以指定遠(yuǎn)程服務(wù)器和共享路徑。
6. 錯(cuò)誤處理
當(dāng)發(fā)生錯(cuò)誤(如網(wǎng)絡(luò)問題)導(dǎo)致掛載失敗時(shí),autofs 能夠處理這些錯(cuò)誤,并根據(jù)配置中的選項(xiàng)決定如何響應(yīng),例如是否重試或返回錯(cuò)誤信息。
autofs 的設(shè)計(jì)理念是將掛載操作與用戶的實(shí)際需求緊密結(jié)合,通過事件驅(qū)動(dòng)和超時(shí)機(jī)制實(shí)現(xiàn)高效的資源管理。其主要優(yōu)點(diǎn)包括:
- 節(jié)省資源:僅在需要時(shí)掛載文件系統(tǒng)。
- 簡(jiǎn)化用戶操作:用戶無需手動(dòng)掛載或卸載文件系統(tǒng)。
- 自動(dòng)管理:能夠自動(dòng)卸載不再使用的文件系統(tǒng)。
這種機(jī)制特別適合于需要頻繁訪問網(wǎng)絡(luò)文件系統(tǒng)(如 NFS)的環(huán)境,提高了訪問效率和用戶體驗(yàn)。
7. 配置autofs
autofs 是一種用于自動(dòng)掛載文件系統(tǒng)的工具,通常用于在 Linux 系統(tǒng)上動(dòng)態(tài)掛載 NFS 或其他類型的文件系統(tǒng)。
它使用主配置文件和子配置文件來定義掛載規(guī)則和行為。
主配置文件格式
主配置文件通常位于 /etc/auto.master,其格式如下:
/path/to/mountpoint /etc/auto.subfile --timeout=60
解釋:
/path/to/mountpoint:指定要掛載的目錄(掛載點(diǎn))。/etc/auto.subfile:指向包含子配置的文件。--timeout=60:可選參數(shù),設(shè)置超時(shí)時(shí)間,表示在閑置 60 秒后卸載掛載點(diǎn)。
子配置文件格式
子配置文件的格式通常是在指定的文件中定義,假設(shè)為 /etc/auto.subfile,其格式如下:
key -options nfs_server:/path/to/share
解釋:
key:掛載點(diǎn)的關(guān)鍵字,通常是該掛載點(diǎn)的名稱,它將成為/path/to/mountpoint/key的實(shí)際掛載點(diǎn)。-options:掛載選項(xiàng),如rw(讀寫)、ro(只讀)等。nfs_server:/path/to/share:指定要掛載的 NFS 服務(wù)器及共享路徑。
示例
- 主配置文件 (
/etc/auto.master)
/mnt/nfs /etc/auto.nfs --timeout=60
- 子配置文件 (
/etc/auto.nfs)
data1 -fstype=nfs,rw nfs_server:/export/data1 data2 -fstype=nfs,ro nfs_server:/export/data2
在這個(gè)示例中,當(dāng)訪問 /mnt/nfs/data1 時(shí),autofs 會(huì)自動(dòng)掛載 nfs_server:/export/data1,并且允許讀寫;
訪問 /mnt/nfs/data2 時(shí),則會(huì)自動(dòng)掛載 nfs_server:/export/data2,但為只讀模式。
總結(jié):
- 主配置文件:定義了掛載點(diǎn)和關(guān)聯(lián)的子配置文件,以及一些全局選項(xiàng)。
- 子配置文件:定義具體的掛載規(guī)則,包括掛載的關(guān)鍵字、選項(xiàng)和目標(biāo)資源。
7.1安裝autofs
客戶端安裝即可
yum -y install autofs
注意,剛才做NFS實(shí)驗(yàn)時(shí),服務(wù)端和客戶端都下載rpcbind和nfs-utils,如果沒下再次下載即可
yum -y install nfs-utils rpcbind
本次autofs實(shí)驗(yàn)是基于上面NFS的,所以我們的autofs結(jié)合NFS一同實(shí)現(xiàn)自動(dòng)掛載,服務(wù)端基本不變,我們主要修改客戶端配置。先配置服務(wù)端,這里就不多講了,和前面類似。
記得做好防火墻和selinux的相關(guān)配置,并且確保相關(guān)服務(wù)都開啟了。
7.2 服務(wù)端配置
mkdir -p /usr/elysia chmod 777 /usr/elysia echo "/usr/elysia 192.168.240.*(rw,sync,no_root_squash)" >> /etc/exports exportfs -rv
[root@node1 elysia]# exportfs -rv exporting 192.168.240.*:/mnt/shared exporting 192.168.240.*:/usr/elysia
7.3 客戶端配置
(1). 使用showmount命令查看服務(wù)端的可共享目錄。
showmount -e 192.168.240.151
[root@node2 ~]# showmount -e 192.168.240.151 Export list for 192.168.240.151: /mnt/shared 192.168.240.* /usr/seele 192.168.240.* /usr/elysia 192.168.240.* #目標(biāo)目錄
包含了我們服務(wù)端創(chuàng)建的/usr/elysia目錄。
(2). 修改主配置文件
vim /etc/auto.master 加入以下行 /data /etc/auto.misc #/data是我們想要掛載的目錄的父目錄
(3).修改子配置文件
vim /etc/auto.misc 加入以下行 elysia -rw 192.168.240.151:/usr/elysia
注意,子配置文件的命名不一定要以".misc"為后綴。成功掛載并且cd后會(huì)自動(dòng)生成/data/elysia目錄
(4).重啟autofs服務(wù)
systemctl restart autofs
(5).測(cè)試
客戶端切換到/data目錄,查看是否存在/data/elysia
[root@node2 ~]# df -h | grep elysia [root@node2 ~]##不存在
cd到/data/elysia。
[root@node2 ~]# df -h | grep elysia [root@node2 ~]# cd /data/elysia [root@node2 elysia]# df -h | grep elysia 192.168.240.151:/usr/elysia 18G 5.1G 13G 29% /data/elysia #出現(xiàn)掛載目錄,auto配置完成
7.4補(bǔ)充
| 參數(shù) | 實(shí)現(xiàn)功能 |
| fg/bg | fg表示掛載行為在前臺(tái)執(zhí)行,bg表示掛載行為在后臺(tái)執(zhí)行。前臺(tái)執(zhí)行,則mount會(huì)持續(xù)嘗試掛載,直到成功或超時(shí)為止。后臺(tái)執(zhí)行,mount會(huì)在后臺(tái)持續(xù)多次進(jìn)行mount,不會(huì)影響到前臺(tái)的程序運(yùn)行。 |
| soft/hard | hard表示當(dāng)兩者之間的任何一臺(tái)主機(jī)脫機(jī),則RPC會(huì)持續(xù)地呼叫,直到對(duì)方恢復(fù)連接為止。如果是soft的話,那RPC會(huì)在超時(shí)后重復(fù)呼叫,非持續(xù)呼叫 |
| intr | 當(dāng)使用hard方式掛載時(shí),若加上intr這個(gè)參數(shù),則當(dāng)RPC持續(xù)呼叫時(shí),該次的呼叫是可以被中斷的 |
| rsize/wsize | 讀出(rsize)與寫入(wsize)的區(qū)塊大小,設(shè)置值可以影響客戶端與服務(wù)器端傳輸數(shù)據(jù)的緩沖記憶容量 |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS 5.11服務(wù)器安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)
這篇文章主要介紹了CentOS 5.11服務(wù)器安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL),需要的朋友可以參考下2016-10-10
linux expect 自動(dòng)登錄交換機(jī)保存配置的方法
今天小編就為大家分享一篇linux expect 自動(dòng)登錄交換機(jī)保存配置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Linux如何使用libudev獲取USB設(shè)備VID及PID
這篇文章主要介紹了Linux如何使用libudev獲取USB設(shè)備VID及PID,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09

