CentOS7搭建NFS服务

来源:互联网 发布:金正恩 知乎 编辑:程序博客网 时间:2024/05/17 17:43

去年考完RHCE后就没碰NFS了,现在重新回顾一下。

网络文件系统(英语:Network File System,缩写为NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984[1]年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。 NFS和其他许多协议一样,是基于开放网络运算远程过程调用(ONC RPC) 协议之上的。——维基百科


NFS服务器配置

当两台计算机网络建立连接时,双方需提供一些基本信息,如:IP地址、端口号等,这些信息在Linux中可以由某个特定服务来管理,也可以委托给RPC(Remote Procedure Call)来帮助管理。RPC是远程过程调用通信协议,负责管理通信的连接以及连接的基本信息,这样可以让NFS服务专注于共享数据。CentOS 7实现NFS共享,需要同时启动NFS和rpcbind服务。
NFS服务器通过读取/etc/exports配置文件设定哪些客户端可以访问哪些NFS共享哪些文件系统。此文件一条完整的共享条目语法结构如下:

共享路径  客户端主机(选项)

列几个NFS主要的选项,详可参考man exports
一般权限选项

选项 描述 ro 只读权限。(默认设置) rw 读写权限。 sync 同步写操作,数据写入存储设备后返回成功信息。(默认设置) async 异步写操作,数据在未完全写入存储设备前就返回成功信息,实际还在内存。 wdelay 延迟写入选项,将多个写操请求合并后写入硬盘,减少I/O次数,NFS非正常关闭数据可能丢失(默认设置)。 no_wdelay 与上相反,不与async同时生效,如果NFS服务器主要收到小且不相关的请求,该选项实际会降低性能。 subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置); no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置)。 insecure 允许客户端从大于1024的tcp/ip端口连接服务器。

用户映射选项

选项 描述 root_squash 使客户端使用root账户访问时,服务器映射为服务器本地的匿名账号。 no_root_squash 与上相反,此选项主要用于无盘客户端。 all_squash 将所有用户请求映射到匿名匿名用户或用户组(nfsnobody)。 no_all_squash 与上相反(默认设置)。 anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)。 anongid=xxx 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)。

接下来做一个简单的案例。
Server:172.16.0.250
Client: 172.16.0.10

Client主机挂载Server共享目录/arvin/nfsdir至本机的/mnt/nfsdir目录,该目录有读写权限,且root的权限会被保留。

Server

装包

[root@server ~]# yum -y install nfs-utils rpcbind

看装上没

[root@server ~]# rpm -qa | grep nfs-utilsnfs-utils-1.3.0-0.33.el7_3.x86_64[root@server ~]# rpm -qa | grep rpc-bindrpcbind-0.2.0-38.el7.x86_64

添加用户,创建共享目录,给权限,写共享条目

[root@server ~]# useradd -u 1010 arvin[root@server ~]# mkdir -p /arvin/nfsdir[root@server ~]# chmod a+w /arvin/nfsdir[root@server ~]# echo "/arvin/nfsdir 172.16.0.0(rw,async,no_root_squash)" >> /etc/exports

启服务

[root@server ~]# systemctl start rpcbind[root@server ~]# systemctl start nfs-server[root@server ~]# systemctl enable nfs-server[root@server ~]# systemctl enable rpcbind

Client

查看服务器共享目录。

客户端showmount命令
命令基本格式:showmount [选项] NFS服务器名称或地址
-e:显示指定的NFS服务器上所有输出的共享目录。
-a:显示指定的NFS服务器的所有客户端主机及其所连接的目录。
-d:显示指定的NFS服务器中已被客户端连接的所有输出目录

[root@client ~]# showmount -e 172.16.0.250Export list for 172.16.0.250/arvin/nfsdir   172.16.0.0

创建挂载点,用户,写永久挂载表

[root@client ~]# mkdir /mnt/nfsdir[root@client ~]# useradd -u 1010 arvin[root@client ~]# chmod a+w /mnt/nfsdir[root@client ~]# echo "172.16.0.250:/arvin/nfsdir /mnt/nfsdir nfs defaults 0 0"[root@client ~]# mount -a

测试

[root@client ~]# cd /mnt/nfsdir[root@client nfsdir]# >test.txt[root@client nfsdir]# lltotal 0-rw-r--r-- 1 root root 0 May  9 18:37 test.txt[root@client nfsdir]# su - arvin[arvin@client ~]# cd /mnt/nfsdir[arvin@client nfsdir]# >arvin.txt[arvin@client nfsdir]$ lltotal 0-rw-rw-r-- 1 arvin arvin 0 May  9 18:39 arvin.txt-rw-r--r-- 1 root  root  0 May  9 18:37 test.txt

NFS客户端挂载选项,详可参考man nfs

选项 描述 intr 当服务器宕机时或无法到达时,允许中断NFS请求。 nfsvers=version 指定NFS协议版本号,可以是2、3、4。 acl/nocal 关闭ACL,仅与老版本操作系统兼容时使用。 nolock 关闭文件锁机智,仅用来连接版NFS服务器。 noexec 在挂载的文件系统中屏蔽可执行的二进制程序。 port=num 指定NFS服务器端口号,默认是0。如远程NFS进程没在rpcbind注册,则使用标准NFS端口号(TCP2049端口)。 rsize=num 设置最大数据块大小调整NFS读取数据的速度,num单位为字节。 wsize=num 设置最大数据块大小调整NFS写入数据的速度,num单位为字节。 tcp 使用TCP协议挂载。 udp 使用UDP协议挂载。

NFS命令工具

exportfs:用来管理当前NFS共享的文件系统列表。
-a 打开或取消所有目录共享。
-o options,…指定一列共享选项,与 exports(5) 中讲到的类似。
-i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。
-r 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。 它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。
-u 取消一个或多个目录的共享。
-f 在“新”模式下,刷新内核共享表之外的任何东西。 任何活动的客户程序将在它们的下次请求中得到 mountd添加的新的共享条目。
-v 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。

nfsstat:用于列出NFS客户端和服务器的工作状态。
-s:仅列出NFS服务器端状态;
-c:仅列出NFS客户端状态;
-n:仅列出NFS状态,默认显示nfs客户端和服务器的状态;
-2:仅列出NFS版本2的状态;
-3:仅列出NFS版本3的状态;
-4:仅列出NFS版本4的状态;
-m:打印以加载的nfs文件系统状态;
-r:仅打印rpc状态。

1 0