NFS 简介
1 | NFS是Network File System的缩写,即网络文件系统 |
NFS 安装
NFS 安装
1
2// NFS 服务端 和 客户端
[root@10 ~]# yum -y install nfs-utils rpcbind1
2
3* nfs-utils Nfs-utils软件包提供了rpc.nfsd和rpc.mountd两个RPC守护进程
* rpcbind 远程过程调用服务
* nfs-ganesha* NFS-Ganesha是一个基于NFSv3\v4\v4.1的文件服务器,运行在大多数Linux发行版的用户模态下,同时也支持9p.2000L协议.它支持的运行平台包括Linux,BSD variants和POSIX-compliant UnixesNFS 常用文件或目录
1
2
3
4
5* /etc/exports NFS服务的主要配置文件
* /usr/sbin/exportfs NFS服务的管理命令
* /usr/sbin/showmount 客户端的查看命令
* /var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
* /var/lib/nfs/xtab 记录曾经登录过的客户端信息
NFS 配置
服务端:创建存放数据目录
1
2[root@10 ~]# mkdir -p /mnt/data/nfs/elasticsearch
[root@10 ~]# chmod 777 /mnt/data/nfs/elasticsearch服务端:修改配置文件/etc/exports
1
2[root@10 ~]# vim /etc/exports
/mnt/data/nfs/elasticsearch 10.0.3.0/24(rw,sync,no_root_squash,no_all_squash)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/etc/exports文件内容格式:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
* 输出目录 共享目录位置
* 客户端IP:
1.指定ip地址:1.1.1.1
2.指定网段:1.1.1.0/24,1.1.1.0/255.255.255.0
3.指定主机域名:a.b.com
4.指定部分主机域名:*.b.com
5.所有主机:*
* 客户端选项:选项用来设置输出目录的访问权限,用户映射
1.访问权限:
* ro 只读访问
* rw 读写访问
2.用户映射选项:
* all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
* no_all_squash 与all_squash取反(默认设置)
* root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置)
* no_root_squash 与rootsquash取反
* anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
* anongid=xxx 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)
3.其它选项
* secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)
* insecure 允许客户端从大于1024的tcp/ip端口连接服务器
* sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
* async 将数据先保存在内存缓冲区中,必要时才写入磁盘
* wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
* no_wdelay 若有写操作则立即执行,应与sync配合使用
* subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
* no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率服务端:启动服务和开机自启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//重启(修改完配置文件后)
[root@10 ~]# systemctl restart rpcbind
[root@10 ~]# systemctl restart nfs
或者:
//重新加载配置文件
[root@10 ~]# exportfs -r
//启动
[root@10 ~]# systemctl start rpcbind
[root@10 ~]# systemctl start nfs
//开机启动项
[root@10 ~]# systemctl enable rpcbind
[root@10 ~]# systemctl enable nfs服务端:检查NFS是否启动成功
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[root@10 ~]# rpcinfo -p
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
100024 1 udp 53483 status
100024 1 tcp 50192 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 38395 nlockmgr
100021 3 udp 38395 nlockmgr
100021 4 udp 38395 nlockmgr
100021 1 tcp 53778 nlockmgr
100021 3 tcp 53778 nlockmgr
100021 4 tcp 53778 nlockmgr1
2
3
4
5
6
7注意:
我们只输入了一条启动NFS服务的命令,它额外的启动了3个服务:quotas,daemon,mountd(启动portmap服务)又是怎么回事?
首先,NFS文件系统要提供服务单靠本身的NFS服务是不够的,还需要调用其它服务,这个其它服务就是RPC(remote procedure call,远程过程调用)服务和portmap服务.由于NFS服务本身不提供文件传输功能,我们要远程使用NFS文件系统就需要RPC服务的支持,而portmap服务用来为RPC服务进行动态端口分配和映射,所以portmap服务也是NFS服务所必须的.正是因为NFS的运行必须要使用RPC服务,所以一般把NFS服务看作RPC服务的一种,开启NFS服务其实就是在开启RPC服务.REDHAT安全指南在讲portmap服务时就说:"portmap服务是用于RPC服务(如NIS和NFS)的动态端口分配守护进程",明显把NFS和NIS(network information service)看成了RPC服务的其中两个应用.
NFS使用了RPC的哪些服务呢? rpc.nfsd服务 和 rpc.mountd服务
明白了这点,我们就明白为什么在开启nfs服务时,系统除了开启NFS services还开启了rpc.nfsd和rpc.mountd,而至于NFS quotas是用来管理目录配额的,它并不是必需的.这也就明白了安装NFS服务时所需要的两个软件包nfs-utils和portmap: Nfs-utils软件包提供了rpc.nfsd和rpc.mountd两个RPC的daemon(守护进程)程序,而portmap软件包提供了portmap程序客户端:检查共享目录列表
1
2
3[root@10 ~]# showmount -e 10.0.2.115
Export list for 10.0.2.115:
/mnt/data/nfs/elasticsearch 10.0.3.0/24客户端:创建挂载点
1
2[root@10 ~]# mkdir -p /mnt/ops/elasticsearch
[root@10 ~]# chmod 777 /mnt/ops/elasticsearch客户端:挂在共享目录
1
2
3
4
5
6//显示指定NFS服务器的客户端以及服务器端在客户端的挂载点
showmount –a IP
//显示指定NFS服务器在客户端的挂载点
showmount –d IP
rpcinfo -p 10.10.209.148客户端挂载目录
1
[root@10 ~]# mount.nfs -t nfs 10.0.2.115:/mnt/data/nfs/elasticsearch /mnt/ops/elasticsearch -o proto=tcp -o nolock