NFS与ZFS共享

2022-02-25 20:13:48

FreeBSD提供了一个内置的NFS服务器和客户端,可以理解NFSv3和NFSv4协议。如果您是NFS新手,《FreeBSD手册》的这一部分很好地概述了NFS及其组件。

如果您以前在FreeBSD上配置过NFS,则使用过以下配置工作流:

通过向/etc/exports配置文件添加条目,控制系统对共享目录的权限。

您可能听说OpenZFS提供了自己的sharenfs属性。此属性如何更改NFS配置工作流,以及为什么要使用它?简而言之,当您使用zfs set sharenfs而不是直接编辑/etc/exports来指定配置选项时,它改变了第#2步。

今天的文章回答了一些常见的问题,比如为什么要在NFS配置中使用sharenfs属性,以及如何使用。

exports是mountd使用的配置文件,该服务监听来自NFS客户端的NFS装载请求。由于mountd仅在启动时读取其配置文件,因此每当编辑/etc/exports时,您必须记住服务mountd reload,以便让服务知道其配置有更改。

sharenfs是一个ZFS属性,用于指示共享是否可用(打开/关闭)以及该共享的配置详细信息。由于配置详细信息没有绑定到mountd的配置文件,因此对该属性的任何更改都可以立即使用,而无需首先重新加载mountd。

虽然不必记住重新加载mountd很方便,但sharenfs作为ZFS属性还有其他好处:

可以将sharenfs属性指定给zfs get命令,以确定当前通过NFS共享的文件系统,并查看每个文件系统的NFS共享详细信息。

通过设置zfs,将sharenfs设置为on或off,可以在每个文件系统的基础上启用/禁用该属性。

子数据集自动从其父数据集继承sharenfs属性。作为ZFS属性,可以使用子数据集上的ZFS集覆盖继承的默认值,以指定该数据集所需的内容。

如果您在带有OpenZFS文件系统的FreeBSD系统上已经有了一个工作的NFS配置,那么使用zfs set很容易重新创建您的配置。例如,/etc/exports中的这一行:

这意味着您只需对/etc/exports文件中的每一行运行等效的zfs set sharenfs='on,用_YOUR_OPTIONS的poolname/filesystem命令替换_即可。

ZFS对许多公司至关重要。我们指导公司和团队实现安全的ZFS白皮书实施,以增强和改进基础设施为您的业务提供支持的方式。

您可以使用导出(5)中列出的任何选项。基本上,如果您现在在/etc/exports中使用它,可以使用zfs set指定它。

别忘了在选项前面加上on,以便在指定的数据集上启用NFS共享。

请注意,zfs sharenfs选项用逗号分隔,而不是导出文件使用的空格。在脚本中使用命令时,使用逗号可以避免引用每个选项。

ZFS将自动更新其/etc/ZFS/exports文件。永远不要直接编辑这个文件!您应该始终使用zfs set来更改sharenfs选项。

无论何时进行更改,都要花时间从NFS客户端验证共享是否按预期运行。此外,请仔细检查/var/log/messages,以确定是否存在任何需要解决的与NFS相关的错误。

您可能不希望在数据集上运行zfs set sharenfs=on而不包含一些限制,因为未指定的默认值是允许rw访问任何网络上的任何客户端。在本例中,/usr/ports仅限于指定的网络,但/usr/home对任何网络上的任何人开放:

如果您在自己的配置中看到没有maproot设置的条目,您应该评估是否需要对该文件系统的sharenfs属性添加限制。

zfs share和zfs unshare命令可用于启用或禁用NFS共享。需要记住的几点:

要全局启动或停止所有共享,请将-a(所有文件系统)与zfs share或zfs unshare一起使用。

运行zfs share只会影响已定义(并设置为on)sharenfs属性的文件系统。例如,您可以在父文件系统上运行zfs share,但只有定义为on的子数据集才会开始共享。

zfs share/unshare只关注sharenfs属性。这假设您将管理底层服务,并根据需要启动/停止它们。

FreeBSD对OpenZFS和NFS的内置集成使管理员可以轻松配置和管理NFS共享。通过使用OpenZFS的sharenfs属性,可以将管理NFS共享添加到用于监视和维护存储在OpenZFS文件系统上的数据的脚本和过程库中。

ZFS对许多公司至关重要。我们指导公司和团队实现安全的ZFS白皮书实施,以增强和改进基础设施为您的业务提供支持的方式。