环境介绍:
服务器:centos 172.16.250.170
客户端:centos 172.16.250.172
先用rpm -qa命令查看所需安装包(nfs-utils、rpcbind)是否已经安装:
[root@localhost/]# rpm -qa | grep "rpcbind" rpcbind-0.2.0-11.el6.x86_64
[root@ localhost /]# rpm -qa | grep "nfs"
nfs-utils-1.2.3-39.el6.x86_64 nfs4-acl-tools-0.3.3-6.el6.x86_64 nfs-utils-lib-1.1.5-6.el6.x86_64
如果没有以上的信息执行下面的语句(注意客户机和服务机都需要执行):
[root@ localhost /]# yum -y install nfs-utils rpcbind
服务器端配置:
1. 在服务器上创建NFS共享目录:mkdir /usr/local/test
2. 设置共享目录的读写权限: chmod 666 /usr/local/test
3. 编辑export文件: vi /etc/exports
在文本exports 里面输入下面内容
/usr/local/test/172.16.250.172(insecure,rw,no_root_squash,no_all_squash,sync)
注意地址和参数表之间没有空格。如果下面设置的mountd端口大于1024,需要在参数表里加入参数:insecure
配置生效:
[root@local /]# exportfs -r
注:配置文件说明:
/usr/local/test/ 为共享的目录,使用绝对路径。
172.16.250.172(rw,no_root_squash,no_all_squash,sync) 为客户端的地址及权限,地址可以是一个网段(如:172.16.250.0/24),一个IP地址或者是一个域名,域名支持通配符,如:*.hpce.cn,地址与权限中间没有空格。
权限说明:
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值。
5. 启动服务rpcbind、nfs服务:
[root@ localhost /]#service rpcbind start
[root@ localhost /]#service nfs start
服务器端防火墙设置(NFS 开启防墙配置):
修改/etc/services文件:
配置rpc,nfsd,rquotad,mountd使用的端口。配置之前先检查一下是否已经配置过了,已经配过的就不用配置了。没有配置的,要分配一个在此文件中未被使用的端口号。我的机器默认配置了:rpc、nfsd、rquotad
mountd: 没有配置。手工加上:
mountd 48620/tcp #rpc.mountd
mountd 48620/udp #rpc.mountd
如果mountd占用端口大于 1024,在文件 /etc/exports里需要加入参数insecure。如:172.16.250.172(insecure,rw,async,root_squash,no_all_squash)
重启NFS服务:
service nfs restart
在防火墙配置文件里开放上面配置的端口:
打开文件:vim /etc/sysconfig/iptables
加入粗体字部分的内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#rpc
-A INPUT -m state --state NEW -m tcp -p tcp --dport 121 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 121 -j ACCEPT
#nfsd
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
#rquotad
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
#mountd
-A INPUT -m state --state NEW -m tcp -p tcp --dport 48620 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 48620 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
客户端挂载:
创建挂载目录: mkdir /usr/local/test
查看服务器抛出的共享目录信息:
[root@localhost/]#showmount -e 172.16.250.170
出现以下信息说明配置正确
Export list for 172.16.250.170:
/usr/local/test 172.16.250.172
如果显示:rpc mount export: RPC: Unable to receive; errno = No route to host,则需要在服务端关闭防火墙。
为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议:
mount -t nfs 172.16.250.170:/usr/local/test /usr/local/test -o proto=tcp -o nolock
检查挂载是否成功:
[root@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
172.16.250.170:/usr/local/test on /usr/local/test type nfs (rw,proto=tcp,nolock,vers=4,addr=172.16.250.170,clientaddr=172.16.250.172)
出现上面信息说明挂载成功后即可访问共享的NFS文件系统了。
4、测试:
客户端生成一个文件:
[root@localhost ~]# cd /usr/local/test/
[root@ localhost test]# echo "hello nfs test">>test
[root@ localhost test]# ll
total 4
-rw-r--r-- 1 root root 15 Apr 9 13:24 test
[root@ localhost test]#
服务端检查:
[root@centos2 /]# cd /usr/local/test/
[root@centos2 test]# ll
total 4
-rw-r--r-- 1 root root 15 Apr 9 13:24 test
[root@centos2 test]#