在CentOS 7上配置NFSv3和NFSv4
在本指南中,我将带我们完成在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