linux部署NFS和autofs自動掛載實現(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ò),讓不同的機器、不同的操作系統(tǒng)可以共享彼此的文件。
NFS在文件傳送或信息傳送過程中依賴于RPC服務(wù)。RPC:遠(yuǎn)程過程調(diào)用 (Remote Procedure Call) 是能使客戶端執(zhí)行其他系統(tǒng)中程序的一種機制。
NFS服務(wù)器可以看作是一個FILE SERVER。它可以讓你的機器(客戶端)通過網(wǎng)絡(luò)將遠(yuǎn)端的NFS SERVER共享目錄MOUNT到自己的系統(tǒng)中。
2.NFS守護進程
- nfsd:它是基本的NFS守護進程,主要功能是管理客戶端是否能夠登錄服務(wù)器;
- mountd:它是RPC安裝守護進程,主要功能是管理NFS的文件系統(tǒng)。當(dāng)客戶端登錄到NFS服務(wù)器后,必須通過文件使用權(quán)限的驗證。它會讀取NFS的配置文件/etc/exports來對比客戶端權(quán)限。
- portmap:主要功能是進行端口映射工作。
3.RPC服務(wù)
RPC(Remote Procedure Call)即遠(yuǎn)程過程調(diào)用,記錄NFS服務(wù)器使用的端口號,在NFS客戶端發(fā)送請求時,將對應(yīng)的端口號信息傳遞給客戶端,確??蛻舳伺c服務(wù)端能連接上。
注意:在啟動NFS服務(wù)之前,必須先啟動PRC服務(wù),在Centos7中叫做 rpcbind 服務(wù),否則 NFS Server 無法向RPC注冊信息,另外,如果RPC服務(wù)重啟,原來注冊的NFS服務(wù)端的信息也就失效了,也必須重啟NFS服務(wù)。特別要注意的是,修改NFS配置?件后不需要重啟NFS,只需要執(zhí)? exportfs -rv 命令即可或是 systemctl reload nfs。
4. 原理
- 服務(wù)端啟動RPC服務(wù),并開啟111端口。
- 然后服務(wù)器端啟動NFS服務(wù),并向RPC注冊端口信息。
- 客戶端啟動RPC(portmap服務(wù)),向服務(wù)端的RPC(portmap)服務(wù)請求服務(wù)端的NFS端口
- 服務(wù)端的RPC(portmap)服務(wù)反饋NFS端口信息給客戶端。
- 客戶端通過獲取的NFS端口來建立和服務(wù)端的NFS連接并進行數(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ù)端和客戶端同時配置即可。
#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)建一個測試文件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ù)時,主要涉及兩個配置文件:/etc/exports 和 nfs.conf。以下是這些文件中常用的參數(shù):
(1)./etc/exports
這個文件用于定義哪些目錄可以被共享,以及它們的訪問權(quán)限。常用參數(shù)包括:
- 共享目錄:指定要共享的目錄路徑。
- 客戶端:指定可以訪問該目錄的客戶端,可以是 IP 地址、主機名或網(wǎng)絡(luò)段,可以使用通配符來指定網(wǎng)絡(luò)段。
訪問權(quán)限:
rw:讀寫權(quán)限。ro:只讀權(quán)限。no_root_squash:允許客戶端以 root 用戶訪問共享。默認(rèn)會將 root 權(quán)限映射為普通用戶。root_squash:當(dāng)NFS客戶端以root管理員訪問時,映射為NFS服務(wù)器的匿名用戶all_squash:將所有客戶端請求映射為匿名用戶。
異步/同步:
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
這個文件通常位于 /etc/nfs.conf,用于配置 NFS 服務(wù)的全局參數(shù)。常用的參數(shù)包括:
[nfs]:NFS 相關(guān)設(shè)置。
vers:指定 NFS 版本。mountd_port:指定 mountd 的端口號。rpcbind_port:指定 rpcbind 的端口號。
[rpcd]:RPC 相關(guān)設(shè)置。
我們在/etc/exports文件中加入以下行即可,nfs.conf文件有要求自行更改。
/mnt/shared 192.168.240.*(rw,sync,no_root_squash) #/mnt/shared:服務(wù)端共享的目錄 #192.168.240.*:允許訪問的NFS客戶端,這里是一個網(wǎng)段內(nèi)的主機,也可以是某一個指定的主機 #(rw,sync,no_root_squash):共享權(quán)限參數(shù)
5.5啟動nfs并加入自啟
服務(wù)端配置即可。
systemctl start rpcbind # 啟動rpc systemctl start nfs-server #啟動nfs systemctl enable rpcbind #設(shè)置開機自啟 systemctl enable nfs-server #設(shè)置開機自啟
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)建一個掛載目錄,使用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è)置開機自動掛載
上面我們雖然掛載好了,但是每次開機都需要重新掛載,非常麻煩,我們只需要在/etc/fstab文件中加入以下配置即可,之后每次開機系統(tǒng)就會幫我們自動掛載了。
echo "192.168.240.151:/mnt/shared /mnt/nfs nfs defaults 0 0" >> /etc/fstab
5.8測試
客戶端進入掛載目錄,查看是否存在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測試文件,配置完成。
5.9補充
卸載目錄:
umount 是一個用于卸載文件系統(tǒng)的命令。
在 Linux 和 Unix 系統(tǒng)中,使用 umount 可以安全地斷開掛載的設(shè)備或目錄。以下是 umount 的基本用法:
基本語法:
umount [選項] <掛載點或設(shè)備>
示例:
1.卸載掛載點:
umount /mnt/mydrive
這將卸載 /mnt/mydrive 目錄下的文件系統(tǒng)。
2.卸載特定設(shè)備:
umount /dev/sdb1
這將卸載 /dev/sdb1 設(shè)備。
常用選項:
-l:懶惰卸載,立即卸載但在文件系統(tǒng)不再被使用時才真正完成。-f:強制卸載,即使設(shè)備忙也嘗試卸載。--timeout:超時時間。
注意事項:
- 在卸載之前,確保沒有進程正在使用該文件系統(tǒng)。
- 如果有數(shù)據(jù)未寫入,則可能會導(dǎo)致數(shù)據(jù)丟失。
修改超時卸載時間:
在 NFS(網(wǎng)絡(luò)文件系統(tǒng))中,修改默認(rèn)的超時卸載時間可以通過調(diào)整掛載選項來實現(xiàn)。NFS 的掛載通常是在 /etc/fstab 文件中配置,也可以在命令行中使用 mount 命令進行掛載。以下是如何修改默認(rèn)超時卸載時間的方法:
(1).mount命令:
在掛載 NFS 文件系統(tǒng)時,可以使用 timeo 和 retrans 選項來控制超時行為。
timeo:設(shè)置 NFS 客戶端的請求超時時間(以 1/10 秒為單位)。retrans:設(shè)置請求失敗后重試的次數(shù)。
例如,假設(shè)你想設(shè)置超時時間為 30 秒(即 300 個 1/10 秒),并指定重試次數(shù)為 5,可以使用如下命令:
mount -o timeo=300,retrans=5 nfs_server:/path/to/share /mnt/mountpoint
(2). 修改/etc/fstab
如果希望在系統(tǒng)啟動時自動掛載 NFS,并應(yīng)用相同的超時設(shè)置,可以將掛載選項添加到 /etc/fstab 文件中。
示例如下:
nfs_server:/path/to/share /mnt/mountpoint nfs defaults,timeo=300,retrans=5 0 0
注意事項
timeo的單位是 1/10 秒,因此在設(shè)置時需要將秒數(shù)乘以 10。- 調(diào)整這些參數(shù)時,請根據(jù)網(wǎng)絡(luò)條件和應(yīng)用需求進行合理配置,以避免過于頻繁的重試或過長的等待時間。
(二)Autofs
與mount命令不同,autofs服務(wù)程序是一種Linux系統(tǒng)守護進程,當(dāng)檢測到用戶試圖訪問一個尚未掛載的文件系統(tǒng)時,將自動掛載該文件系統(tǒng)。換句話說,將掛載信息填入/etc/fstab文件后,系統(tǒng)在每次開機時都自動將其掛載,而autofs服務(wù)程序則是在用戶需要使用該文件系統(tǒng)時才去動態(tài)掛載,從而節(jié)約了網(wǎng)絡(luò)資源和服務(wù)器的硬件資源。
autofs的缺點:autofs特點是只有?戶請求時才執(zhí)?掛載,所以當(dāng)?并發(fā)訪問時,開始請求的瞬間需要執(zhí)?掛載,性能較差,因此在?并發(fā)業(yè)務(wù)場景下,寧愿保持掛載也不使?autofs?動掛載。
autofs工作原理主要基于以下幾個關(guān)鍵概念和步驟:
1. 掛載點和配置
autofs 通過配置文件來定義掛載點以及每個掛載點所對應(yīng)的具體文件系統(tǒng)。
最常用的配置文件是 /etc/auto.master 和相應(yīng)的子配置文件(如 /etc/auto.mnt)。
在這些文件中,你可以指定需要自動掛載的目錄及其掛載選項。
2. 事件驅(qū)動
autofs 的核心原理是事件驅(qū)動。當(dāng)用戶嘗試訪問一個未掛載的目錄時,autofs 會檢測到這個訪問請求并觸發(fā)掛載操作。
這種機制使得只有在需要時才會掛載文件系統(tǒng),從而節(jié)省了系統(tǒng)資源。
3. 后臺守護進程
autofs 由一個后臺守護進程運行,通常為 automountd。該守護進程負(fù)責(zé)監(jiān)視掛載請求,并根據(jù)配置文件中的設(shè)定自動執(zhí)行掛載和卸載操作。
4. 超時機制
一旦文件系統(tǒng)被掛載,autofs 會啟動一個超時計時器。
如果在預(yù)設(shè)的時間內(nèi)沒有任何對該掛載點的訪問,autofs 將自動卸載該文件系統(tǒng)。
這一特性可以減少不必要的資源占用,同時提高系統(tǒng)性能。
5. 掛載方式
在掛載時,autofs 會調(diào)用相應(yīng)的掛載命令(如 mount),并使用配置文件中指定的選項進行掛載。例如,對于 NFS,可以指定遠(yuǎn)程服務(wù)器和共享路徑。
6. 錯誤處理
當(dāng)發(fā)生錯誤(如網(wǎng)絡(luò)問題)導(dǎo)致掛載失敗時,autofs 能夠處理這些錯誤,并根據(jù)配置中的選項決定如何響應(yīng),例如是否重試或返回錯誤信息。
autofs 的設(shè)計理念是將掛載操作與用戶的實際需求緊密結(jié)合,通過事件驅(qū)動和超時機制實現(xiàn)高效的資源管理。其主要優(yōu)點包括:
- 節(jié)省資源:僅在需要時掛載文件系統(tǒng)。
- 簡化用戶操作:用戶無需手動掛載或卸載文件系統(tǒng)。
- 自動管理:能夠自動卸載不再使用的文件系統(tǒng)。
這種機制特別適合于需要頻繁訪問網(wǎng)絡(luò)文件系統(tǒng)(如 NFS)的環(huán)境,提高了訪問效率和用戶體驗。
7. 配置autofs
autofs 是一種用于自動掛載文件系統(tǒng)的工具,通常用于在 Linux 系統(tǒng)上動態(tài)掛載 NFS 或其他類型的文件系統(tǒng)。
它使用主配置文件和子配置文件來定義掛載規(guī)則和行為。
主配置文件格式
主配置文件通常位于 /etc/auto.master,其格式如下:
/path/to/mountpoint /etc/auto.subfile --timeout=60
解釋:
/path/to/mountpoint:指定要掛載的目錄(掛載點)。/etc/auto.subfile:指向包含子配置的文件。--timeout=60:可選參數(shù),設(shè)置超時時間,表示在閑置 60 秒后卸載掛載點。
子配置文件格式
子配置文件的格式通常是在指定的文件中定義,假設(shè)為 /etc/auto.subfile,其格式如下:
key -options nfs_server:/path/to/share
解釋:
key:掛載點的關(guān)鍵字,通常是該掛載點的名稱,它將成為/path/to/mountpoint/key的實際掛載點。-options:掛載選項,如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
在這個示例中,當(dāng)訪問 /mnt/nfs/data1 時,autofs 會自動掛載 nfs_server:/export/data1,并且允許讀寫;
訪問 /mnt/nfs/data2 時,則會自動掛載 nfs_server:/export/data2,但為只讀模式。
總結(jié):
- 主配置文件:定義了掛載點和關(guān)聯(lián)的子配置文件,以及一些全局選項。
- 子配置文件:定義具體的掛載規(guī)則,包括掛載的關(guān)鍵字、選項和目標(biāo)資源。
7.1安裝autofs
客戶端安裝即可
yum -y install autofs
注意,剛才做NFS實驗時,服務(wù)端和客戶端都下載rpcbind和nfs-utils,如果沒下再次下載即可
yum -y install nfs-utils rpcbind
本次autofs實驗是基于上面NFS的,所以我們的autofs結(jié)合NFS一同實現(xiàn)自動掛載,服務(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后會自動生成/data/elysia目錄
(4).重啟autofs服務(wù)
systemctl restart autofs
(5).測試
客戶端切換到/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補充
| 參數(shù) | 實現(xiàn)功能 |
| fg/bg | fg表示掛載行為在前臺執(zhí)行,bg表示掛載行為在后臺執(zhí)行。前臺執(zhí)行,則mount會持續(xù)嘗試掛載,直到成功或超時為止。后臺執(zhí)行,mount會在后臺持續(xù)多次進行mount,不會影響到前臺的程序運行。 |
| soft/hard | hard表示當(dāng)兩者之間的任何一臺主機脫機,則RPC會持續(xù)地呼叫,直到對方恢復(fù)連接為止。如果是soft的話,那RPC會在超時后重復(fù)呼叫,非持續(xù)呼叫 |
| intr | 當(dāng)使用hard方式掛載時,若加上intr這個參數(shù),則當(dāng)RPC持續(xù)呼叫時,該次的呼叫是可以被中斷的 |
| rsize/wsize | 讀出(rsize)與寫入(wsize)的區(qū)塊大小,設(shè)置值可以影響客戶端與服務(wù)器端傳輸數(shù)據(jù)的緩沖記憶容量 |
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS 5.11服務(wù)器安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)
這篇文章主要介紹了CentOS 5.11服務(wù)器安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL),需要的朋友可以參考下2016-10-10
Linux如何使用libudev獲取USB設(shè)備VID及PID
這篇文章主要介紹了Linux如何使用libudev獲取USB設(shè)備VID及PID,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09

