網(wǎng)絡(luò)文件系統(tǒng),英文Network File System(NFS)。是由SUN公司研制的UNIX表示層協(xié)議(pressentation layer protocol),能使使用者訪問(wèn)網(wǎng)絡(luò)上別處的文件就像在使用自己的計(jì)算機(jī)一樣。
它允許網(wǎng)絡(luò)中的計(jì)算機(jī)之間通過(guò)TCP/IP網(wǎng)絡(luò)共享資源。在NFS的應(yīng)用中,本地NFS的客戶(hù)端應(yīng)用可以透明地讀寫(xiě)位于遠(yuǎn)端NFS服務(wù)器上的文件,就像訪問(wèn)本地文件一樣,也就是說(shuō)客戶(hù)端PC可以?huà)燧dNFS服務(wù)器所提供的目錄并且掛載之后這個(gè)目錄看起來(lái)如同本地的磁盤(pán)分區(qū)一樣,可以使用cp、cd、mv、rm及df等與磁盤(pán)相關(guān)的命令。
它基于開(kāi)放網(wǎng)絡(luò)運(yùn)算遠(yuǎn)程過(guò)程調(diào)用(ONC RPC)協(xié)議:一個(gè)開(kāi)放、標(biāo)準(zhǔn)的RFC協(xié)議,任何人或組織都可以依據(jù)標(biāo)準(zhǔn)實(shí)現(xiàn)它。
| Port | TCP | UDP | Description | IANA status |
|---|---|---|---|---|
| 2049 | Yes, and SCTP | Yes | [Network File System] (NFS) | Official |
RPC
遠(yuǎn)程過(guò)程調(diào)用(英語(yǔ):Remote Procedure Call,縮寫(xiě)為 RPC)是一個(gè)計(jì)算機(jī)通信協(xié)議。該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一個(gè)地址空間(通常為一個(gè)開(kāi)放網(wǎng)絡(luò)的一臺(tái)計(jì)算機(jī))的子程序,而程序員就像調(diào)用本地程序一樣,無(wú)需額外地為這個(gè)交互作用編程(無(wú)需關(guān)注細(xì)節(jié))。RPC是一種服務(wù)器-客戶(hù)端(Client/Server)模式,經(jīng)典實(shí)現(xiàn)是一個(gè)通過(guò)發(fā)送請(qǐng)求-接受回應(yīng)進(jìn)行信息交互的系統(tǒng)。
| Port | TCP | UDP | IANA status | Description |
|---|---|---|---|---|
| 111 | Yes | Yes | Official | [Open Network Computing Remote Procedure Call] (ONC RPC, sometimes referred to as Sun RPC) |
NFSv4
受Andrew File System(AFS)和Server Message Block(SMB,也稱(chēng)為CIFS)的影響,第4版(2000年12月的RFC 3010; 2003年4月的RFC 3530和2015年3月的RFC 7530進(jìn)行了修訂)包括性能改進(jìn),要求強(qiáng)大的安全性,并引入有狀態(tài)協(xié)議。在Sun Microsystems移交NFS協(xié)議的開(kāi)發(fā)之后,第4版成為由Internet工程任務(wù)組(IETF)開(kāi)發(fā)的第一個(gè)版本。
與以前的版本相比,NFSv4的一大優(yōu)勢(shì)是僅使用一個(gè)IP端口2049來(lái)運(yùn)行該服務(wù),從而簡(jiǎn)化了跨防火墻使用協(xié)議的過(guò)程。也就意為著,NFSv4可以不再需要rpcbind(portmap)
紅帽7關(guān)于nfs的說(shuō)明"8.6.7. Configuring an NFSv4-only Server",明確可以不啟用rpcbind
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/nfs-serverconfig#nfs4-only
By default, the NFS server supports NFSv2, NFSv3, and NFSv4 connections in Red Hat Enterprise Linux 7. However, you can also configure NFS to support only NFS version 4.0 and later. This minimizes the number of open ports and running services on the system, because NFSv4 does not require the rpcbind service to listen on the network.
紅帽8關(guān)于nfs的說(shuō)明"3.14. Configuring an NFSv4-only server",也明確可以不啟用rpcbind
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/exporting-nfs-shares_deploying-different-types-of-servers

