Troubleshooting:几台机器mount不上的解决方法
记录下服务器IP改变之后引发的2个不能mount的问题,让我抓狂半下午搜索了google几十页。
本来1台Xen虚机上有2台服务器A,B和1台备份服务器C,均和虚机在同一个网段,通过NFS,A和B的/mnt目录挂载到C上,定时将文件自动备份到C的/home下,一直工作正常。由于新搭建环境,今天将虚机迁移到另一个网段,同时更改了ABC的IP,让它们依然处于同一网段,比如192.168.1.xxx。此时需要改动NFS的一些设置。我改动了2处:
1. 将/etc/hosts.allow里允许通过的网段均改为192.168.1.*
###NFS DAEMONS portmap:192.168.1.* lockd:192.168.1.* rquotad:192.168.1.* mountd:192.168.1.* statd:192.168.1.*
改动了hosts.allow,就得重启portmap
/etc/init.d/portmap restart 或 service portmap restart
2. 将/etc/exports里的网段改为192.168.1.*,让此网段的目录共享
/home 192.168.1.*(rw,sync,no_root_squash)
表示将/home这个目录共享给192.168.1.*这些机器,括号中的参数设置意义为:
ro 该主机对该共享目录有只读权限
rw 该主机对该共享目录有读写权限
root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
anonuid 将客户机上的用户映射成指定的本地用户ID的用户
anongid 将客户机上的用户映射成属于指定的本地用户组ID
sync 资料同步写入到内存与硬盘中
async 资料会先暂存于内存中,而非直接写入硬盘
insecure 允许从这台机器过来的非授权访问
改动了exports,需要重启nfs
/etc/init.d/nfs-kernel-server restart
然后将A挂载到备份服务器C:
mount server-C-IP:/home /mnt
总是挂载不上,错误如下:
mount.nfs: access denied by server while mounting xxx
试着挂载自身也是同样的错误(mount 127.0.0.1/home /mnt)
我尝试了网上几种解决办法:
方法1:重启A,B,C
方法2:关闭防火墙:ufw status看到防火墙已经关闭(用service iptables stop关闭)
方法3:更改备份服务器C上的home目录权限:chmod 777 /home
方法4:确认nfs相关的服务是否全部开启
方法5:cat /var/log/messages | grep mount查看mount是什么错误。我是error:remount xxx。没找到解决方法。
方法6:查看激活的端口号(netstat -utln,其中portmapper为111,nfs所开启的端口是2049,其它的端口是RPC Server其它程序(例如rpc.mountd、rpc.rquotad、rpc.nfsd... )随机产生的),因为NFS对1024以上的大端口有安全限制,如果是1024以上端口,需要将insecure加入到/etc/exports里:192.168.1.* (insecure,rw,sync,no_root_squash)
终于不知在哪个犄角旮旯里找到一条正确的解决方案:将/etc/exports里的网段改为*而不是192.168.1.*
/home *(rw,sync,no_root_squash)
挂载成功,涕泪泗流~~,这个方法,哪位神人想到的?
B挂载到C出现的问题:
mount.nfs: No route to host
先ping自身:ping 127.0.0.1可以通
再pingA或C却ping不通。
检查路由:route
发现两个接口eth0和eth1的目标、网关、子网掩码都一样,应该是路由在此见到设备有相同的路由,迷茫了。
解决方法:干掉eth1
route del -net 192.168.1.0 netmask 255.255.255.0 dev eth1
能ping通,能mount!于是我的几台机器又可以友好的相互访问了。
注意:有几次发现eth0和eth1的目标是一样的,输入route del -net 192.168.1.xxx netmask 255.255.255.0 dev eth1想干掉eth1,但出现错误: netmask doesn't match route address,是因为-net后面是网段,而不是具体的网址,所以将192.168.1.xxx改为192.168.1.0即可删除