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