先說(shuō)NFSv4以下的版本
由于NFSv2或NFSv3,使用了多個(gè)守護(hù)進(jìn)程(lockd, rpc.statd, rpc.mountd, ...)提供不同的功能,每個(gè)進(jìn)程都要監(jiān)聽(tīng)一個(gè)端口,且端口不是固定的,這樣就要一個(gè)服務(wù)來(lái)提供知名端口(111)來(lái)響應(yīng)Client的訪問(wèn),并返回給客戶(hù)端要訪問(wèn)服務(wù)的當(dāng)前端口,這個(gè)服務(wù)就是rpcbind
-
安裝
# yum install rpcbind nfs-utils-
rpcbind
Rpcbind實(shí)用程序是將RPC程序號(hào)轉(zhuǎn)換為通用地址的服務(wù)器。
接受來(lái)自本地RPC服務(wù)的端口預(yù)約注冊(cè)。然后使這些端口可用(或通告),以便相應(yīng)的遠(yuǎn)程RPC服務(wù)可以訪問(wèn)它們。 Rpcbind服務(wù)響應(yīng)對(duì)RPC服務(wù)的請(qǐng)求,并建立與請(qǐng)求的RPC服務(wù)的連接。
一般安裝完成后會(huì),自動(dòng)自動(dòng)運(yùn)行,并加入開(kāi)機(jī)啟動(dòng)中 -
nfs-utils
NFS utils 是支持NFS服務(wù)的客戶(hù)端和服務(wù)程序
-
rpcbind
-
nfs服務(wù)器
- a) 共享配置(有兩種方法可以在NFS服務(wù)器上配置exports)
- /etc/exports
export host1(options1) host2(options2) host3(options3)
- /etc/exports
- /usr/sbin/exportfs
exportfs命令允許root用戶(hù)有選擇地導(dǎo)出或取消導(dǎo)出目錄,而無(wú)需重新啟動(dòng)NFS服務(wù)。提供適當(dāng)?shù)倪x項(xiàng)后,/usr/sbin/exportfs命令會(huì)將導(dǎo)出的文件系統(tǒng)寫(xiě)入/var/lib/nfs/xtab。由于rpc.mountd在確定對(duì)文件系統(tǒng)的訪問(wèn)特權(quán)時(shí)會(huì)引用xtab文件,因此對(duì)導(dǎo)出文件系統(tǒng)列表的更改將立即生效
- /usr/sbin/exportfs
- b) 相關(guān)
- 分享資源的登錄記錄:/var/lib/nfs/*tab
在 NFS 服務(wù)器的登錄文件都放置到 /var/lib/nfs/ 目錄里面,在該目錄下有兩個(gè)比較重要的登錄檔, 一個(gè)是 etab ,主要記錄了 NFS 所分享出來(lái)的目錄的完整權(quán)限設(shè)定值;另一個(gè) xtab 則記錄曾經(jīng)鏈接到此 NFS 服務(wù)器的相關(guān)客戶(hù)端數(shù)據(jù)。
- 分享資源的登錄記錄:/var/lib/nfs/*tab
- 客戶(hù)端查詢(xún)服務(wù)器分享資源的指令:/usr/sbin/showmount
這是另一個(gè)重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。這個(gè) showmount 可以用來(lái)察看 NFS 分享出來(lái)的目錄資源喔!
- 客戶(hù)端查詢(xún)服務(wù)器分享資源的指令:/usr/sbin/showmount
- a) 共享配置(有兩種方法可以在NFS服務(wù)器上配置exports)
exports文件 options 參數(shù)
| 參數(shù) | 功能說(shuō)明 |
|---|---|
| rw | 可讀寫(xiě)的權(quán)限 |
| ro | 只讀的權(quán)限 |
| sync(同步) | 資料同步寫(xiě)入到內(nèi)存與硬盤(pán)中(慢,不容易丟數(shù)據(jù)) |
| async(異步) | 資料會(huì)暫存于內(nèi)存當(dāng)中,而不是寫(xiě)入硬盤(pán)(快,容易丟數(shù)據(jù)) |
| no_root_squash | 客戶(hù)端用root用戶(hù)訪問(wèn)該共享文件夾時(shí), root用戶(hù)不會(huì)映射成匿名用戶(hù)(極不安全,不建議使用) |
| root_squash | 客戶(hù)端用root用戶(hù)訪問(wèn)該共享文件夾是,將root用戶(hù)映射為匿名用戶(hù) |
| all_squash | 不論登入NFS的使用者身份是誰(shuí),他的身份都會(huì)被壓縮成匿名用戶(hù)(nfsnobody) |
| anonuid=xxx | 指定NFS服務(wù)器的匿名用戶(hù)UID |
| anongid=xxx | 指定NFS服務(wù)器的匿名用戶(hù)GID |
| insecure | NFS通過(guò)1024以上的端口發(fā)送 |
| secure | NFS通過(guò)1024以下的安全TCP/IP端口發(fā)送 |
| hide | 在NFS共享目錄中共享其子目錄 |
| no_hide | 在NFS共享目錄中共享其子目錄 |
| wdelay | 如果多個(gè)用戶(hù)寫(xiě)入NFS目錄,則歸組寫(xiě)入(默認(rèn)) |
| no_wdelay | 如果多個(gè)用戶(hù)寫(xiě)入NFS目錄,則立即寫(xiě)入,當(dāng)使用async時(shí),無(wú)需此設(shè)置 |
| subtree_check | 在共享/usr/bin之類(lèi)的子目錄時(shí),強(qiáng)制NFS檢查父目錄的權(quán)限(默認(rèn)) |
| no_subtree_check | 和上面相對(duì),不檢查父目錄權(quán)限 |
exports文件 host 參數(shù)
| 類(lèi)型 | 說(shuō)明 | 示例 |
|---|---|---|
| single host | 單個(gè)主機(jī) |
ftp.abc.com192.168.2.10ipv6地址: ::1
|
| IP networks | 一個(gè)網(wǎng)段 |
192.168.2.0/255.255.255.0192.168.2.0/24
|
| wildcards | 機(jī)器名稱(chēng)可以包含通配符*和? 也可以在[方括號(hào)]中包含字符類(lèi)列表。 |
*.abc.com |
| netgroups | NIS網(wǎng)絡(luò)組可以以@group的形式給出。 在檢查成員資格時(shí), 僅考慮組成員的主機(jī)部分。 |
|
| anonymous | 使用一個(gè)*字符(不要與上面的通配符混淆) 將匹配任意客戶(hù)端 |
* |
/etc/exports的配置
# vim /etc/exports
"root 保有 root 的權(quán)限"
/tmp *(rw,no_root_squash)
"同一目錄針對(duì)不同范圍開(kāi)放不同權(quán)限, 通配符僅能用在主機(jī)名的分辨上面,IP 或網(wǎng)段就只能用 192.168.100.0/24 的狀況,
不可以使用 192.168.100.* 喔!"
/home/public 192.168.100.0/24(rw) *(ro)
"僅給某個(gè)單一主機(jī)使用的目錄設(shè)定, 只有這部機(jī)器才能對(duì) /home/test 這個(gè)目錄進(jìn)行存取喔!"
/home/test 192.168.100.10(rw)192.168.100.10
"開(kāi)放匿名登錄的情況, 特別注意到那個(gè) all_squash 與 anonuid, anongid 的功能!如此一來(lái),
當(dāng) ftp.abc.com 登入這部 NFS 主機(jī),并且在 /home/linux 寫(xiě)入檔案時(shí),該檔案的所有人與所有群組,
就會(huì)變成 /etc/passwd 里面對(duì)應(yīng)的 UID 為 45 的那個(gè)身份的使用者了!"
/home/linux *.abc.com(rw,all_squash,anonuid=45,anongid=45)
啟動(dòng)服務(wù)
先決條件
對(duì)于支持NFSv2或NFSv3連接的服務(wù)器,必須正在運(yùn)行rpcbind [1]服務(wù)。要驗(yàn)證rpcbind是否處于活動(dòng)狀態(tài),請(qǐng)使用以下命令:
[root@localhost ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-10-16 22:34:53 CST; 59min ago
Process: 9399 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 9400 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─9400 /sbin/rpcbind -w
Oct 16 22:34:53 localhost.localdomain systemd[1]: Starting RPC bind service...
Oct 16 22:34:53 localhost.localdomain systemd[1]: Started RPC bind service.
運(yùn)行中,下面來(lái)看一下rpcbind的運(yùn)行情況
[root@localhost ~]# rpcinfo
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4 local /var/run/rpcbind.sock portmapper superuser
100000 3 local /var/run/rpcbind.sock portmapper superuser
[root@localhost ~]# ss -tunlp |grep rpcbind
udp UNCONN 0 0 *:946 *:* users:(("rpcbind",pid=9675,fd=10))
udp UNCONN 0 0 *:111 *:* users:(("rpcbind",pid=9675,fd=5),("systemd",pid=1,fd=30))
udp UNCONN 0 0 :::946 :::* users:(("rpcbind",pid=9675,fd=11))
udp UNCONN 0 0 :::111 :::* users:(("rpcbind",pid=9675,fd=7),("systemd",pid=1,fd=33))
tcp LISTEN 0 128 *:111 *:* users:(("rpcbind",pid=9675,fd=4),("systemd",pid=1,fd=29))
tcp LISTEN 0 128 :::111 :::* users:(("rpcbind",pid=9675,fd=6),("systemd",pid=1,fd=32))
[root@localhost ~]#
這里可以看到它監(jiān)聽(tīng)了111/TCP, 111/UDP
下面來(lái)啟動(dòng)nfs
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# netstat -tunlp |grep -E "rpc|2049"
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 9707/rpc.mountd
tcp 0 0 0.0.0.0:42111 0.0.0.0:* LISTEN 9571/rpc.statd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::54383 :::* LISTEN 9571/rpc.statd
tcp6 0 0 :::20048 :::* LISTEN 9707/rpc.mountd
tcp6 0 0 :::2049 :::* LISTEN -
udp 0 0 0.0.0.0:946 0.0.0.0:* 9675/rpcbind
udp 0 0 0.0.0.0:53756 0.0.0.0:* 9571/rpc.statd
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 0.0.0.0:20048 0.0.0.0:* 9707/rpc.mountd
udp 0 0 127.0.0.1:843 0.0.0.0:* 9571/rpc.statd
udp6 0 0 :::946 :::* 9675/rpcbind
udp6 0 0 :::2049 :::* -
udp6 0 0 :::20048 :::* 9707/rpc.mountd
udp6 0 0 :::36187 :::* 9571/rpc.statd
[root@localhost ~]# rpcinfo -s localhost
program version(s) netid(s) service owner
100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser
100005 3,2,1 tcp6,udp6,tcp,udp mountd superuser
100003 4,3 udp6,tcp6,udp,tcp nfs superuser
100227 3 udp6,tcp6,udp,tcp nfs_acl superuser
100021 4,3,1 tcp6,udp6,tcp,udp nlockmgr superuser
" 使用-s 以簡(jiǎn)潔的格式顯示,信息太長(zhǎng)了,本機(jī)查看localhost可省
另外,這里可以看出nfs支持的版本信息"
查看NFS的共享情況
showmount [-ae] [hostname|IP]
選項(xiàng)與參數(shù):
-a :顯示目前主機(jī)與客戶(hù)端的 NFS 聯(lián)機(jī)分享的狀態(tài);
-e :顯示某部主機(jī)的 /etc/exports 所分享的目錄數(shù)據(jù)。
還可以查看 /var/lib/nfs/etab文件,查看exports的詳細(xì)共享參數(shù)
[root@localhost ~]# cat /etc/exports
/data/pub *(ro)
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/data/pub *
[root@localhost ~]# cat /var/lib/nfs/etab
/data/pub *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,ro,secure,root_squash,no_all_squash)
# 上面是同一行,可以看出除了 rw, sync, root_squash 等等,
# 其實(shí)還有 anonuid 及 anongid 等等的設(shè)定!
共享控制
exportfs [-aruv]
選項(xiàng)與參數(shù):
-a :全部掛載(或卸除) /etc/exports 檔案內(nèi)的設(shè)定
-r :重新掛載 /etc/exports 里面的設(shè)定,
???????此外,亦同步更新 /etc/exports及 /var/lib/nfs/xtab 的內(nèi)容!
-u :卸除某一目錄
-v :在 export 的時(shí)候,將分享的目錄顯示到屏幕上!
[root@localhost ~]# vim /etc/exports
[root@localhost ~]# cat /etc/exports
/data/pub *(ro)
/data/mydata 192.168.1.10(rw,no_root_squash)
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/data/pub *
[root@localhost ~]# exportfs -arv
exporting 192.168.1.10:/data/mydata
exporting *:/data/pub
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/data/pub *
/data/mydata 192.168.1.10
[root@localhost ~]# cat /var/lib/nfs/etab
/data/mydata 192.168.1.10(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/pub *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,ro,secure,root_squash,no_all_squash)
[root@localhost ~]#
======================================
NFSv4
之前說(shuō),在V4版本中可以不使用rpcbind(portmap),測(cè)試
1. 關(guān)閉rpcbind服務(wù)
[root@localhost ~]# systemctl mask --now rpc-statd.service rpcbind.service rpcbind.socket
[root@localhost ~]# systemctl mask --now rpc-statd.service rpcbind.service rpcbind.socket
Created symlink from /etc/systemd/system/rpc-statd.service to /dev/null.
Created symlink from /etc/systemd/system/rpcbind.service to /dev/null.
Created symlink from /etc/systemd/system/rpcbind.socket to /dev/null.
2. 編輯配置文件
?2.1 方法一
??[root@localhost ~]# vim /etc/sysconfig/nfs
RPCNFSDARGS="-N 2 -N 3"
[root@localhost ~]# vim /etc/sysconfig/nfs
[root@localhost ~]# systemctl restart nfs-server
[root@localhost ~]# netstat -tul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:mountd 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:nfs 0.0.0.0:* LISTEN
tcp6 0 0 [::]:mountd [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 [::]:nfs [::]:* LISTEN
udp 0 0 0.0.0.0:nfs 0.0.0.0:*
udp 0 0 0.0.0.0:mountd 0.0.0.0:*
udp 0 0 0.0.0.0:mountd 0.0.0.0:*
udp 0 0 0.0.0.0:mountd 0.0.0.0:*
udp6 0 0 [::]:nfs [::]:*
udp6 0 0 [::]:tftp [::]:*
udp6 0 0 [::]:mountd [::]:*
udp6 0 0 [::]:mountd [::]:*
udp6 0 0 [::]:mountd [::]:*
??2.2 方法二
???[root@localhost ~]# vim /etc/nfs.conf
[nfsd]
vers2=no
vers3=no
[root@localhost ~]# vim /etc/nfs.conf
[root@localhost ~]# systemctl restart nfs-server
[root@localhost ~]# netstat -tul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:nfs 0.0.0.0:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 [::]:nfs [::]:* LISTEN
udp 0 0 0.0.0.0:nfs 0.0.0.0:*
udp6 0 0 [::]:nfs [::]:*
udp6 0 0 [::]:tftp [::]:*
建議使用方法二,這種會(huì)少啟動(dòng)一個(gè)mountd的進(jìn)程
3. 重啟服務(wù)
# systemctl restart nfs-server
特別注意:使用NFSv4 only的服務(wù)后,不能再使用“showmount”命令,替代命令還沒(méi)有找到
=====================================
客戶(hù)端
手動(dòng)掛載 NFS 服務(wù)器分享的資源
你要如何掛載 NFS 服務(wù)器所提供的文件系統(tǒng)呢?基本上,可以這樣做:
(NFSv2 v3)
- 確認(rèn)本地端已經(jīng)啟動(dòng)了 rpcbind 服務(wù),nfs-utils(這個(gè)工具包包含了客戶(hù)端和服務(wù)端)。
- 查看 NFS 服務(wù)器分享的目錄有哪些,并了解我們是否可以使用 showmount
- 在本地端建立掛載點(diǎn)目錄 (mkdir);
- 利用 mount 將遠(yuǎn)程主機(jī)直接掛載到相關(guān)目錄。
(NFSv4)
- 安裝nfs-utils
- 在本地建立掛載點(diǎn)(mkdir)
- 利用mount掛載
mount -t nfs 192.168.1.254:/ /mnt/pub
[root@localhost ~]# cd /mnt/pub/data/
mydata/ pub/ <--- "直接將服務(wù)器上的授權(quán)可掛載的目錄都掛載上來(lái)了"
[root@localhost ~]# cat /proc/fs/nfsfs/
servers volumes
[root@localhost ~]# cat /proc/fs/nfsfs/servers
NV SERVER PORT USE HOSTNAME
v4 c0a8020a 801 2 192.168.1.254
[root@localhost ~]# mount |tail -1
192.168.1.254:/ on /mnt/pub type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.10,local_lock=none,addr=192.168.1.254)
這里可看到使用的是V4版本,而且可以直接掛載server:/根,Centos 7 中默認(rèn)使用的是V4版本要使用V2、V3
mount -t nfs -o vers=3 192.168.2.10:/data/pub /mnt/pub
前提是:rpcbind服務(wù)開(kāi)啟,才能使用V3
[root@localhost ~]# cat /proc/fs/nfsfs/servers
NV SERVER PORT USE HOSTNAME
v3 c0a8020a 801 1 192.168.1.254
[root@localhost ~]# mount |tail -1
192.168.1.254:/data/pub on /mnt/pub type nfs (rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.254,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=192.168.1.254)
==================================
自動(dòng)掛載 autofs 的使用
這個(gè)鳥(niǎo)哥 寫(xiě)得很好,引用
在一般 NFS 文件系統(tǒng)的使用情況中,如果客戶(hù)端要使用服務(wù)器端所提供的 NFS 文件系統(tǒng)時(shí),要嘛就是得在 /etc/rc.d/rc.local 當(dāng)中設(shè)定開(kāi)機(jī)時(shí)掛載,要嘛就得要登入系統(tǒng)后手動(dòng)利用 mount 來(lái)掛載。 此外,客戶(hù)端得要預(yù)先手動(dòng)的建立好掛載點(diǎn)目錄,然后掛載上來(lái)。但是這樣的使用情況恐怕有點(diǎn)小問(wèn)題。
NFS 文件系統(tǒng)與網(wǎng)絡(luò)聯(lián)機(jī)的困擾:
我們知道 NFS 服務(wù)器與客戶(hù)端的聯(lián)機(jī)或許不會(huì)永遠(yuǎn)存在,而 RPC 這個(gè)服務(wù)又挺討厭的,如果掛載了 NFS 服務(wù)器后,任何一方脫機(jī)都可能造成另外一方老是在等待逾時(shí)~而且,掛載的 NFS 文件系統(tǒng)可能又不是常常被使用,但若不掛載的話(huà),有時(shí)候緊急要使用時(shí)又得通知系統(tǒng)管理員, 這又很不方便...啊!好討厭的感覺(jué)啊~@_@
所以,讓我們換個(gè)思考的角度來(lái)討論一下使用 NFS 的情境:
- 可不可以讓客戶(hù)端在有使用到 NFS 文件系統(tǒng)的需求時(shí)才讓系統(tǒng)自動(dòng)掛載?
- 當(dāng) NFS 文件系統(tǒng)使用完畢后,可不可以讓 NFS 自動(dòng)卸除,以避免可能的 RPC 錯(cuò)誤?
如果能達(dá)到上述的功能,那就太完美啦!有沒(méi)有這東西呢?有的,在現(xiàn)在的 Linux 環(huán)境下這是可以達(dá)成的理想!用的就是 autofs 這個(gè)服務(wù)啦!
autofs 的設(shè)定概念:
autofs 這個(gè)服務(wù)在客戶(hù)端計(jì)算機(jī)上面,會(huì)持續(xù)的偵測(cè)某個(gè)指定的目錄, 并預(yù)先設(shè)定當(dāng)使用到該目錄下的某個(gè)次目錄時(shí),將會(huì)取得來(lái)自服務(wù)器端的 NFS 文件系統(tǒng)資源,并進(jìn)行自動(dòng)掛載的動(dòng)作。 講這樣或許你有點(diǎn)模糊,讓我們拿底下這個(gè)圖示來(lái)看看:

如上圖所示,我們的 autofs 主要配置文件為 /etc/auto.master,這個(gè)檔案的內(nèi)容很簡(jiǎn)單, 如上所示,我只要定義出最上層目錄 (/home/nfsfile) 即可,這個(gè)目錄就是 autofs 會(huì)一直持續(xù)偵測(cè)的目錄啦。 至于后續(xù)的檔案則是該目錄底下各次目錄的對(duì)應(yīng)。在 /etc/auto.nfs (這個(gè)檔案的檔名可自定義) 里面則可以定義出每個(gè)次目錄所欲掛載的遠(yuǎn)程服務(wù)器的 NFS 目錄資源!
舉例來(lái)說(shuō):『當(dāng)我們?cè)诳蛻?hù)端要使用 /home/nfsfile/public 的數(shù)據(jù)時(shí),此時(shí) autofs 才會(huì)去 192.168.100.254 服務(wù)器上掛載 /home/public !』且『當(dāng)隔了 5 分鐘沒(méi)有使用該目錄下的數(shù)據(jù)后,則客戶(hù)端系統(tǒng)將會(huì)主動(dòng)的卸除 /home/nfsfile/public 』。
很不錯(cuò)用的一個(gè)工具吧!因?yàn)橛杏玫椒?wù)器的數(shù)據(jù)時(shí)才自動(dòng)掛載,沒(méi)有使用了就會(huì)自動(dòng)卸除! 而不是傳統(tǒng)的情況一直是掛載的!既然這么好用,那就讓我們實(shí)際來(lái)操演一下:
-
建立主配置文件 /etc/auto.master ,并指定偵測(cè)的特定目錄
這個(gè)主要配置文件的內(nèi)容很簡(jiǎn)單,只要有要被持續(xù)偵測(cè)的目錄及『數(shù)據(jù)對(duì)應(yīng)文件』即可。 那個(gè)數(shù)據(jù)對(duì)應(yīng)文件的文件名是可以自行設(shè)定的,在鳥(niǎo)哥這個(gè)例子當(dāng)中我使用 /etc/auto.nfs 來(lái)命名。
[root@clientlinux ~]# vim /etc/auto.master
/home/nfsfile /etc/auto.nfs
上述數(shù)據(jù)中比較需要注意的是,那個(gè) /home/nfsfile 目錄不需要存在,因?yàn)?autofs 會(huì)主動(dòng)的建立該目錄! 如果你建立了,可能反而會(huì)出問(wèn)題~因此,先確定一下沒(méi)有該目錄吧!
-
建立數(shù)據(jù)對(duì)應(yīng)文件內(nèi) (/etc/auto.nfs) 的掛載信息與服務(wù)器對(duì)應(yīng)資源
剛剛我們所指定的 /etc/auto.nfs 是自行設(shè)定的,所以這個(gè)檔案是不存在的。那么這個(gè)檔案的格式是如何呢?你可以這樣看:
[本地端次目錄](méi) [-掛載參數(shù)] [服務(wù)器所提供的目錄](méi)
選項(xiàng)與參數(shù):
[本地端次目錄](méi) :指的就是在 /etc/auto.master 內(nèi)指定的目錄之次目錄
[-掛載參數(shù)] :就是前一小節(jié)提到的 rw,bg,soft 等等的參數(shù)啦!可有可無(wú);
[服務(wù)器所提供的目錄](méi) :例如 192.168.100.254:/home/public 等
[root@clientlinux ~]# vim /etc/auto.nfs
public -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/home/public
testing -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/home/test
temp -rw,bg,soft,rsize=32768,wsize=32768 192.168.100.254:/tmp
# 參數(shù)部分,只要最前面加個(gè) - 符號(hào)即可!
| 參數(shù) | 參數(shù)功能 | 預(yù)設(shè)參數(shù) |
|---|---|---|
| fg bg |
當(dāng)執(zhí)行掛載時(shí),該掛載的行為會(huì)在前景 (fg) 還是在背景 (bg) 執(zhí)行? 若在前景執(zhí)行時(shí),則 mount 會(huì)持續(xù)嘗試掛載,直到成功或 time out 為止,若為背景執(zhí)行, 則 mount 會(huì)在背景持續(xù)多次進(jìn)行 mount ,而不會(huì)影響到前景的程序操作。 如果你的網(wǎng)絡(luò)聯(lián)機(jī)有點(diǎn)不穩(wěn)定,或是服務(wù)器常常需要開(kāi)關(guān)機(jī),那建議使用 bg 比較妥當(dāng)。 | fg |
| soft hard |
如果是 hard 的情況,則當(dāng)兩者之間有任何一部主機(jī)脫機(jī),則 RPC 會(huì)持續(xù)的呼叫,直到對(duì)方恢復(fù)聯(lián)機(jī)為止。如果是 soft 的話(huà),那 RPC 會(huì)在 time out 后『重復(fù)』呼叫,而非『持續(xù)』呼叫, 因此系統(tǒng)的延遲會(huì)比較不這么明顯。同上,如果你的服務(wù)器可能開(kāi)開(kāi)關(guān)關(guān),建議用 soft 喔! | hard |
| intr | 當(dāng)你使用上頭提到的 hard 方式掛載時(shí),若加上 intr 這個(gè)參數(shù), 則當(dāng) RPC 持續(xù)呼叫中,該次的呼叫是可以被中斷的 (interrupted)。 | 沒(méi)有 |
| rsize wsize |
讀出(rsize)與寫(xiě)入(wsize)的區(qū)塊大小 (block size)。 這個(gè)設(shè)定值可以影響客戶(hù)端與服務(wù)器端傳輸數(shù)據(jù)的緩沖記憶容量。一般來(lái)說(shuō), 如果在局域網(wǎng)絡(luò)內(nèi) (LAN) ,并且客戶(hù)端與服務(wù)器端都具有足夠的內(nèi)存,那這個(gè)值可以設(shè)定大一點(diǎn), 比如說(shuō) 32768 (bytes) 等,提升緩沖記憶區(qū)塊將可提升 NFS 文件系統(tǒng)的傳輸能力! 但要注意設(shè)定的值也不要太大,最好是達(dá)到網(wǎng)絡(luò)能夠傳輸?shù)淖畲笾禐橄蕖?/td> | rsize=1024 wsize=1024 |
這樣就可以建立對(duì)應(yīng)了!要注意的是,那些 /home/nfsfile/public 是不需要事先建立的! 咱們的 autofs 會(huì)事情況來(lái)處理喔!好了,接下來(lái)讓我們看看如何實(shí)際運(yùn)作吧!
-
實(shí)際運(yùn)作與觀察
配置文件設(shè)定妥當(dāng)后,當(dāng)然就是要啟動(dòng) autofs 啦!
[root@clientlinux ~]# /etc/init.d/autofs stop
[root@clientlinux ~]# /etc/init.d/autofs start
# 很奇怪!非常怪!CentOS 6.x 的 autofs 使用 restart 會(huì)失效!所以鳥(niǎo)哥才進(jìn)行兩次
假設(shè)你目前并沒(méi)有掛載任何來(lái)自 192.168.100.254 這部 NFS 服務(wù)器的資源目錄。好了, 那讓我們實(shí)際來(lái)觀察看看幾個(gè)重要的數(shù)據(jù)吧!先看看 /home/nfsfile 會(huì)不會(huì)主動(dòng)的被建立? 然后,如果我要進(jìn)入 /home/nfsfile/public 時(shí),文件系統(tǒng)會(huì)如何變化呢?
[root@clientlinux ~]# ll -d /home/nfsfile
drwxr-xr-x. 2 root root 0 2011-07-28 00:07 /home/nfsfile
# 仔細(xì)看,妳會(huì)發(fā)現(xiàn) /home/nfsfile 容量是 0 喔!那是正常的!因?yàn)槭?autofs 建立的
[root@clientlinux ~]# cd /home/nfsfile/public
[root@clientlinux public]# mount | grep nfsfile
192.168.100.254:/home/public on /home/nfsfile/public type nfs (rw,soft,rsize=32768,
wsize=32768,sloppy,vers=4,addr=192.168.100.254,clientaddr=192.168.100.10)
# 上面的輸出是同一行!瞧!突然出現(xiàn)這個(gè)玩意兒!因?yàn)槭亲詣?dòng)掛載的嘛!
[root@clientlinux public]# df /home/nfsfile/public
文件系統(tǒng) 1K-區(qū)段 已用 可用 已用% 掛載點(diǎn)
192.168.100.254:/home/public
7104640 143104 6607040 3% /home/nfsfile/public
# 檔案的掛載也出現(xiàn)沒(méi)錯(cuò)!
呵呵!真是好??!如此一來(lái),如果真的有需要用到該目錄時(shí),系統(tǒng)才會(huì)去相對(duì)的服務(wù)器上面掛載! 若是一陣子沒(méi)有使用,那么該目錄就會(huì)被卸除呢!這樣就減少了很多不必要的使用時(shí)機(jī)啦!還不錯(cuò)用吧! _