NFS mount失败及优化

来源:互联网 发布:索尼和夏普电视 知乎 编辑:程序博客网 时间:2024/04/29 07:31

http://blog.sina.com.cn/s/blog_451b643001014otn.html

  1. nfs mount出错整理:
    mount -t nfs -o nolock 192.168.1.99:/pub/share /mnt
    出现 RPC: Timed out 原因整理:
    A. 防火墙,SELinux
    B. iptables规则(或者直接关掉防火墙)
    C. /etc/export 是否正确(读写权限,网段)
    D. server和client的/etc/resolv.conf,这一点往往被忽略。当服务器和客户端都在内网,dns服务器不可用但是又设置了dns时,因为系统搜索dns server而使nfs mount失败,这时候应该将dnsserver用“;”注释掉
  2. nfs: server 192.168.1.99 not responding
    造成NFS没有回应的原因有3个,分别为网络拥塞、服务器过载和网卡丢包。一台设备使用一个nfs服务器一般不会出现服务器过载情况,一般是网络拥塞或网卡丢包。nfs over tcp比较稳定,nfs over udp速度较快。通过proto=tcp可以选择tcp或udp传输。如果ifconfig发现网卡丢包的话,还是首先解决网络问题是上策。
  3. NFS:server not responing ,still trying
    原因是服务器和设备网卡传输速率冲突,使得设备需要大量时间复制大量数据包,其实如果设备的网卡速率够大,则不用分那么多包,也不会冲突。比如用设备挂载服务器出现无响应,但是用另外一台电脑挂载就很顺畅时,就很有可能是这个问题。这时需要调整rsize=1024,wsize=1024参数。
    mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.99:/pub/share /mnt

nfs 优化和安全  http://blog.chinaunix.net/uid-83572-id-3330.html

在客户端上执行 nfsstat -n 命令,以显示 NFS 版本。例如,输出

[root@nas bin]# nfsstat -n    #显示nfsd的版本
Server nfs v3:
null       getattr    setattr    lookup     access     readlink   
0       0% 25967451 19% 627992  0% 13020231  9% 16022769 11% 190     0% 
read       write      create     mkdir      symlink    mknod      
50877114 37% 13603627 10% 4218978  3% 19815   0% 0       0% 0       0% 
remove     rmdir      rename     link       readdir    readdirplus
3376059  2% 24921   0% 209243  0% 3229    0% 0       0% 275524  0% 
fsstat     fsinfo     pathconf   commit     
182     0% 0       0% 0       0% 5757974  4% 

表示nfs v3。在服务器上使用 rpcinfo -p | grep -iE "service|NFS" 命令,显示服务器上可使用的 NFS

版本。例如,输出

program vers proto port service
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
150001 1 udp 719 pcnfsd
150001 2 udp 719 pcnfsd
150001 1 tcp 720 pcnfsd
150001 2 tcp 720 pcnfsd

表示服务器可提供 NFS PV2 和 NFS PV3。

 


nfs server出现not responding, still trying讯息       
状况:
在RedHat Enterprise Linux AS3.0的版本中,常会发生
Jan 31 15:01:46  nfs: server linux15 not responding, still trying
Jan 31 15:01:46  nfs: server linux15 OK
nfs server没有响应,然后又OK,这是发生在同一秒的事,而且会连续发生

推测
1. 网络环境有问题
2. 负载过大

如网络环境有问题,需对网络软硬件做检测

如为负载过大问题,可尝试增加服务的instance
步骤
1. 编辑NFS启动档: vi /etc/rc.d/S60nfs(较次) 或 /etc/sysconfig/nfs(优先),找出RPCNFSDCOUNT变数

 

nfs: server xxx.xxx.xxx.xxx not responding, still trying的现象是mount正常,但PING的时候丢包率比较

大,拷贝或运行一些数据量大于1K的程序将马上出现这个提示,然后几乎无响应;
这个问题的解决办法如下:
1、使用加参数的办法:mount -o nolock,rsize=1024,wsize=1024,timeo=15 192.168.2.130:/tmp/ /tmp/
2、不通过HUB,直接使用交叉线连接开发板和宿主机

 

mount -t nfs -o nolock,nosuid,proto=tcp,rsize=1024,wsize=1024,intr,rw,bg,soft  10.0.0.6:/soft /nfs

 

-t nfs : 指的是 mount文件系统的类型 这里是 nfs 文件系统


-o   : 指的是 需要给mount的文件系统指定特定选项
 
    nolock :

    nosuid : 指定不允许通过该安装执行 setuid 和 setgid 程序
 
    proto  : 指定传输协议

    rsize : 设置读缓冲区为 n 个字节。缺省值是 8192

    wsize : 设置写缓冲区大小为 n 个字节。缺省值是 8192

    intr : 在硬安装时允许键盘中断。
 
    rw : 指定安装的文件是可读/写的。rw 是缺省值。

    bg : 如果第一次尝试是失败的,试图在后台安装。缺省值是 fg (如果第一次尝试是失败的,试图在前台中安装)

    soft : 如果服务器不响应,返回错误


在服务器端,一定要确保有足够的 NFS 内核线程来处理所有客户机。在默认情况下,只启动一个线程,但是 Red Hat 和 Fedora 系统会启动 8 个线程。对于繁忙的 NFS 服务器,应该提高这个数字,比如 32 或 64。可以用 nfsstat -rc 命令评估客户机,了解是否有阻塞的现象,这个命令显示客户机远程过程调用(RPC)统计数据。清单 5 显示一个 Web 服务器的客户机统计数据。


清单 5. 显示 NFS 客户机的 RPC 统计数据
                
# nfsstat -rc
Client rpc stats:
calls      retrans    authrefrsh
1465903813   0          0      
 


第二列 retrans 是零,这表示从上一次重新引导以来没有出现需要重新传输的情况。如果这个数字比较大,就应该考虑增加 NFS 内核线程。设置方法是将所需的线程数量传递给 rpc.nfsd,比如 rpc.nfsd 128 会启动 128 个线程。任何时候都可以进行这种设置。线程会根据需要启动或销毁。同样,这个设置应该放在启动脚本中,尤其是在系统上启用 NFS 的脚本。

 
 


加强NFS安全的方法:
1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。
2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 10.0.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 10.0.0.0/24 --dport 111 -j ACCEPT

3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。

linux中的NFSD的COPY数目是在/etc/rc.d/init.d/nfs这个启动文件中设置的, RPCNFSDCOUNT=8  默认是8个NFSD,对于这个参数的设置一般是要根据可能的CLIENT数目来进行设定的,和WSIZE、RSIZE一样也是要通过测试来找到最近的数值。

4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/etc/hosts.allow
portmap: 10.0.0.0/255.255.255.0 : allow

/etc/hosts.deny
portmap: ALL : deny

 

0 0
原创粉丝点击