在CentOS 7上配置NFSv3和NFSv4

时间:2020-02-23 14:37:54  来源:igfitidea点击:

在本指南中,我将带我们完成在CentOS 7上安装NFSv3和NFSv4服务器的操作。唯一的前提条件是,我们应该已安装CentOS 7服务器和数据目录,才能通过NFS导出到其他服务器。

在CentOS 7上安装和配置NFSv3和NFSv4

以下是在CentOS 7服务器上安装和配置NFSv3和NFSv4的完整步骤。

安装NFS服务器

使用以下命令在CentOS 7上安装nfs-utils软件包:

# yum -y install nfs-utils

配置用于NFS的域(可选)

# vim /etc/idmapd.conf
Domain = theitroad.local

配置NFS导出

NFS导出在文件/etc/exports下配置。/etc/exports文件控制将哪些文件系统导出到远程主机并指定选项。它遵循以下语法规则:注释以井号(#)开头,默认情况下会忽略空白行。每个主机选项必须直接在主机标识符之后的括号中放置,并且主机和第一个括号之间不能有任何空格。导出的文件系统应位于其单独的行上。授权主机的列表需要用空格字符分隔。长行可以用反斜杠()进行换行。

导出的文件系统的条目具有以下结构:

export host(options)

使用的变量是:

export>正在导出的目录
host>与导出共享到的主机或者网络
options>用于主机的选项

对于具有不同选项的多个主机,语法为:

export host1(options1) host2(options2) host3(options3)

NFS导出默认选项为:

ro:导出的文件系统是只读的,并且远程主机无法对文件系统上共享的文件进行任何更改。要允许主机进行读写,请改为指定rw选项。

sync:使用此选项,NFS服务器在将先前请求所做的更改写入磁盘之前不会回复请求。要改为启用异步写入,请指定选项async。

root_squash:这可以防止远程连接的root用户拥有root特权。而是,NFS服务器将为他们分配用户ID nfsnobody。这样可以有效地将远程根用户的权限压缩到最低的本地用户,从而防止在远程服务器上进行未经授权的写入。要禁用根压缩,请指定no_root_squash。

要压缩每个远程用户(包括root用户),请使用all_squash。要指定NFS服务器应从特定主机分配给远程用户的用户和组ID,请分别使用anonuid和anongid选项,如下所示:

export host(anonuid=uid,anongid=gid)

uid和gid分别是用户ID号和组ID号。

wdelay:如果怀疑即将发生另一个写请求,则通过延迟对磁盘的写操作来减少磁盘写开销。启用默认同步后,可以使用no_wdelay禁用此功能。

subtree_check:此选项启用子树检查。可以使用no_subtree_check禁用它。

配置行的示例如下:

/mnt/data 192.168.1.0/24(rw,no_root_squash)

其中/mnt/data是导出的目录,而192.168.1.0/24是允许具有读/写权限且没有root挤压的网络访问。指定的网络可以替换为一个IP地址,也可以使用*进行全局访问。

请注意,必须为每个导出的文件系统显式覆盖每个默认值。例如,如果未指定rw选项,则导出的文件系统将以只读方式共享。

有关导出选项的更多信息,请参考man exportfs。

为NFS配置防火墙

下一步是打开防火墙上NFS服务所需的端口。

对于NFSv4,请使用以下命令:

# firewall-cmd --add-service=nfs --permanent
# firewall-cmd --reload

对于NFSv3,我们需要通过定义xml文件来添加额外的端口。这需要放在/etc/firewalld/services /目录下。

# cat  /etc/firewalld/services/nfs.xml


<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>NFS
  <description>NFS service
  <port protocol="tcp" port="111"/>
  <port protocol="udp" port="111"/>
  <port protocol="tcp" port="662"/>
  <port protocol="udp" port="662"/>
  <port protocol="tcp" port="892"/>
  <port protocol="udp" port="892"/>
  <port protocol="tcp" port="2049"/>
  <port protocol="udp" port="2049"/>
  <port protocol="tcp" port="32803"/>
  <port protocol="udp" port="32803"/>
  <port protocol="tcp" port="38467"/>
  <port protocol="udp" port="38467"/>
  <port protocol="tcp" port="32769"/>
  <port protocol="udp" port="32769"/>
</service>

然后在防火墙上添加服务。

# firewall-cmd --add-service=nfs --permanent
# firewall-cmd --reload

启动并启用NFS服务

现在,所有内容都已配置完毕,我们应该可以启动服务了。

# for i in rpcbind nfs-server; do
systemctl start $i
systemctl enable $i
done

当我们启动nfs服务时,/usr/sbin/exportfs命令启动并读取该文件,将控制权传递给rpc.mountd(如果为NFSv3)以进行实际的挂载过程,然后传递给rpc.nfsd,然后该文件系统可用于远程用户。它将导出的文件系统写入/var/lib/nfs/etab,我们可以使用以下命令查看:

# cat /var/lib/nfs/etab

发现NFS导出

有两种方法可以发现NFS服务器导出的文件系统。首先,在支持NFSv3的任何服务器上,使用showmount命令:

$showmount -e server

E.g

$showmount -e localhost
Export list for localhost:
/mnt/test *
/mnt/data 192.168.1.0/24

对于仅支持NFSv4的服务器,请挂载/并检查其内容。

# mount  serverip://mnt/
# cd /mnt/
# ls

在客户端上挂载导出的文件系统

客户端可以是支持NFSv3或者NFSv4的任何操作系统。对于Debian/Ubuntu,请安装以下软件包:

$sudo apt-get install rpcbind nfs-common

对于CentOS 7,安装nfs-utils:

$sudo yum -y install nfs-utils
$sudo systemctl start rpcbind 
$sudo systemctl enable rpcbind

要执行非持久安装,可以使用mount命令。

mount -t 192.168.1.10:/mnt/data /data

要指定NFS版本,请使用-ooption

# mount -t nfs -o vers=4 192.168.1.10:/mnt/data /data
or
# mount -t nfs -o vers=3 192.168.1.10:/mnt/data /data

要使其持久化,我们需要修改/etc/fstab文件。 NFSv3的安装如下图/etc/fstab上所示

192.168.1.10:/mnt/data  /data nfs defaults,vers=3 0 0

我们可以看到vers = 3选项用于指定我们要挂载NFSv3. 我们还可以指定其他受支持的选项,如下所示:

192.168.1.10:/mnt/data /data nfs vers=3,proto=tcp,hard,intr,rsize=32768,wsize=32768,noatime 0 0

创建一个安装点并将其安装。

# mkdir /data
# mount -a
# df -hT | grep /data
192.168.1.10:/data nfs 200G 175G 26G 88% /data