linux挂载远程NFS目录

示例系统环境为: Linux ubuntu 14.04


1、在共享源服务器 先安装nfs服务器客户端:
$sudo apt-get install nfs-kernel-server       
安装此项时apt会自动帮助安装nfs-common


2、添加一行    
/home/wwwroot
用户可以把需要共享的文件系统直接编辑到/etc/exports文件中,
这样当NFS服务器重新启动时系统就会自动读取/etc/exports文件,从而告诉内核要输出的文件系统和相关的存取权限


示例比如:/home/wwwroot 172.16.2.*(rw,no_root_squash)


3、重启nfs
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart


4、挂载服务器挂载目录
新建一个挂载所在的目录并挂载源服务器的目录


示例比如:
mkdir /home/mount_wwwroot
mount -o nolock,rsize=1024,wsize=1024 源服务器IP:/home/wwwroot /home/mount_wwwroot
nolock用于需要跟旧版本的nfs server连接
rsize与wsize若不设置无法通过nfs传递较大的数据。


注意事项:
1、查看对象所有共享挂载信息
使用showmount查看服务器上已被共享的目录:
showmount -e 源服务器IP


2、共享目录读写权限问题
共享目录权限 由源服务器的 /etc/exports
rw 可读写的权限 
ro 只读的权限 
no_root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权 
               限,这个参数『极不安全』,不建议使用
root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)
             的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份


all_squash 不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
anonuid 可以自行设定这个UID的值,这个UID必需要存在于你的/etc/passwd当中
anongid 同anonuid,但是变成groupID就是了 
sync 资料同步写入到内存与硬盘当中 
async 资料会先暂存于内存当中,而非直接写入硬盘 
insecure 允许从这台机器过来的非授权访问


/etc/exports 示例
1./tmp *(rw,no_root_squash) //*号表示所有的IP都可以访问
2./tmp *(rw)
   /home/public 192.168.0.*(rw) *(ro) //下面两行作用一样
   /home/public 192.168.0.0/24(rw) *(ro)


3./home/test 192.168.0.100(rw) //只对某部机器设置权限


4./home/linux *.dzmvc.com(rw,all_squash,anonuid=40,anongid=40)当*.dzmvc.com 登陆此NFS主机,并且在/home/wwwroot下面写入文件时,该文件的所有人与所有组,就会变 
 成/etc/passwd里面对应的UID为40的那个身份的使用者了。


注意:修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可
exportfs[-aruv] 
参数 含义 
a 全部挂载(或卸载)/etc/exports档案内的设定 
r 重新挂载/etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容 
u 卸载某一目录 
v 在export的时候,将分享的目录显示到荧屏上 
#exportfs -rv//重新export一次 
#exportfs -au//全部卸载 
举例
node1:~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.6G  2.4G  7.2G  25% /
tmpfs                 126M  8.0K  126M   1% /dev/shm
192.168.0.1:/home/test
                      9.6G  2.4G  7.2G  26% /home/nfs
node2:~ # exportfs -av
exporting *:/home/test
node1:~ # umount /home/nfs/
node1:~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.6G  2.4G  7.2G  25% /
tmpfs                 126M  8.0K  126M   1% /dev/shm


showmount命令 
语法:showmount [-aed] [hostname] 
-a:显示目前以及连上主机的client机器的使用目录的状态 
-e:显示hostname的/etc/exports里面共享的目录 
-d:只显示被client机器挂载的目录


NFS故障解决 
1、can't contactportmapper: RPC:Remotesystem error-Connection refused: 
   出现这个错误信息是由于SEVER端的PORTMAP没有启动。


2、mountclntudp_create: RPC: Programnotregistered:NFS没有启动起来,可以 
   用showmout-ehost命令来检查NFSSERVER是否正常启动起来。


3、mount: localhost:/home/test failed, reason given by server: Permission denied:
   这个提示是当client要mountnfsserver时可能出现的提示,意思是说本机没有权限去mount nfsserver上的目录。解决方法当然是去修改NFSSERVER咯。


4、被防火墙搞掉 
   这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先 
   要检测是否打开了这个端口,另外也要检查TCP_Wrappers的设定。


   重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所以端口111必须提供出去.因此在iptablesrules中,要增加: 
   iptables-AINPUT-pTCP --dport111-jACCEPT 
   iptables-AINPUT-pUDP --dport111-jACCEPT 
   如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是: 
   ALL:ALL: deny 
   那就必须在/etc/hosts.allow中增加: 
   portmap:ALL:allow


注意:由于NFS使用的这个RPC在client端连上主机时,那么你的主机想要关机,那可就会成为『不可能的任务』。即如果你的Server上面还有Client在联机,那么你要关机,可能 
      得要等到数个钟头才能够正常的关机成功!所以,建议在NFSServer要关机之前,要先『关掉portmap与nfs』这两个东西。如果无法正确的将这两个daemons关掉,那么先以    
      netstat -utlp找出PID,然后kill掉。


NFS客户端设置
为了担心会不小心将NFS端挂进来的具有SUID权限档案的程序执行,root可以将NFS所分享的目录以较为安全的情况挂载进来,可以 
#mount-t nfs -o nosuid,ro hostname:/directory/mountponit


mountnfs的其它可选参数:
HARD:在后台,NFSCLIENT会不断的尝试与SERVER的连接,直到mount上
SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。 
例如:mount-F nfs -o 192.168.0.1:/nfs /nfs


timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输
intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000minutes 
同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp/nfs


注意:NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝 
试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。