搭建NFS文件服务器

来源:互联网 发布:北京九次方大数据公司 编辑:程序博客网 时间:2024/04/30 04:19

系统环境:
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 rpcbindrpcbind-0.2.0-11.el6.x86_64

S2:服务端

yum -y install rpcbindyum -y install nfs-utils[root@S2 ~]# rpm -qa | grep -E "rpcbind|nfs-utils"nfs-utils-lib-1.1.5-6.el6.x86_64rpcbind-0.2.0-11.el6.x86_64nfs-utils-1.2.3-36.el6.x86_64

2、启动服务并设置为开机自启动
注意:服务端必须先启动rpcbind进程,在启动nfs进程。因为nfs启动时,会向rpc进程进行注册。

启动rpcbind

[root@S2 ~]# /etc/init.d/rpcbind startStarting rpcbind:                                          [  OK  ][root@S2 ~]# /etc/init.d/rpcbind statusrpcbind (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 startStarting NFS services:                                     [  OK  ]Starting NFS mountd:                                       [  OK  ]Starting NFS daemon:                                       [  OK  ][root@S2 ~]# /etc/init.d/nfs statusrpc.svcgssd is stoppedrpc.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 onchkconfig --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:offnfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:offrpcbind         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 S2Export 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.txttouch: cannot touch `a.txt': Permission denied

客户端在共享目录创建文件,报权限不足,我们在配置共享目录时,不是设置了rw权限吗?why?

这是因为服务端本地目录的权限限制了,查看服务端/data目录的权限

[root@S2 ~]# ls -ld /datadrwxr-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]# lsa.txt[root@S1 data]# lltotal 0-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 25 16:47 a.txt

可以看出客户端访问服务的用户为nfsnobody。

b) 更改服务端/data目录的属主

chown -R nfsnobody:nfsnoboy /data
0 0