一、环境介绍
####################################
两台机器全是Centos 5.4 x86_64
服务端IP=121.33.253.84
客户端IP=121.33.253.83
####################################

二、配置服务端
####################################
#因为默认已经安装rpcbind ,nfs,也可以先查看服务器是否已安装nfs
# rpm -qa|grep nfs
查看状态和版本
# nfsstat 或 nfsstat -m
如果没有安装,则:
# yum install nfs-utils
(如果是centos6.0以下的版本用portmap代替rpcbind )

三、开启自动启动

  1. chkconfig --level 345  rpcbind on   或者 chkconfig --level 345  portmap on (centos5.X)
  2. chkconfig --level 345 nfs on


#创建要共享的目录

  1. mkdir -p /localdisk2/nfsdata
#nfs的主配置文件是/etc/exports

  1. vi /etc/exports
  2. #---引用文字-开始---------
  3. #加入
  4. /localdisk2/nfsdata  121.33.253.83(rw,root_squash,no_all_squash,sync)
  5. #---------引用文字-结束----------------------------
# exportfs -au 卸载所有共享目录
# exportfs -rv 重新共享所有目录并输出详细信息

四、启动、测试
####################################
#先启动所依赖的 rpcbind 

  1. service rpcbind start
  2. service nfs start
本地测试

  1. [root@localhost etc]# showmount -e 121.33.253.84
  2. Export list for 121.33.253.84:
  3. /localdisk2/nfsdata 121.33.253.83
#创建挂载点

  1. mkdir -p /mnt/nfsdata
#挂载

  1. mount -t nfs 192.168.17.30:/localdisk2/nfsdata /mnt/nfsdata
若提示:

  1. mount: mount to NFS server '121.33.253.84' failed: System Error: No route to host.
防火墙端口未开放原因,解决办法:
  1. 修改/etc/sysconfig/nfs文件,将下列内容的注释去掉:
  2. RQUOTAD_PORT=875
  3. LOCKD_TCPPORT=32803
  4. LOCKD_UDPPORT=32769
  5. MOUNTD_PORT=892
编辑iptables,在-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited前面增加下列行:
for centos 5.X
  1. -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 892 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 892 -j ACCEPT
    -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT
    -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 2049 -j ACCEPT
    -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 875 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 875 -j ACCEPT
    -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 32803 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 32769 -j ACCEPT
for centos 6.X

  1. -A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
  2. -A INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
  3. -A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
  4. -A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
  5. -A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
  6. -A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
  7. -A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
  8. -A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
  9. -A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
  10. -A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT


然后重启:

  1. service rpcbind restart
  2. service nfs restart

在其它节点上设置自动挂载:
vi /etc/fstab 

  1. node01:/usr/local /usr/local nfs defaults 1 0
  2. node01:/home /home nfs defaults 1 0




#检查


01mount
02#----------------------------输出文字-开始----------------------------
03/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
04proc on /proc type proc (rw)
05sysfs on /sys type sysfs (rw)
06devpts on /dev/pts type devpts (rw,gid=5,mode=620)
07/dev/hda1 on /boot type ext3 (rw)
08tmpfs on /dev/shm type tmpfs (rw)
09none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
10sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
11nfsd on /proc/fs/nfsd type nfsd (rw)
1210.0.0.52:/nfsdata on /root/nfsdata type nfs (rw,addr=10.0.0.52)
13#----------------------------输出文字-结束----------------------------


NFS设置选项参考:

NFS的设置选项:


 访问权限选项

 说明

 ro

 设置输出共享目录为只读

 rw

设置输出共享目录为可读写 

 用户映射选项

说明 

 all_squash

 将远程访问的所有普通用户及所属用户都映射为匿名用户或用户组(一般均为nfsnobody)
 no_all_squash  不将远程访问的所有普通用户及所属用户都映射为匿名用户或用户组(默认设置)

 root_squash

 将root用户及所属用户组都映射为匿名用户或用户组(默认设置)

 no_root_squash

 不将root用户及所属用户组都映射为匿名用户或用户组

 anonuid=xxx

 将远程访问的所有用户都映射为匿名用户,并指定该匿名用户账户为本地用户账户(UID=xxx)

 anongid=xxx

 将远程访问的所有用户组都映射为匿名用户组账户,

并指定该匿名用户组账户为本地用户组账户(GID=xxx)

 其它选项

说明 

 secure

 限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)

 insecure

 允许客户端从大于1024的TCP/IP端口接连NFS服务器

 sync

 将数据同步写入内存缓冲区与磁盘中,虽然这样做效率较低,但可以保证数据的一致性

 async

 将数据先保存在内存缓冲区,必要时才写入磁盘

 wdelay

 检查是否有相关的写操作,如果有,则将这些写操作一起执行,这样可以提高效率(默认设置)



 no_wdelay 若有写操作则立即执行,应与sync配合使用

 subtree_check

 若输出共享目录是一个子目录,则NFS服务器将检查其父目录的权限(默认设置)

 no_subtree_check

 即使输出目录是一个子目录,NFS服务器也不检查其父目录的权限,这样做可提高效率




no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用! 
    root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。

我刚开始配置的时候 在权限的地方,只写了(rw),就发生了客户端对共享目录操作没有权限,在经过n次尝试后,把权限改为(rw,no_root_squash )就行了,问题是解决了
步骤:
1,在要分享数据的主机上修改
vi /etc/exports
*(rw,no_root_squash,no_all_squash,sync)
2.不用重启nfs,刷新即可
exportfs -rv
3. 在其它主机重新mount

4.nfs只能挂载为nobody的解决方法

  1. mount -t nfs -o vers=3 master:/home /home
/etc/fstab 中设置如下:
  1. 10.0.0.4:/home /home nfs vers=3      1     0

5. 解决NFS:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
service iptables stop


11-21 13:37