一、服務(wù)器配置:
安裝軟件:
yum -y install nfs-utils rpcbind
更改配置文件:
vim /etc/exports
#? 添加
/var/www/html/ nfs 192.168.1.*(rw,async,no_root_squash)
先來設(shè)置IP
/etc/sysconfig/network-scripts/ifcfg-enp0s3
更改BOOTPROTO=static;添加IPADDR、NETMASK、GATEWAY。
臨時設(shè)置IP:
ifconfig enp0s3 192.168.1.101
這里因為是虛擬機(jī),便不在更改IP設(shè)置,采用默認(rèn)IP。
/var/www/html/ nfs 10.0.2.*(rw,async,no_root_squash)
更改目錄權(quán)限:
chmod?-R? a+w? /home/lee/nfs
啟動服務(wù):
先為rpcbind和nfs做開機(jī)啟動:(必須先啟動rpcbind服務(wù))
systemctl enable rpcbind.service
systemctl enable nfs-server.service
systemctl?start? rpcbind
systemctl?start? nfs
開啟防火墻端口:
#rpcbind的端口
iptables?-I? INPUT? -p?udp? --dport? 111?-j? ACCEPT
iptables?-I? INPUT? -p?tcp? --dport? 111?-j? ACCEPT
#nfs的端口
iptables?-I? INPUT? -p?udp? --dport? 2049?-j? ACCEPT
iptables?-I? INPUT? -p?tcp? --dport? 2049?-j? ACCEPT
rpcinfo -p
檢查 NFS 服務(wù)器是否掛載我們想共享的目錄 /home/nfs/:
exportfs -r
#使配置生效
exportfs
二、linux客戶端安裝
yum?-y? install? nfs-utils
查看遠(yuǎn)程共享信息:
showmount? -e? 192.168.1.251
clnt_create: RPC: Program not registered
是由于你nfs服務(wù)器沒有啟動,可通過service
nfs start 啟動
手動掛載
mount 192.168.1.251:/var/www/html/nfs/root/nfs
查看日志
cat /var/log/messages | grep mount
refused mount request from 10.0.2.15 for/var/www/html/nfs (/var/www/html/nfs): unmatched host
查找資料
解決方式1、去掉/etc/hosts中的主機(jī)名ip
解決方式2、查看客戶端掛載的目錄不具備讀寫權(quán)限,添加權(quán)限即可。
解決方式3、服務(wù)器和客戶機(jī)網(wǎng)段不同引起,修改ip地址,使其同網(wǎng)段即可。
最后通過更改IP地址在同一網(wǎng)段內(nèi)設(shè)置OK。
驗證
掛載的服務(wù)器上新建test.txt 查看nfs服務(wù)器上是否可以同步?
Nfs更改文件內(nèi)容 其掛載的服務(wù)器上是否有對應(yīng)的更改?
Nfs上新建文件djw.txt,查看掛載服務(wù)器上是否有該文件?
總結(jié)
NFS服務(wù)需要安裝的軟件
nfs-utils-*?:包括基本的NFS命令與監(jiān)控程序?
rpcbind-*?:支持安全NFS RPC服務(wù)的連接
注:通常情況下,是作為系統(tǒng)的默認(rèn)包安裝的
??? CentOS6.*之前rpcbind叫portmap。
NFS系統(tǒng)守護(hù)進(jìn)程
nfsd:它是基本的NFS守護(hù)進(jìn)程,主要功能是管理客戶端是否能夠登錄服務(wù)器mountd:它是RPC安裝守護(hù)進(jìn)程,主要功能是管理NFS的文件系統(tǒng)。當(dāng)客戶端順利通過nfsd登錄NFS服務(wù)器后,在使用NFS服務(wù)所提供的文件前,還必須通過文件使用權(quán)限的驗證。它會讀取NFS的配置文件/etc/exports來對比客戶端權(quán)限。
rpcbind:主要功能是進(jìn)行端口映射工作。當(dāng)客戶端嘗試連接并使用RPC服務(wù)器提供的服務(wù)(如NFS服務(wù))時,rpcbind會將所管理的與服務(wù)對應(yīng)的端口提供給客戶端,從而使客戶可以通過該端口向服務(wù)器請求服務(wù)。
NFS的常用目錄
/etc/exports?? ? NFS服務(wù)的主要配置文件
/usr/sbin/exportfs?NFS服務(wù)的管理命令
/usr/sbin/showmount 客戶端的查看命令
/var/lib/nfs/etab? 記錄NFS分享出來的目錄的完整權(quán)限設(shè)定值
/var/lib/nfs/xtab? 記錄曾經(jīng)登錄過的客戶端信息
NFS服務(wù)的配置文件為 /etc/exports,這個文件是NFS的主要配置文件,不過系統(tǒng)并沒有默認(rèn)值,所以這個文件不一定會存在,可能要使用vim手動建立,然后在文件里面寫入配置內(nèi)容。
/etc/exports文件內(nèi)容格式
<輸出目錄> [客戶端1?選項(訪問權(quán)限,用戶映射,其他)] [客戶端2?選項(訪問權(quán)限,用戶映射,其他)]
輸出目錄:輸出目錄是指NFS系統(tǒng)中需要共享給客戶機(jī)使用的目錄
客戶端:客戶端是指網(wǎng)絡(luò)中可以訪問這個NFS輸出目錄的計算機(jī)
客戶端常用的指定方式:
指定ip地址的主機(jī):192.168.0.200
指定子網(wǎng)中的所有主機(jī):192.168.0.0/24192.168.0.0/255.255.255.0
指定域名的主機(jī):david.bsmart.cn
指定域中的所有主機(jī):*.bsmart.cn
所有主機(jī):*
選項
選項用來設(shè)置輸出目錄的訪問權(quán)限、用戶映射等。
NFS主要有3類選項:
訪問權(quán)限選項
設(shè)置輸出目錄只讀:ro
設(shè)置輸出目錄讀寫:rw
用戶映射選項
all_squash:將遠(yuǎn)程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(默認(rèn)設(shè)置);
root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認(rèn)設(shè)置);
no_root_squash:與rootsquash取反;
anonuid=xxx:將遠(yuǎn)程訪問的所有用戶都映射為匿名用戶,并指定該用戶為本地用戶(UID=xxx);
anongid=xxx:將遠(yuǎn)程訪問的所有用戶組都映射為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
其它選項
secure:限制客戶端只能從小于1024的tcp/ip端口連接nfs服務(wù)器(默認(rèn)設(shè)置);
insecure:允許客戶端從大于1024的tcp/ip端口連接服務(wù)器;
sync:將數(shù)據(jù)同步寫入內(nèi)存緩沖區(qū)與磁盤中,效率低,但可以保證數(shù)據(jù)的一致性;
async:將數(shù)據(jù)先保存在內(nèi)存緩沖區(qū)中,必要時才寫入磁盤;
wdelay:檢查是否有相關(guān)的寫操作,如果有則將這些寫操作一起執(zhí)行,這樣可以提高效率(默認(rèn)設(shè)置);
no_wdelay:若有寫操作則立即執(zhí)行,應(yīng)與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs服務(wù)器將檢查其父目錄的權(quán)限(默認(rèn)設(shè)置);
no_subtree:即使輸出目錄是一個子目錄,nfs服務(wù)器也不檢查其父目錄的權(quán)限,這樣可以提高效率;
客戶端軟件
yum -y install nfs-utils
nfs共享權(quán)限和訪問控制
(1)客戶端root用戶
使用客戶端的root身份在nfs服務(wù)器上創(chuàng)建文件,文件的所有者和所屬組是nfsnobody。
(2)客戶端普通用戶
使用客戶端的普通用戶身份在nfs服務(wù)器上創(chuàng)建文件,所有者和所屬組是nobody或普通用戶。
(3)共享目錄的完整權(quán)限值設(shè)定/var/lib/nfs/etab
1、客戶端連接NFS的時候,對root的檢查
如果設(shè)置no_root_squash,那么此時root用戶的身份被壓縮為NFS server上面的root;
如果設(shè)置了all_squash、anonuid、anongid,此時root?身份被壓縮為指定用戶;
如果沒有明確指定,此時root用戶被壓縮為nfsnobody;
如果同時指定no_root_squash與all_squash?用戶將被壓縮為?nfsnobody,如果設(shè)置了anonuid、anongid將被壓縮到所指定的用戶與組;
2、客戶端連接NFS的時候,對普通用戶的檢查
如果明確設(shè)定了普通用戶被壓縮的身份,那么此時客戶端用戶的身份轉(zhuǎn)換為指定用戶;
如果NFS server上面有同名用戶,那么此時客戶端登錄賬戶的身份轉(zhuǎn)換為NFS server上面的同名用戶;
如果沒有明確指定,也沒有同名用戶,那么此時?用戶身份被壓縮成nobody;
NFS共享目錄的卸載和自動掛載
(1)NFS共享目錄的卸載
a、卸載客戶端的掛載目錄,在客戶端執(zhí)行以下命令
[root@localhost ~]#umount /media/
b、停止服務(wù)器端的共享,在服務(wù)器端執(zhí)行以下命令
[root@localhost ~]#exportfs -au
c、重新共享所有目錄并輸出詳細(xì)信息,服務(wù)器端執(zhí)行以下命令
[root@localhost ~]#exportfs -rv
d、exportfs命令
如果我們在啟動了NFS之后又修改了/etc/exports,是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs?命令來使改動立刻生效,該命令格式如下:
格式:exportfs [-aruv]
-a?全部掛載或卸載?/etc/exports中的內(nèi)容
-r?重新讀取/etc/exports?中的信息?,并同步更新/etc/exports、/var/lib/nfs/xtab
-u?卸載單一目錄(和-a一起使用為卸載所有/etc/exports文件中的目錄)
-v?在export的時候,將詳細(xì)的信息輸出到屏幕上。
具體例子:
exportfs -au?卸載所有共享目錄
exportfs -rv?重新共享所有目錄并輸出詳細(xì)信息
e、rpcinfo命令
rpcinfo利用rpcinfo -p?可以查看出RPC開啟的端口所提供的程序有哪些,其中nfs?開啟的是2049,portmapper(rpcbind)?開啟的是111,其余則是rpc開啟的
(2)NFS共享目錄的自動掛載
把掛載信息寫入到/etc/fstab文件中
[root@localhost~]# vim /etc/fstab
192.168.115.120:/zhangsan/media???????????????nfs??? defaults??????? 0 0
[root@localhost~]# mount -a
NFS常見故障解決方法
(1)The rpcbind failure error
故障現(xiàn)象:
nfs mount: server1:: RPC: Rpcbind failure
RPC: Timed Out
nfs mount: retrying: /mntpoint
故障原因:
第一,可能因為客戶機(jī)的hosts文件中存在錯誤的ip地址、主機(jī)名或節(jié)點名組合;
第二,服務(wù)器因為過載而暫時停止服務(wù)。
(2)The server not responding error
故障現(xiàn)象:
NFS server server2 not responding, still trying
故障原因:
第一,網(wǎng)絡(luò)不通,用ping命令檢測一下。
第二,服務(wù)器關(guān)機(jī)。
(3)The NFS client fails a reboot error
故障現(xiàn)象:
啟動客戶機(jī)后停住了,不斷顯示如下提示信息:
Setting default interface for multicast: add net 224.0.0.0:gateway:
client_node_name.
故障原因:
在etc/vfstab的mount選項中使用了fg而又無法成功mount服務(wù)器上的資源,改成bg或?qū)⒃撔凶⑨尩?,直到服?wù)器可用為止。
(4)The service not responding error
故障現(xiàn)象:
nfs mount: dbserver: NFS: Service not responding
nfs mount: retrying: /mntpoint
故障原因:
第一,當(dāng)前級別不是級別3,用who -r查看,用init 3切換。
第二,NFS Server守護(hù)進(jìn)程不存在,用ps -ef | grep nfs檢查,用/etc/init.d/nfs start啟動。
(5)The program not registered error
故障現(xiàn)象:
nfs mount: dbserver: RPC: Program not registered
nfs mount: retrying: /mntpoint
故障原因:
第一,當(dāng)前級別不是級別3。
第二,mountd守護(hù)進(jìn)程沒有啟動,用/etc/init.d/nfs腳本啟動NFS守護(hù)進(jìn)程。
第三,看/etc/dfs/dfstab中的條目是否正常。
(6)The stale file handle error
故障現(xiàn)象:
stale NFS file handle
故障原因:
服務(wù)器上的共享資源移動位置了,在客戶端使用umount和mount重新掛接就可以了。
(7)The unknown host error
故障現(xiàn)象:
nfs mount: sserver1:: RPC: Unknown host
故障原因:
hosts文件中的內(nèi)容不正確。
(8)The mount point error
故障現(xiàn)象:
mount: mount-point /DS9 does not exist.
故障原因:
該掛接點在客戶機(jī)上不存在,注意檢查命令行或/etc/vfstab文件中相關(guān)條目的拼寫。
(9)The no such file error
故障現(xiàn)象:
No such file or directory.
故障原因:
該掛接點在服務(wù)器上不存在,注意檢查命令行或/etc/vfstab文件中相關(guān)條目的拼寫。
(10)No route to host
故障現(xiàn)象:
# mount 192.168.115.120:/opt/data /data -t nfs -o rw
mount: mount to NFS server ‘192.168.115.120’ failed: SystemError: No route to host.
故障原因:
防火墻被打開,關(guān)閉防火墻。
這個原因很多人都忽視了,如果開啟了防火墻(包括iptables和硬件防火墻),NFS默認(rèn)使用111端口,我們先要檢測是否打開了這個端口,還要檢查TCP_Wrappers的設(shè)定。
(11)Not owner
故障現(xiàn)象:
# mount -F nfs -o rw 192.168.115.120:/mnt/data /data
nfs mount: mount: /data: Not owner
故障原因:
這是Solaris 10版本掛載較低版本nfs時報的錯誤。
解決:
需要用-o vers=3參數(shù)
示例:
# mount -F nfs -o vers=3 192.168.115.120:/mnt/data /data
(12)RPC: Program not registered & retrying
故障現(xiàn)象:
nfs mount: 192.168.115.120: : RPC: Program not registered
nfs mount: retrying: /data
故障原因:
沒有啟動NFS共享端服務(wù)。
解決:需要重新啟動share端的NFS服務(wù),
Linux:
mount: RPC: Program not registered
# /etc/init.d/nfs restart
Solaris:
mount: RPC: Program not registered
# /etc/rc.d/init.d/nfs restart
(13)can’t contact portmapper: RPC: Remote system error?–?Connectionrefused
故障現(xiàn)象:
# exportfs -a
can’t contact portmapper: RPC: Remote system error – Connectionrefused
故障原因:
出現(xiàn)這個錯誤信息是由于server端的portmap沒有啟動。
解決:
# /etc/init.d/portmap start