系统环境:
OS版本: CentOS release 6.4 内核:2.6.32-358.el6.x86_64
虚拟机: 2台 S1(客户端) S2(服务端)
1、安装软件包
服务端需要的软件包:nfs-utils, rpcbind
客户端需要的软件包:rpcbind
采用本地yum源进行安装:
S1:客户端
yum -y install rpcbind
[root@S1 ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-11.el6.x86_64
S2:服务端
yum -y install rpcbind
yum -y install nfs-utils
[root@S2 ~]# rpm -qa | grep -E "rpcbind|nfs-utils"
nfs-utils-lib-1.1.5-6.el6.x86_64
rpcbind-0.2.0-11.el6.x86_64
nfs-utils-1.2.3-36.el6.x86_64
2、启动服务并设置为开机自启动
注意:服务端必须先启动rpcbind进程,在启动nfs进程。因为nfs启动时,会向rpc进程进行注册。
启动rpcbind
[root@S2 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@S2 ~]# /etc/init.d/rpcbind status
rpcbind (pid 1110) is running...
[root@S2 ~]# rpcinfo -p S2
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
启动nfs(客户端不需启动)
[root@S2 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
[root@S2 ~]# /etc/init.d/nfs status
rpc.svcgssd is stopped
rpc.mountd (pid 1304) is running...
nfsd (pid 1331 1330 1329 1328 1327 1326 1325 1324) is running...
[root@S2 ~]# rpcinfo -p S2
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 54783 mountd
100005 1 tcp 57438 mountd
100005 2 udp 38136 mountd
100005 2 tcp 54148 mountd
100005 3 udp 54618 mountd
100005 3 tcp 45259 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 36835 nlockmgr
100021 3 udp 36835 nlockmgr
100021 4 udp 36835 nlockmgr
100021 1 tcp 52016 nlockmgr
100021 3 tcp 52016 nlockmgr
100021 4 tcp 52016 nlockmgr
设置开机自启动:
chkconfig --level 3 nfs on
chkconfig --level 3 rpcbind on
[root@S2 ~]# chkconfig --list | grep -E "nfs|rpcbind"
nfs 0:off 1:off 2:off 3:on 4:off 5:off 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
3、配置共享目录
[root@S2 ~]# mkdir /data
[root@S2 ~]# cat >> /etc/exports << EOF
> /data 192.168.1.0/24(rw,sync)
> EOF
192.168.1.0/24表示网段, rw表示进行读写(ro只能读),sync同步(写到服务端磁盘才算成功)async(写到缓存中及成功)
4、重新加载nfs服务
[root@S2 ~]# /etc/init.d/nfs reload
[root@S2 ~]# showmount -e S2
Export list for S2:
/data 192.168.1.0/24
showmount 命令 show mount information for an NFS server
-e or –exports
Show the NFS server’s export list.
showmount 命令在nfs-utils包中,如果客户端需要查看服务端可mount的信息,需要安装nfs-utils包。
[root@S1 ~]# showmount -e S2
Export list for S2:
/data 192.168.1.0/24
如果在客户端用showmount命令,查看不到服务端共享目录信息可以进行如下检查:
a> 能否ping通 ping S2
b> 能否telnet telnet S2 111
5、在客户端挂载服务端目录
[root@S1 ~]# mount S2:/data /mnt/data
[root@S1 ~]# mount
S2:/data on /mnt/data type nfs (rw,vers=4,addr=192.168.1.121,clientaddr=192.168.1.120)
6、测试
[root@S1 ~]# cd /mnt/data
[root@S1 data]# pwd
/mnt/data
[root@S1 data]# touch a.txt
touch: cannot touch `a.txt': Permission denied
客户端在共享目录创建文件,报权限不足,我们在配置共享目录时,不是设置了rw权限吗?why?
这是因为服务端本地目录的权限限制了,查看服务端/data目录的权限
[root@S2 ~]# ls -ld /data
drwxr-xr-x 2 root root 4096 Mar 25 16:22 /data
只有root用户有权限对/data目录有写权限。
怎么解决呢?
有2中方式可以解决:
a) 更改服务端/data目录的权限 (如给777)
[root@S2 ~]# chmod -R 777 /data
[root@S1 data]# pwd
/mnt/data
[root@S1 data]# ls
[root@S1 data]# touch a.txt
[root@S1 data]# ls
a.txt
[root@S1 data]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 25 16:47 a.txt
可以看出客户端访问服务的用户为nfsnobody。
b) 更改服务端/data目录的属主
chown -R nfsnobody:nfsnoboy /data