網(wǎng)絡(luò)文件系統(tǒng),英文Network File System(NFS)统捶。是由SUN公司研制的UNIX表示層協(xié)議(pressentation layer protocol)鸽素,能使使用者訪問網(wǎng)絡(luò)上別處的文件就像在使用自己的計(jì)算機(jī)一樣务甥。
它允許網(wǎng)絡(luò)中的計(jì)算機(jī)之間通過TCP/IP網(wǎng)絡(luò)共享資源。在NFS的應(yīng)用中呜袁,本地NFS的客戶端應(yīng)用可以透明地讀寫位于遠(yuǎn)端NFS服務(wù)器上的文件,就像訪問本地文件一樣简珠,也就是說客戶端PC可以掛載NFS服務(wù)器所提供的目錄并且掛載之后這個(gè)目錄看起來如同本地的磁盤分區(qū)一樣阶界,可以使用cp、cd聋庵、mv膘融、rm及df等與磁盤相關(guān)的命令。
它基于開放網(wǎng)絡(luò)運(yùn)算遠(yuǎn)程過程調(diào)用(ONC RPC)協(xié)議:一個(gè)開放祭玉、標(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)程過程調(diào)用(英語:Remote Procedure Call脱货,縮寫為 RPC)是一個(gè)計(jì)算機(jī)通信協(xié)議岛都。該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一個(gè)地址空間(通常為一個(gè)開放網(wǎng)絡(luò)的一臺(tái)計(jì)算機(jī))的子程序,而程序員就像調(diào)用本地程序一樣振峻,無需額外地為這個(gè)交互作用編程(無需關(guān)注細(xì)節(jié))疗绣。RPC是一種服務(wù)器-客戶端(Client/Server)模式,經(jīng)典實(shí)現(xiàn)是一個(gè)通過發(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多矮,也稱為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é)議的開發(fā)之后湾盗,第4版成為由Internet工程任務(wù)組(IETF)開發(fā)的第一個(gè)版本伏蚊。
與以前的版本相比,NFSv4的一大優(yōu)勢(shì)是僅使用一個(gè)IP端口2049來運(yùn)行該服務(wù)格粪,從而簡(jiǎn)化了跨防火墻使用協(xié)議的過程躏吊。也就意為著,NFSv4可以不再需要rpcbind(portmap
)
紅帽7關(guān)于nfs的說明"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的說明"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
先說NFSv4以下的版本
由于NFSv2或NFSv3,使用了多個(gè)守護(hù)進(jìn)程(lockd, rpc.statd, rpc.mountd, ...)提供不同的功能疆导,每個(gè)進(jìn)程都要監(jiān)聽一個(gè)端口赁项,且端口不是固定的,這樣就要一個(gè)服務(wù)來提供知名端口(111)來響應(yīng)Client的訪問澈段,并返回給客戶端要訪問服務(wù)的當(dāng)前端口悠菜,這個(gè)服務(wù)就是rpcbind
-
安裝
# yum install rpcbind nfs-utils
-
rpcbind
Rpcbind實(shí)用程序是將RPC程序號(hào)轉(zhuǎn)換為通用地址的服務(wù)器。
接受來自本地RPC服務(wù)的端口預(yù)約注冊(cè)败富。然后使這些端口可用(或通告)悔醋,以便相應(yīng)的遠(yuǎn)程RPC服務(wù)可以訪問它們。 Rpcbind服務(wù)響應(yīng)對(duì)RPC服務(wù)的請(qǐng)求兽叮,并建立與請(qǐng)求的RPC服務(wù)的連接篙顺。
一般安裝完成后會(huì),自動(dòng)自動(dòng)運(yùn)行充择,并加入開機(jī)啟動(dòng)中 -
nfs-utils
NFS utils 是支持NFS服務(wù)的客戶端和服務(wù)程序
-
rpcbind
-
nfs服務(wù)器
- a) 共享配置(有兩種方法可以在NFS服務(wù)器上配置exports)
- /etc/exports
export host1(options1) host2(options2) host3(options3)
- /etc/exports
- /usr/sbin/exportfs
exportfs命令允許root用戶有選擇地導(dǎo)出或取消導(dǎo)出目錄德玫,而無需重新啟動(dòng)NFS服務(wù)。提供適當(dāng)?shù)倪x項(xiàng)后椎麦,/usr/sbin/exportfs命令會(huì)將導(dǎo)出的文件系統(tǒng)寫入/var/lib/nfs/xtab宰僧。由于rpc.mountd在確定對(duì)文件系統(tǒng)的訪問特權(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 所分享出來的目錄的完整權(quán)限設(shè)定值嘁捷;另一個(gè) xtab 則記錄曾經(jīng)鏈接到此 NFS 服務(wù)器的相關(guān)客戶端數(shù)據(jù)造成。
- 分享資源的登錄記錄:/var/lib/nfs/*tab
- 客戶端查詢服務(wù)器分享資源的指令:/usr/sbin/showmount
這是另一個(gè)重要的 NFS 指令。exportfs 是用在 NFS Server 端雄嚣,而 showmount 則主要用在 Client 端晒屎。這個(gè) showmount 可以用來察看 NFS 分享出來的目錄資源喔喘蟆!
- 客戶端查詢服務(wù)器分享資源的指令:/usr/sbin/showmount
- a) 共享配置(有兩種方法可以在NFS服務(wù)器上配置exports)
exports文件 options 參數(shù)
參數(shù) | 功能說明 |
---|---|
rw | 可讀寫的權(quán)限 |
ro | 只讀的權(quán)限 |
sync(同步) | 資料同步寫入到內(nèi)存與硬盤中(慢,不容易丟數(shù)據(jù)) |
async(異步) | 資料會(huì)暫存于內(nèi)存當(dāng)中鼓鲁,而不是寫入硬盤(快蕴轨,容易丟數(shù)據(jù)) |
no_root_squash | 客戶端用root用戶訪問該共享文件夾時(shí), root用戶不會(huì)映射成匿名用戶(極不安全骇吭,不建議使用) |
root_squash | 客戶端用root用戶訪問該共享文件夾是橙弱,將root用戶映射為匿名用戶 |
all_squash | 不論登入NFS的使用者身份是誰,他的身份都會(huì)被壓縮成匿名用戶(nfsnobody) |
anonuid=xxx | 指定NFS服務(wù)器的匿名用戶UID |
anongid=xxx | 指定NFS服務(wù)器的匿名用戶GID |
insecure | NFS通過1024以上的端口發(fā)送 |
secure | NFS通過1024以下的安全TCP/IP端口發(fā)送 |
hide | 在NFS共享目錄中共享其子目錄 |
no_hide | 在NFS共享目錄中共享其子目錄 |
wdelay | 如果多個(gè)用戶寫入NFS目錄燥狰,則歸組寫入(默認(rèn)) |
no_wdelay | 如果多個(gè)用戶寫入NFS目錄棘脐,則立即寫入,當(dāng)使用async時(shí)龙致,無需此設(shè)置 |
subtree_check | 在共享/usr/bin之類的子目錄時(shí)蛀缝,強(qiáng)制NFS檢查父目錄的權(quán)限(默認(rèn)) |
no_subtree_check | 和上面相對(duì),不檢查父目錄權(quán)限 |
exports文件 host 參數(shù)
類型 | 說明 | 示例 |
---|---|---|
single host | 單個(gè)主機(jī) |
ftp.abc.com 192.168.2.10 ipv6地址: ::1
|
IP networks | 一個(gè)網(wǎng)段 |
192.168.2.0/255.255.255.0 192.168.2.0/24
|
wildcards | 機(jī)器名稱可以包含通配符*和净当? 也可以在[方括號(hào)]中包含字符類列表内斯。 |
*.abc.com |
netgroups | NIS網(wǎng)絡(luò)組可以以@group的形式給出蕴潦。 在檢查成員資格時(shí), 僅考慮組成員的主機(jī)部分像啼。 |
|
anonymous | 使用一個(gè)*字符(不要與上面的通配符混淆) 將匹配任意客戶端 |
* |
/etc/exports的配置
# vim /etc/exports
"root 保有 root 的權(quán)限"
/tmp *(rw,no_root_squash)
"同一目錄針對(duì)不同范圍開放不同權(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
"開放匿名登錄的情況, 特別注意到那個(gè) all_squash 與 anonuid, anongid 的功能此疹!如此一來僧诚,
當(dāng) ftp.abc.com 登入這部 NFS 主機(jī),并且在 /home/linux 寫入檔案時(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)行中眠菇,下面來看一下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)聽了111/TCP, 111/UDP
下面來啟動(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ī)與客戶端的 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
之前說,在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”命令乔外,替代命令還沒有找到
=====================================
客戶端
手動(dòng)掛載 NFS 服務(wù)器分享的資源
你要如何掛載 NFS 服務(wù)器所提供的文件系統(tǒng)呢床三?基本上,可以這樣做:
(NFSv2 v3)
- 確認(rèn)本地端已經(jīng)啟動(dòng)了 rpcbind 服務(wù)杨幼,nfs-utils(這個(gè)工具包包含了客戶端和服務(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)可掛載的目錄都掛載上來了"
[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ù)開啟,才能使用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è)鳥哥 寫得很好稳析,引用
在一般 NFS 文件系統(tǒng)的使用情況中洗做,如果客戶端要使用服務(wù)器端所提供的 NFS 文件系統(tǒng)時(shí),要嘛就是得在 /etc/rc.d/rc.local 當(dāng)中設(shè)定開機(jī)時(shí)掛載彰居,要嘛就得要登入系統(tǒng)后手動(dòng)利用 mount 來掛載诚纸。 此外,客戶端得要預(yù)先手動(dòng)的建立好掛載點(diǎn)目錄陈惰,然后掛載上來畦徘。但是這樣的使用情況恐怕有點(diǎn)小問題。
NFS 文件系統(tǒng)與網(wǎng)絡(luò)聯(lián)機(jī)的困擾:
我們知道 NFS 服務(wù)器與客戶端的聯(lián)機(jī)或許不會(huì)永遠(yuǎn)存在奴潘,而 RPC 這個(gè)服務(wù)又挺討厭的旧烧,如果掛載了 NFS 服務(wù)器后,任何一方脫機(jī)都可能造成另外一方老是在等待逾時(shí)~而且画髓,掛載的 NFS 文件系統(tǒng)可能又不是常常被使用掘剪,但若不掛載的話,有時(shí)候緊急要使用時(shí)又得通知系統(tǒng)管理員奈虾, 這又很不方便...岸崴廉赔!好討厭的感覺啊~@_@
所以,讓我們換個(gè)思考的角度來討論一下使用 NFS 的情境:
- 可不可以讓客戶端在有使用到 NFS 文件系統(tǒng)的需求時(shí)才讓系統(tǒng)自動(dòng)掛載匾鸥?
- 當(dāng) NFS 文件系統(tǒng)使用完畢后蜡塌,可不可以讓 NFS 自動(dòng)卸除,以避免可能的 RPC 錯(cuò)誤勿负?
如果能達(dá)到上述的功能馏艾,那就太完美啦!有沒有這東西呢奴愉?有的琅摩,在現(xiàn)在的 Linux 環(huán)境下這是可以達(dá)成的理想!用的就是 autofs 這個(gè)服務(wù)啦锭硼!
autofs 的設(shè)定概念:
autofs 這個(gè)服務(wù)在客戶端計(jì)算機(jī)上面房资,會(huì)持續(xù)的偵測(cè)某個(gè)指定的目錄, 并預(yù)先設(shè)定當(dāng)使用到該目錄下的某個(gè)次目錄時(shí)檀头,將會(huì)取得來自服務(wù)器端的 NFS 文件系統(tǒng)資源轰异,并進(jìn)行自動(dòng)掛載的動(dòng)作。 講這樣或許你有點(diǎn)模糊暑始,讓我們拿底下這個(gè)圖示來看看:
如上圖所示搭独,我們的 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 目錄資源互躬!
舉例來說:『當(dāng)我們?cè)诳蛻舳艘褂?/home/nfsfile/public 的數(shù)據(jù)時(shí)播赁,此時(shí) autofs 才會(huì)去 192.168.100.254 服務(wù)器上掛載 /home/public !』且『當(dāng)隔了 5 分鐘沒有使用該目錄下的數(shù)據(jù)后吼渡,則客戶端系統(tǒng)將會(huì)主動(dòng)的卸除 /home/nfsfile/public 』容为。
很不錯(cuò)用的一個(gè)工具吧!因?yàn)橛杏玫椒?wù)器的數(shù)據(jù)時(shí)才自動(dòng)掛載寺酪,沒有使用了就會(huì)自動(dòng)卸除坎背! 而不是傳統(tǒng)的情況一直是掛載的!既然這么好用寄雀,那就讓我們實(shí)際來操演一下:
-
建立主配置文件 /etc/auto.master 得滤,并指定偵測(cè)的特定目錄
這個(gè)主要配置文件的內(nèi)容很簡(jiǎn)單,只要有要被持續(xù)偵測(cè)的目錄及『數(shù)據(jù)對(duì)應(yīng)文件』即可盒犹。 那個(gè)數(shù)據(jù)對(duì)應(yīng)文件的文件名是可以自行設(shè)定的懂更,在鳥哥這個(gè)例子當(dāng)中我使用 /etc/auto.nfs 來命名眨业。
[root@clientlinux ~]# vim /etc/auto.master
/home/nfsfile /etc/auto.nfs
上述數(shù)據(jù)中比較需要注意的是,那個(gè) /home/nfsfile 目錄不需要存在沮协,因?yàn)?autofs 會(huì)主動(dòng)的建立該目錄龄捡! 如果你建立了,可能反而會(huì)出問題~因此慷暂,先確定一下沒有該目錄吧聘殖!
-
建立數(shù)據(jù)對(duì)應(yīng)文件內(nèi) (/etc/auto.nfs) 的掛載信息與服務(wù)器對(duì)應(yīng)資源
剛剛我們所指定的 /etc/auto.nfs 是自行設(shè)定的,所以這個(gè)檔案是不存在的行瑞。那么這個(gè)檔案的格式是如何呢就斤?你可以這樣看:
[本地端次目錄] [-掛載參數(shù)] [服務(wù)器所提供的目錄]
選項(xiàng)與參數(shù):
[本地端次目錄] :指的就是在 /etc/auto.master 內(nèi)指定的目錄之次目錄
[-掛載參數(shù)] :就是前一小節(jié)提到的 rw,bg,soft 等等的參數(shù)啦!可有可無蘑辑;
[服務(wù)器所提供的目錄] :例如 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ù)器常常需要開關(guān)機(jī)心剥,那建議使用 bg 比較妥當(dāng)邦尊。 | fg |
soft hard |
如果是 hard 的情況,則當(dāng)兩者之間有任何一部主機(jī)脫機(jī)优烧,則 RPC 會(huì)持續(xù)的呼叫蝉揍,直到對(duì)方恢復(fù)聯(lián)機(jī)為止。如果是 soft 的話畦娄,那 RPC 會(huì)在 time out 后『重復(fù)』呼叫又沾,而非『持續(xù)』呼叫, 因此系統(tǒng)的延遲會(huì)比較不這么明顯熙卡。同上杖刷,如果你的服務(wù)器可能開開關(guān)關(guān),建議用 soft 喔驳癌! | hard |
intr | 當(dāng)你使用上頭提到的 hard 方式掛載時(shí)滑燃,若加上 intr 這個(gè)參數(shù), 則當(dāng) RPC 持續(xù)呼叫中喂柒,該次的呼叫是可以被中斷的 (interrupted)不瓶。 | 沒有 |
rsize wsize |
讀出(rsize)與寫入(wsize)的區(qū)塊大小 (block size)禾嫉。 這個(gè)設(shè)定值可以影響客戶端與服務(wù)器端傳輸數(shù)據(jù)的緩沖記憶容量。一般來說蚊丐, 如果在局域網(wǎng)絡(luò)內(nèi) (LAN) 熙参,并且客戶端與服務(wù)器端都具有足夠的內(nèi)存,那這個(gè)值可以設(shè)定大一點(diǎn)麦备, 比如說 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ì)事情況來處理喔锐涯!好了,接下來讓我們看看如何實(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ì)失效变隔!所以鳥哥才進(jìn)行兩次
假設(shè)你目前并沒有掛載任何來自 192.168.100.254 這部 NFS 服務(wù)器的資源目錄肚吏。好了轿偎, 那讓我們實(shí)際來觀察看看幾個(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)沒錯(cuò)系馆!
呵呵送漠!真是好啊由蘑!如此一來闽寡,如果真的有需要用到該目錄時(shí)代兵,系統(tǒng)才會(huì)去相對(duì)的服務(wù)器上面掛載! 若是一陣子沒有使用爷狈,那么該目錄就會(huì)被卸除呢植影!這樣就減少了很多不必要的使用時(shí)機(jī)啦!還不錯(cuò)用吧涎永! _