NFS是基于Sun的RPC(远程过程调用)构建的分布式文件系统协议。NFS在LAN网络环境中通常用于共享目录和文件,并且在许多网络附加存储(NAS)系统和云存储后端中也都采用了NFS。在典型的NFS部署中,NFS服务器将其本地文件系统的一部分导出为NFS共享,并且一个或多个远程NFS客户端在其自己的文件系统中安装和访问导出的共享。
这是在NFS服务器和客户端(都在CentOS 7上运行)之间设置NFS共享的方法。
准备
在本教程中,将使用两台CentOS 7主机,一台用于NFS服务器,另一台用于NFS客户端。NFS中的许多读/写操作都涉及访问和更新时间戳,但是NFS本身没有任何机制可以在服务器和客户端之间同步时间。为了可靠地进行NFS操作,因此强烈建议在每台NFS服务器和客户端主机上设置NTP,以避免它们之间的时钟偏差。
在CentOS 7上设置NFS服务器
使用yum安装必要的NFS守护程序和实用程序:
1 | sudo yum install nfs-utils |
接下来,准备要通过NFS导出的文件夹。在此示例中,我将导出本地文件系统的/var/nfs。
1 | mkdir /var/nfs |
现在,使用文本编辑器打开/etc/exports,并使用以下其他导出选项指定该文件夹。
1 | /var/nfs 192.168.1.0/24(rw,sync,no_subtree_check) |
使用的导出选项指示以下内容。显然,您可以自定义选项以满足您的要求。
- 192.168.1.0/24:只有IP地址为192.168.1.0/24的NFS客户端才能访问NFS共享。其他形式的ACL(例如192.168.1.175,*.imgl.net)也是可能的。
- rw:此选项允许NFS客户端在共享上执行读取和写入操作。
- sync:此选项使NFS服务器仅在成功将写入提交到存储后才回复写入请求,从而以性能为代价提高了可靠性。
- no_subtree_check:此选项禁用子树检查,该子树检查可验证访问的文件是否具有正确的权限并属于导出的树。禁用子树检查可以以安全为代价提高性能。
注:使用*.imgl.net的目的是想建立域名imgl.net解析的服务器都可以访问的效果。
接下来,启动必要的服务并将其设置为在启动时自动启动。
1 | systemctl enable rpcbind |
如果修改/etc/exports,则需要通过运行以下命令来激活更改:
1 | exportfs -a |
最后,您应该按照以下步骤在默认防火墙中打开NFS服务使用的端口。
1 | firewall-cmd --zone=public --add-service=nfs --permanent |
要检查文件夹是否成功导出,请运行:
1 | exportfs |
/var/nfs 192.168.1.0/24
输出应指示将哪些文件夹(例如/var/nfs)导出到谁(例如:192.168.1.0/24)。
在CentOS 7上设置NFS客户端
现在,让我们看看如何设置远程NFS客户端以装载和访问导出的NFS共享。
在单独的CentOS 7主机上,安装必要的NFS守护程序和实用程序。
1 | yum install nfs-utils |
为NFS共享准备本地安装点。
1 | mkdir /mnt/nfs |
继续,如下所示,使用mount命令安装远程NFS共享。在此示例中,NFS服务器的IP地址为192.168.1.174。
1 | mount -t nfs 192.168.1.174:/var/nfs /mnt/nfs |
直接执行mount命令
df命令应显示从NFS共享额外的存储空间。
要卸载NFS共享,请使用umount命令。
1 | umount /mnt/nfs |
如果要在引导时自动安装远程NFS共享,则可以在/etc/fstab中添加以下行。
1 | vi /etc/fstab |
192.168.1.174:/var/nfs /mnt/nfs nfs defaults 0 0
请注意,已挂载的NFS共享会将由根创建的任何文件的所有权更改为nfsnobody用户。这是一个称为root squash的NFS功能,出于安全原因,从本质上减少了远程超级用户的访问权限。您可以使用no_root_squash导出选项禁用root squash ,但不建议这样做,因为任何远程root用户都可能以root特权不小心弄乱了共享文件夹。