解决nfs不能自动mount补遗[技术]

今天网络部调整我服务器的位置,所以把我的服务器停机了,结果服务器恢复的时候,蚊子发现nfs并没有自动的mount上。记得蚊子在《自动挂载NFS目录的两个办法》中已经写了自动挂载的办法了,于是又把这篇文章翻了出来看了一下。

首先蚊子发现手动挂载nfs是正常的,说明portmap服务是好的,使用/etc/init.d/netfs status查看状态,也能看到需要挂载的路径,而且执行/etc/init.d/netfs start看到nfs路径是可以被挂载的。由此说明netfs服务也是正常的。

紧接着蚊子查看了一下/etc/rc.d/rc3.d下面的启动脚本,如下

S10network   
S12syslog    
S13irqbalance
S13iscsi     
S13portmap   
S22messagebus
S25netfs     
S28autofs    

由此看到,netfs服务是在portmap的后面启动,同样也是在network的后面启动的,所以应该不会是服务启动顺序的问题。

紧接着又想到了另外一个问题:并不是所有服务器都不能挂载nfs,有些机器是可以的。有一点蚊子这里需要说一下,蚊子公司的nfs服务器的ip地址和我服务器的ip不在一个网段,服务器是10网段,nfs是192网段的。所以蚊子必须在启动服务器的时候添加路由。

在此,蚊子使用了两种方式自动添加路由

1,使用rc.local文件
2,使用static-routes文件

问题就是使用第一种方式的时候不能自动挂载,但使用第二种方式的时候就可以自动挂载。后来蚊子把使用第一种方式的都改成第二种方式,问题迎刃而解,服务器重启后可以自动挂载nfs了。

总结:

按照linux启动的顺序,rc.local里面的内容是在linux所有服务都启动完毕,最后才被执行的,也就是说,这里面的内容是在netfs之后才被执行的,那也就是说在netfs启动的时候,服务器上的静态路由是没有被添加的,所以netfs挂载不能成功。

static-routes文件又是什么呢,这个是network脚本执行时调用的一个文件,这个文件的放置在/etc/sysconfig目录下,在network脚本中的位置是:

151         # Add non interface-specific static-routes.
152         if [ -f /etc/sysconfig/static-routes ]; then
153            grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
154               /sbin/route add -$args
155            done
156         fi

从这段脚本可以看到,这个就是添加静态路由的方法,static-routes的写法是

any net 192.168.0.0/16 gw 网关ip

这样的话,在启动network脚本的时候路由就自动添加上了,又因为network是在netfs前面启动的,自然在挂载nfs的时候就正常了。

这样看来,如果需要添加静态路由,使用static-routes文件要比使用rc.local好,而且当改变了网络配置,需要重启network脚本的时候,相应的静态路由是可以自动添加上的,但这时如果使用rc.local的话,在重启network服务的时候,原本添加好的静态路由就消失了。

自动挂载NFS目录的两个办法[技术]

如果使用手工mount的方法访问一个NFS共享, 重新启动系统后这个文件系统必须mount才可以使用, Red Hat Enterprise Linux提供了两种方法来自动的挂载远程文件系统。/etc/fstab和autofs服务.
方法一,/etc/fstab

netfs服务会使用文件/etc/fstab作为参考, 所以像NFS共享的会被自动执行。

如下是一个/etc/fstab中的挂载NFS的一条记录。

使用你的NFS服务器替换如上的 <server> ,

使用NFS输出路径替换如上的 </remote/export> .

使用本地的挂载点目录替换 </local/directory;> 这个目录必须实现手动建立。

如上例子中的选项 nfs 说明了系统使用的文件系统类型。

可以使用nfs的选项替换 <options> ,多个选项之间使用“,”分开,如果需要更多的信息查看man fstab.

如下面的例子:

方法二, autofs 服务:

使用/etc/fstab的一个缺点是:不管用户访问NFS的次数和时间,系统总是会使用资源来维护这个NFS挂载。虽然对于一两个NFS挂载的时候这不是问题,但是如果系统在维护很多NFS挂载的时候,系统性能会受到影响,一个替代方法就是使用基于kernel的自动挂载工具:他可以在需要的时候自动的挂载NFS。

autofs 服务会根据/etc/auto.master文件来控制自动挂载命令:automount的命令可以更加方便的指定挂载点,主机名, 输出目录等等。

autofs的配置文件以父-子关系来组织,主配置文件(/etc/auto.master) 列出了所有的挂载点,然后他会连接到一个特定的映射类型, 这个类型可以是配置文件,程序, NIS映射或者其他挂载方式,auto.master文件包含了如下内容。

<mount-point>用于指定本地挂载点,<map-type>指定如何挂载,最通常的NFS挂载做法是使用一个文件,这个文件通常命名成auto.<mount-point>, <mount-point>是在auto.master指定的挂载点,一个NFS类型的auto.<mount-point>的内容如下:

使用本地挂载点替换 </local/directory;> ,该目录必须手动创建。

可以使用nfs的选项替换 <options> ,多个选项之间使用“,”分开,如果需要更多的信息查看man fstab. 确定在options列表前使用了符号”-“。

使用你的NFS服务器替换如上的 <server> ,

使用NFS服务器的输出路径替换如上的 </remote/export> .

可以使用nfs的选项替换 <options>

autofs配置文件可以用于很多中挂载方式和不同的文件系统上,特使是在NFS的挂载上特别有用,举例来说,有些单位把所有的/home目录集中于一台NFS服务器上, 然后在每个节点上配置auto.master指向auto.home,使得每个节点都可以通过autofs挂载/home目录。所有的用户都可以在任何一台工作站上访问自己/home/下的的数据和配置文件,该案中的auto.master看起来会像如下所示。

这个文件设置了/home/挂载点被配置到了/etc/auto.home文件上,auto.home看起来应该如下:

这个文件显示了如果用户所要访问/home下的一个目录,它应该产生一个到nfs.example.com的NFS mount, mount的选项说明了每个/home下的目录都会使用各自的设定. 如果需要更多的mount选项信息, 可以参考Red Hat Enterprise Linux 3 Reference Guide的 Section 9.4.3 Common NFS Mount Options

有关autofs的更多信息,请参考man手册和安装向导。

注:很多人都会遇到使用了fstab文件后,写好的NFS配置,在重启后却没有自动挂载的情况,首先要检查的是portmap服务是否设置了自动启动,还有另外一个关键的服务就是netfs

本文转自:http://www.redhat.com.cn/kbase/0611/911.php