我们要在Linux中使用任何文件系统,都必须先将其挂接至Linux目录树的某个目录下,当该文件系统不再使用时,还需要将其卸载。在 Linux中,我们一般使用Mount与Umount命令来完成挂接和卸载功能。
本文将介绍另一种能完成文件系统挂接与卸载的工具——Autofs。
1、Autofs的特点
Autofs与Mount/Umount的不同之处在于,它是一种看守程序。如果它检测到用户正试图访问一个尚未挂接的文件系统,它就会自动检测该文件系统,如果存在,那么Autofs会自动将其挂接。另一方面,如果它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动将其卸载。因此一旦运行了Autofs后,用户就不再需要手动完成文件系统的挂接和卸载。
2、软件安装
安装Autofs的方法很简单,只需执行:rpm -ivh autofs-3.1.3-10.i386.rpm
安装完成后,每次启动 Linux,Autofs都会自动运行。
3、软件的配置
Autofs需要从/etc/auto.master文件中读取配置信息。该文件中可以同时指定多个挂接点,由Autofs来挂接文件系统。文件中的每个挂接点单独用一行来定义,每一行可包括3个部分,分别用于指定挂接点位置,挂接时需使用的配置文件及所挂接文件系统在空闲多长时间后自动被卸载。例如在文件中包括了如下一行:
/auto /etc/auto.misc --timeout 60
其中第一部分指定一个安装点为/auto,第二部分指定该挂接点的配置文件为/etc/auto.misc,第三部分指定所挂接的文件系统在空闲60秒后自动被卸载。
文件/etc /auto.misc的示例如下:
cd -fstype=iSO9660,ro :/dev/cdrom
fd -fstype=msdos :/dev/fd0
文件每一行都说明某一个文件系统如何被挂接。其中第一行指定将/dev /cdrom挂接在/auto/cd中,第二行指定将/dev/fd0挂接在/auto/fd中。每一行的第二个值-fstype是一个可选项,用来表明所挂接的文件系统的类型和挂接选项,在mount命令中能使用的挂接选项同样适用于-fstype。
修改了配置文件后,可通过执行命令 “/etc/init.d/autofs restart”,使新的配置生效。
例子:
picture.dfe.cn -rw,soft,intr,rsize=8192,wsize=8192 192.168.0.22:/var/www/virtualhost/picture.dfe.cn
www.dfe.cn -rw,soft,intr,rsize=8192,wsize=8192 192.168.14.3:/var/www/virtualhost/www.dfe.cn
4、使用Autofs
输入命令“ls /auto/cd”,Autofs会自动检测光驱中是否有光盘,如果有,它会自动将其挂接在/auto/cd中,这样ls就会列出其中的内容。如果我们在60秒内没有再次访问/auto/cd时,Autofs会自动将/dev /cdrom卸载掉。同样,现在也可以直接使用软盘,无需事先使用Mount进行挂接。
-----------------------------------------
简单点:
#vi /etc/auto.master
/var/www/html/nfs /etc/auto.51auto --timeout=60
#vi /etc/auto.51auto
www.dfs.cn -rw,soft,intr,rsize=8192,wsize=8192 192.168.0.214:/var/www/html/www.dfs.cn
-------------------------------------
nfs服务器上:
/etc/hosts.allow里要允许客户机访问。
如:portmap:192.168.0.33
客户机:
配置好文件/etc/auto.master /etc/auto.51auto 。
启动portmap 和nfs服务。
第一次可以手动mount加载测试。
------------------------------------
NFS服务器端重新启动,最好先关闭portmap nfs再重启.否则容易长时间待机.
-----------------------------------
NFS速度优化:
1.设置块大小
mount命令的risize和wsize指定了server端和client端的传输的块大小。
mount -t nfs -o rsize=8192,wsize=8192,timeo=14,intr client:/partition /partition
如果未指定,系统根据nfs version来设置缺省的risize和wsize大小。大多数情况是4K对于nfs v2,最大是8K,对于v3,通过server端kernel设置risize和wsize的限制
vi /usr/src/linux2.4.22/include/linux/nfsd/const.h
修改常量: NFSSVC_MAXBLKSIZE
所有的2.4的的client都支持最大 32K的传输块。系统缺省的块可能会太大或者太小,这主要取决于你的kernel和你的网卡,太大或者太小都有可能导致nfs速度很慢。
具体的可以使用 Bonnie,Bonnie++,iozone等benchmark来测试不同risize和wsize下nfs的速度。当然,也可以使用dd来测试。
#time dd if=/dev/zero of=/testfs/testfile bs=8k count=1024 测试nfs写
#time dd if=/testfs/testfile of=/dev/null bs=8k 测试nfs读
测试时文件的大小至少是系统RAM的两倍,每次测试都使用umount 和mount对/testfs进行挂载,通过比较不同的块大小,得到优化的块大小。
2.网络传输包的大小
网络在包传输过程,对包要进行分组,过大或者过小都不能很好的利用网络的带宽,所以对网络要进行测试和调优。可以使用ping -s 2048 -f hostname进行ping,尝试不同的package size,这样可以看到包的丢失情况。同时,可以使用nfsstat -o net 测试nfs使用udp传输时丢包的多少。因为统计不能清零,所以要先运行此命令记住该值,然后可以再次运行统计。如果,经过上面的统计丢包很多。那么可以看看网络传输包的大小。使用下面的命令:
#tracepath node1/端口号
#ifconfig eth0
比较网卡的mtu和刚刚的pmtu,使用#ifconfig eth0 mtu 16436设置网卡的mtu和测试的一致。当然如果risize和wsize比mtu的值大,那么的话,server端的包传到client端就要进行重组,这是要消耗client端的cpu资源。此外,包重组可能导致网络的不可信和丢包,任何的丢包都会是的rpc请求重新传输,rpc请求的重传有会导致超时,严重降低nfs的性能。
可以通过查看
/proc/sys/net/ipv4/ipfrag_high_thresh
/proc/sys/net/ipv4/ipfrag_low_thresh
了解系统可以处理的包的数目,如果网络包到达了ipfrag_high_thresh,那么系统就会开始丢包,直到包的数目到达ipfrag_low_thresh。
3.nfs挂载的优化
timeo: 如果超时,客户端等待的时间,以十分之一秒计算
retrans: 超时尝试的次数。
bg: 后台挂载,很有用
hard: 如果server端没有响应,那么客户端一直尝试挂载
wsize: 写块大小
rsize: 读块大小
intr: 可以中断不成功的挂载
noatime: 不更新文件的inode访问时间,可以提高速度
async: 异步读写
4.nfsd的个数
缺省的系统在启动时,有8个nfsd进程
#ps -efl|grep nfsd
通过查看/proc/net/rpc /nfsd文件的th行,第一个是nfsd的个数,后十个是线程是用的时间数,第二个到第四个值如果很大,那么就需要增加nfsd的个数。
具体如下:
#vi /etc/init.d/nfs
找到RPCNFSDCOUNT,修改该值,一般和client端数目一致。
#service nfs restart
#mount -a
5.nfsd的队列长度
对于8个nfsd进程,系统的nfsd队列长度是64k大小,如果是多于8个,就要相应的增加相应的队列大小,具体的在
/proc/sys/net/core/rwmem_default
/proc/sys/net/core/wwmem_default
/proc/sys/net/core/rmmem_max
/proc/sys/net/core/wmmem_max
队列的长度最好是每一个nfsd有8k的大小。这样,server端就可以对client的请求作排队处理。如果要永久更改此值
#vi /etc/sysctl.conf
net.core.rmmem_default=数目
net.core.wmmem_default= 数目
net.core.rmmem_max= 数目
net.core.wmmem_max= 数目
#service nfs restart