NFS网络文件系统服务配置、验证及错误解决
前期准备:
1.至少准备一台服务器(nfs-server)和一台客户机(nfs-client)。老表测试用的服务器端用的系统是ubuntu,客户机用的是CentOS 6.5,所以有些地方操作不一样。
2.给两台测试机都安装NFS服务和rpc服务。(一般安装NFS服务会自动安装rpc)
安装:
ubuntu:sudo apt-get install nfs-kernel-server
CentOS:yum groupinstall "NFS file server"
配置服务:
1.作服务器端的主机需要开启NFS服务和rpc服务,客户机只需开启rpc服务即可。
nfs-server上:/etc/init.d/rpcbind start
root@nfs-server:~# /etc/init.d/nfs-kernel-server start
注意:开启的时候先开启rpc服务,再开启nfs服务。要不后边使用服务可能会报错。
报错信息:clnt_create: RPC: Program not registered
问题分析:rpcbind服务与NFS服务启动顺序不对,
解决办法:先停掉nfs和rpc服务,再依次开启rpc和nfs服务。
nfs-client上:/etc/init.d/rpcbind start|/etc/init.d/rpcbind status
running代表rpc服务已开启。
2.检查rpc服务是否开启:rpcinfo -p localhost
若服务开启不成功报错情况如下:
nfs-server上:
nfs-client上:
解决办法:重新开启服务。
3.把NFS服务设置为开机自启动。(ubuntu下用sysv-rc-conf设置,CentOS用chkconf设置,具体设置方法见老表博文:
4.在nfs-server上配置/etc/exports文件(配置nfs服务的文件),配置后重启服务并检查
a.配置服务(配置/etc/exports文件)
root@nfs-server:~# vim /etc/exports配置内容的格式:目录 网站、IP地址、主机名或网段(括号里边写给客户端的权限(权限之间用逗号分割))
#shared folder for whokk by wholj at 2016-10-16 share/ 192.168.1.106(rw,sync)注意:上边在配置的时候虽然给了客户端对共享目录具有写(w)的权限,但是服务器端的目录默认给其他的用户不具有写权限,所以客户机只可以对共享目录中的文件进行读操作。(客户机对共享目录中的文件拥有的权限是服务器目录权限和所给的共享权限的“权限与运算”结果)
服务器上共享目录的权限:
root@nfs-server:~# ll /share/ -ld drwxr-xr-x 2 root root 4096 Oct 16 21:50 /share//b.平滑重启NFS服务:/etc/init.d/nfs-kernel-server reload
root@nfs-server:~# /etc/init.d/nfs-kernel-server reload
[....] Reloading nfs-kernel-server configuration (via systemctl): nfs-ke[ ok server.service.注意:当修改/etc/exports文件后一定要做这一步!
c.本机(nfs-server)做检查:showmount -e localhost
root@nfs-server:~# showmount -e localhost
Export list for localhost: share/ 192.168.1.106d.客户端(nfs-client)做检查:showmount -e 192.168.1.103
[root@nfs-client ~]# showmount -e 192.168.1.103
Export list for 192.168.1.103: share/ 192.168.1.106此步检查可能出现的问题:连接不上
解决办法:第一步:ping 对方网址
第二步:如果ping的同则用telnent查看端口 报错信息: root@wholj-qtk5:~# telnet 192.168.1.104 111 Trying 192.168.1.104... telnet: Unable to connect to remote host: No route to host解决办法:关闭防火墙
正确情况:
root@wholj-qtk5:~# telnet 192.168.1.104 111 Trying 192.168.1.104... Connected to 192.168.1.104. Escape character is '^]'.e.1> 当执行c和d两步时正常能显示出上面设置的共享目录,如果报如下错误:
clnt_create: RPC: Program not registered解决办法:使用配置服务中的第1点中注意中的解决办法
2> 执行d的时候报错信息如下:
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
解决办法:先查看服务器的IP是否和所要showmount的ServerIP一致,不一致就修改成ServerIP后再执行d,一致的话就在服务器端执行下边的命令后再作d步中的检查。 root@nfs-server:~# iptables -F root@nfs-server:~# iptables -X5.挂载(在nfs-client上挂载):mount -t nfs 192.168.1.103:/share /mnt
192.168.1.103:/share 272G 55G 204G 22% /mnt #d此行代表压缩成功
测试:
1.未改共享目录和文件的权限时测试结果如下(原因见a): nfs-client上:
[root@nfs-clientk mnt]# ll total 4 -rw-r--r--. 1 root root 22 Oct 16 2016 test.txt‘’ [root@nfs-client mnt]# ls test.txt [root@nfs-client mnt]# cat test.txt #test NFS file server [root@nfs-client mnt]# echo "add ABC" >>test.txt -bash: test.txt: Permission denied
出现Permission denied的原因:见配置服务的第4点中的注意。
nfs-server上:
root@nfs-server:/share# ls test.txt root@nfs-server:/share# cat test.txt #test NFS file server root@nfs-server:/share# echo "add ABC" >>test.txt root@nfs-server:/share# cat test.txt #test NFS file server
add ABC
2.修改权限前和修改之后测试
a.在nfs-server中共享目录为默认权限(755)时在nfs-client上测试: [root@nfs-clien mnt]# touch file1 touch: cannot touch `file1': Permission denied b.在nfs-server中把共享目录的权限修改为777: root@nfs-server:~# chmod 777 /share/ root@nfs-server~# ls -ld /share/ drwxrwxrwx 2 root root 4096 Oct 16 22:28 /share/ 在nfs-clien上测试:
[root@nfs-clien mnt]# touch file1 [root@nfs-clien mnt]# ls file1 test.txt
c.在nfs-server上将共享目录中的test.txt文件权限修改777:chmod 777 test.txt
root@nfs-server:/share# ll test.txt
-rw-r--r-- 1 root root 46 Oct 17 15:02 test.txt root@nfs-server:/share# chmod 777 test.txt root@nfs-server:/share# ll test.txt -rwxrwxrwx 1 root root 46 Oct 17 15:02 test.txt* 在nfs-client上测试:总结:
不要怕出现问题,一旦出现问题就去解决它。
容易出错的点:
1.开启服务顺序一定要注意,先开rpc服务,再开nfs服务。
2.服务器上共享目录和文件给其他用户的权限和给客户机的权限的“与运算”结果的权限是客户机上对共享目录和文件所拥有的权限。
3.老表的nfs-client是虚拟机,使用的是桥接。所以每次重启后的IP地址要变,所以配置/etc/exports文件的时候IP地址也要相应的改变,要不然将会出现共享不成功的情况。其实此问题更好的解决方法是直接在/etc/exports文件中写入网段地址,而不是写IP地址。
经验:
1.每一步后记得检查。
2.ping和telnet检测网络和服务能不能到达很重要。