一、需要安装的软件包
1)rpcbind :RPC的主程序,这个软件包在客户端和服务器端都需要安装
2)nfs-utils :NFS的主程序,提供nfsd和mountd等相关服务,客户端和服务端都要安装
二、开始行动。。。
为了便于区分客户端和服务端,我分别将主机名改为Server和Client
1
2
3
|
[root@Server ~]
# hostname
Server
[root@Server ~]
#
|
1
2
3
|
[root@Client ~]
# hostname
Client
[root@Client ~]
#
|
1)两台主机分别安装rpcbind和nfs-utils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@Server ~]
# yum install rpcbind
#此处省略若干行#
Dependencies Resolved
=======================================================================================================
Package Arch Version Repository Size
=======================================================================================================
Installing:
rpcbind x86_64 0.2.0-11.el6 local_repo 51 k
Installing
for
dependencies:
libgssglue x86_64 0.1-11.el6 local_repo 23 k
libtirpc x86_64 0.2.1-6.el6_4 local_repo 78 k
Transaction Summary
=======================================================================================================
Install 3 Package(s)
#此处省略若干行#
Installed:
rpcbind.x86_64 0:0.2.0-11.el6
Dependency Installed:
libgssglue.x86_64 0:0.1-11.el6 libtirpc.x86_64 0:0.2.1-6.el6_4
Complete!
[root@Server ~]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[root@Server ~]
# yum install nfs-utils
####此处省略若干行
=======================================================================================================
Package Arch Version Repository Size
=======================================================================================================
Installing:
nfs-utils x86_64 1:1.2.3-39.el6 local_repo 320 k
Installing
for
dependencies:
keyutils x86_64 1.4-4.el6 local_repo 39 k
libevent x86_64 1.4.13-4.el6 local_repo 66 k
nfs-utils-lib x86_64 1.1.5-6.el6 local_repo 67 k
Transaction Summary
=======================================================================================================
Install 4 Package(s)
####此处省略若干行
Installed:
nfs-utils.x86_64 1:1.2.3-39.el6
Dependency Installed:
keyutils.x86_64 0:1.4-4.el6 libevent.x86_64 0:1.4.13-4.el6 nfs-utils-lib.x86_64 0:1.1.5-6.el6
Complete!
[root@Server ~]
#
|
3)分析一下安装之后生成的文件
先看看rpcbind的
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@Client ~]
# rpm -ql rpcbind
/etc/rc
.d
/init
.d
/rpcbind
#红帽系的启动脚本
/sbin/rpcbind
#rpcbind的启动和管理命令
/usr/sbin/rpcinfo
#查询指定主机的rpc信息
####下面都是打酱油的
/usr/share/doc/rpcbind-0
.2.0
/usr/share/doc/rpcbind-0
.2.0
/AUTHORS
/usr/share/doc/rpcbind-0
.2.0
/ChangeLog
/usr/share/doc/rpcbind-0
.2.0
/README
/usr/share/man/man8/rpcbind
.8.gz
/usr/share/man/man8/rpcinfo
.8.gz
/var/cache/rpcbind
[root@Client ~]
#
|
在看看nfs-utils的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[root@Server ~]
# rpm -ql nfs-utils
/etc/nfsmount
.conf
/etc/rc
.d
/init
.d
/nfs
/etc/rc
.d
/init
.d
/nfslock
/etc/rc
.d
/init
.d
/rpcgssd
/etc/rc
.d
/init
.d
/rpcidmapd
/etc/rc
.d
/init
.d
/rpcsvcgssd
/etc/request-key
.d
/id_resolver
.conf
/etc/sysconfig/nfs
/sbin/mount
.nfs
/sbin/mount
.nfs4
/sbin/nfs_cache_getent
/sbin/rpc
.statd
/sbin/umount
.nfs
/sbin/umount
.nfs4
/usr/sbin/exportfs
/usr/sbin/mountstats
/usr/sbin/nfsidmap
/usr/sbin/nfsiostat
/usr/sbin/nfsstat
/usr/sbin/rpc
.gssd
/usr/sbin/rpc
.idmapd
/usr/sbin/rpc
.mountd
/usr/sbin/rpc
.nfsd
/usr/sbin/rpc
.svcgssd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/sbin/sm-notify
/usr/sbin/start-statd
###下面若干行省略
|
注意:有一个特特特别重要的文件上面没有列出来,那就是/etc/exports这个文件,这是这是用于配置nfs共享文件的配置,十分重要,后面详细介绍。
4)启动RPC服务和NFS服务
在启动NFS服务之前一定先启动RPC服务,so,启动rpcbind,然后用rpcinfo探测本机rpc信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@Client ~]
# service rpcbind start
Starting rpcbind: [ OK ]
[root@Client ~]
# rpcinfo 127.0.0.1
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4
local
/var/run/rpcbind
.sock portmapper superuser
100000 3
local
/var/run/rpcbind
.sock portmapper superuser
[root@Client ~]
#
|
从上面对rpcinfo中没有发现任何和NFS有关的信息,那是因为我们探测的是Client端。
好,那我们把服务端的rpcbind和NFS启动
1
2
3
4
5
6
7
8
9
|
[root@Server ~]
# service rpcbind start
Starting rpcbind: [ OK ]
[root@Server ~]
# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@Server ~]
#
|
可以看出来,当起动nfs主服务,随之一起启动的还有quotas(配额服务),mountd(挂载和访问权限控制的)等等。
现在我们在回过头来在客户端用rpcinfo探测服务端。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
[root@Client ~]
# rpcinfo 192.168.80.102
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4
local
/var/run/rpcbind
.sock portmapper superuser
100000 3
local
/var/run/rpcbind
.sock portmapper superuser
100011 1 udp 0.0.0.0.3.107 rquotad superuser
100011 2 udp 0.0.0.0.3.107 rquotad superuser
100011 1 tcp 0.0.0.0.3.107 rquotad superuser
100011 2 tcp 0.0.0.0.3.107 rquotad superuser
100005 1 udp 0.0.0.0.170.4 mountd superuser
100005 1 tcp 0.0.0.0.233.174 mountd superuser
100005 1 udp6 ::.179.140 mountd superuser
100005 1 tcp6 ::.163.49 mountd superuser
100005 2 udp 0.0.0.0.166.4 mountd superuser
100005 2 tcp 0.0.0.0.201.171 mountd superuser
100005 2 udp6 ::.229.140 mountd superuser
100005 2 tcp6 ::.229.7 mountd superuser
100005 3 udp 0.0.0.0.237.110 mountd superuser
100005 3 tcp 0.0.0.0.183.5 mountd superuser
100005 3 udp6 ::.157.246 mountd superuser
100005 3 tcp6 ::.216.13 mountd superuser
100003 2 tcp 0.0.0.0.8.1 nfs superuser
100003 3 tcp 0.0.0.0.8.1 nfs superuser
100003 4 tcp 0.0.0.0.8.1 nfs superuser
100227 2 tcp 0.0.0.0.8.1 nfs_acl superuser
100227 3 tcp 0.0.0.0.8.1 nfs_acl superuser
100003 2 udp 0.0.0.0.8.1 nfs superuser
100003 3 udp 0.0.0.0.8.1 nfs superuser
100003 4 udp 0.0.0.0.8.1 nfs superuser
100227 2 udp 0.0.0.0.8.1 nfs_acl superuser
100227 3 udp 0.0.0.0.8.1 nfs_acl superuser
100003 2 tcp6 ::.8.1 nfs superuser
100003 3 tcp6 ::.8.1 nfs superuser
100003 4 tcp6 ::.8.1 nfs superuser
100227 2 tcp6 ::.8.1 nfs_acl superuser
100227 3 tcp6 ::.8.1 nfs_acl superuser
100003 2 udp6 ::.8.1 nfs superuser
100003 3 udp6 ::.8.1 nfs superuser
100003 4 udp6 ::.8.1 nfs superuser
100227 2 udp6 ::.8.1 nfs_acl superuser
100227 3 udp6 ::.8.1 nfs_acl superuser
100021 1 udp 0.0.0.0.231.70 nlockmgr superuser
100021 3 udp 0.0.0.0.231.70 nlockmgr superuser
100021 4 udp 0.0.0.0.231.70 nlockmgr superuser
100021 1 tcp 0.0.0.0.167.220 nlockmgr superuser
100021 3 tcp 0.0.0.0.167.220 nlockmgr superuser
100021 4 tcp 0.0.0.0.167.220 nlockmgr superuser
100021 1 udp6 ::.190.58 nlockmgr superuser
100021 3 udp6 ::.190.58 nlockmgr superuser
100021 4 udp6 ::.190.58 nlockmgr superuser
100021 1 tcp6 ::.160.232 nlockmgr superuser
100021 3 tcp6 ::.160.232 nlockmgr superuser
100021 4 tcp6 ::.160.232 nlockmgr superuser
[root@Client ~]
#
|
再看看是不是就多了很多信息啦,现在服务端的rpc就多了nfs相关的子服务了。
三、配置和使用
双方的服务都搭建好了,现在就是使用吧
1)配置服务端要共享出去的目录或者分区,这个配置就是刚刚说到的/etc/exports文件了
/etc/exports配置规则:[共享目录] [客户端][权限]
[共享文件]:这个随意,如 /home/works/
[客户端]: 分享给谁,谁可以访问,这里可以使用主机ip、网络号ip还有主机名
主机ip:如192.168.80.101/24
网络号:如 192.168.80.0/24
主机名:如www.baidu.com,如果用主机名配置,可以使用通配符。如 *.baidu.com就表示任何baidu.com的三级域名都可以访问
[权限] 需要注意的是,上面的每一项都是空格分开,但是权限要紧随[客户端]后面,用括号括起来
具体的权限选项:
1
2
3
4
5
6
7
8
9
10
11
12
|
rw: 读写
ro:
secure: 默认已经启用;限制客户端只能使用小于1024的端口访问请求;若不加限制,则使用 insecure
async: 异步写入,性能好,数据可靠性差;
sync
: 同步写入,性能差,数据可靠性高;
wdelay: 写入延迟;no_wdelay
nohide: 不隐藏要导出的目录中挂载的其它nfs;
no_acl: 关闭nfs的acl功能;
root_squash: 压缩root权限, nfsnobody
no_root_squash: 不压缩root权限
all_squash:所有用户都压缩
anonuid=nfsuser,anongid=nfsgroup:使用指定的用户帐号做匿名用户帐号
|
现在我们就配置一下我们客户端可以访问的nfs服务
1
|
/data/
192.168.80.0
/24
(rw)
|
配置好exports文件后,重启nfs服务
重启完成之后我们在客户端用showmount命令检查一下服务端共享的文件
1
2
3
4
|
[root@Client ~]
# showmount -e 192.168.80.102
Export list
for
192.168.80.102:
/data
192.168.80.0
/24
[root@Client ~]
#
|
可以看到服务端共享了/data这个目录,那我们赶紧挂载使用吧。
将对方的/data/挂载到本地/nfstest/里
1
2
3
4
|
[root@Client ~]
# mount 192.168.80.102:/data /nfstest
[root@Client ~]
# ls /nfstest/
fstab inittab
[root@Client ~]
#
|
ok,挂载成功,可以使用了,但是真的可以使用了吗,还不一定,why?权限问题,NFS服务中,权限是个大问题,也是NFS服务中最头痛的问题,额。。。。请听下回分解。。。