网站搜索

设置标准 Linux 文件系统并配置 NFSv4 服务器 - 第 2 部分


Linux 基金会认证工程师(LFCE)接受过在 Linux 系统中设置、配置、管理和排除网络服务故障的培训,负责系统架构的设计和实现以及解决日常相关问题问题。

介绍 Linux 基金会认证计划 (LFCE)。

在本系列的第 1 部分中,我们解释了如何安装 NFS(网络文件系统)服务器,并将该服务设置为在启动时自动启动。如果您还没有这样做,请参阅该文章并按照概述的步骤操作,然后再继续。

  1. 安装网络服务并配置引导时自动启动 - 第 1 部分

现在,我将向您展示如何正确配置 NFSv4 服务器(无需身份验证安全),以便您可以设置网络共享以在 Linux 客户端中使用,就像这些文件系统安装在本地一样。请注意,您可以使用 LDAP 或 NIS 进行身份验证,但这两个选项都不在 LFCE 认证的范围内。

配置 NFSv4 服务器

一旦 NFS 服务器启动并运行,我们将重点关注:

  1. 指定和配置我们想要通过网络共享的本地目录,以及
  2. 通过 /etc/fstab 文件或基于自动挂载内核的实用程序 (autofs) 在客户端中自动挂载这些网络共享。

我们稍后将解释何时选择一种方法或另一种方法。

在开始之前,我们需要确保 idmapd 守护进程正在运行并配置。此服务执行 NFSv4 名称 (user@mydomain) 到用户和组 ID 的映射,并且是实现 NFSv4 服务器所必需的。

编辑 /etc/default/nfs-common 以启用 idmapd。

NEED_IDMAPD=YES

并使用您的本地域名编辑 /etc/idmapd.conf (默认为主机的 FQDN)。

Domain = yourdomain.com

然后启动 idmapd。

service nfs-common start 	[sysvinit / upstart based systems]
systemctl start nfs-common 	[systemd based systems]

导出网络共享

/etc/exports 文件包含 NFS 服务器的主要配置指令,定义将导出到远程主机的文件系统并指定可用选项。在此文件中,每个网络共享均使用单独的行表示,默认情况下具有以下结构:

/filesystem/to/export client1([options]) clientN([options])

其中 /filesystem/to/export 是导出文件系统的绝对路径,而 client1(最多 clientN)表示特定客户端(主机名或 IP 地址)或网络(允许使用通配符)共享将导出到的位置。最后,选项是逗号分隔值(选项)的列表,在导出共享时分别考虑这些值。请注意,每个主机名及其前面的括号之间没有空格。

以下是最常见选项的列表及其各自的描述:

  1. ro(只读的缩写):远程客户端只能以读取权限挂载导出的文件系统。
  2. rw(读写的缩写):允许远程主机在导出的文件系统中进行写入更改。
  3. wdelay(写入延迟的缩写):如果 NFS 服务器怀疑另一个相关的写入请求即将到来,则它会延迟向磁盘提交更改。但是,如果 NFS 服务器收到多个小的不相关请求,该选项会降低性能,因此可以使用 no_wdelay 选项将其关闭。
  4. 同步:只有在更改已提交到永久存储(即硬盘)后,NFS 服务器才会回复请求。其相反的异步选项可能会提高性能,但代价是服务器重新启动后会导致数据丢失或损坏。
  5. root_squash:防止远程root用户在服务器中拥有超级用户权限,并为他们分配用户nobody的用户ID。如果您想“squash”所有用户(而不仅仅是root),则可以使用all_squash选项。
  6. anonuid/anongid:显式设置匿名帐户(nobody)的UID和GID。
  7. subtree_check:如果仅导出文件系统的子目录,则此选项将验证请求的文件是否位于该导出的子目录中。另一方面,如果导出整个文件系统,则使用 no_subtree_check 禁用此选项将加快传输速度。根据 man 5 的导出,现在的默认选项是 no_subtree_check 因为子树检查往往会导致比其价值更多的问题。
  8. fsid=0 | root(零或根):指定指定的文件系统是多个导出目录的根(仅适用于 NFSv4)。

在本文中,我们将使用 192.168.0.10(NFS 服务器)上的目录 /NFS-SHARE/NFS-SHARE/mydir 作为我们的目录。测试文件系统。

我们始终可以使用以下命令列出 NFS 服务器中的可用网络共享:

showmount -e [IP or hostname]

在上面的输出中,我们可以看到 192.168.0.10 上的 /NFS-SHARE/NFS-SHARE/mydir 共享已导出发送至 IP 地址为 192.168.0.17 的客户端。

我们对导出目录的初始配置(请参阅 NFS 服务器上的 /etc/exports 目录)如下:

/NFS-SHARE  	192.168.0.17(fsid=0,no_subtree_check,rw,root_squash,sync,anonuid=1000,anongid=1000)
/NFS-SHARE/mydir    	192.168.0.17(ro,sync,no_subtree_check)

编辑配置文件后,我们必须重新启动NFS服务:

service nfs-kernel-server restart 		[sysvinit / upstart based system]
systemctl restart nfs-server			[systemd based systems]
使用 autofs 挂载导出的网络共享

您可能需要参考 LFCS 系列的第 5 部分(“如何在 Linux 中挂载/卸载本地和网络(Samba 和 NFS)文件系统”),了解有关使用以下命令按需挂载远程 NFS 共享的详细信息: mount 命令或永久通过 /etc/fstab 文件。

使用这些方法挂载网络文件系统的缺点是系统必须分配必要的资源以始终保持共享挂载状态,或者至少在我们决定手动卸载它们之前。另一种方法是通过 autofs 按需自动挂载所需的文件系统(无需使用 mount 命令),它可以在文件系统使用时挂载并在使用后卸载它们一段不活动的时期。

Autofs 读取 /etc/auto.master,其格式如下:

[mount point]	[map file]

其中[映射文件]用于指示[挂载点]内的多个挂载点。

然后,此主映射文件 (/etc/auto.master) 用于确定定义了哪些安装点,然后使用每个安装点的指定参数启动自动安装进程。

使用 autofs 挂载导出的 NFS 共享

编辑您的 /etc/auto.master 如下:

/media/nfs	/etc/auto.nfs-share	--timeout=60

并创建一个名为 /etc/auto.nfs-share 的映射文件,其中包含以下内容:

writeable_share  -fstype=nfs4 192.168.0.10:/
non_writeable_share  -fstype=nfs4 192.168.0.10:/mydir

请注意,/etc/auto.nfs-share 中的第一个字段是 /media/nfs 内的子目录的名称。每个子目录都是由 autofs 动态创建的。

现在,重新启动 autofs 服务:

service autofs restart 			[sysvinit / upstart based systems]
systemctl restart autofs 			[systemd based systems]

最后,要启用 autofs 在引导时启动,请运行以下命令:

chkconfig --level 345 autofs on
systemctl enable autofs 			[systemd based systems]
启动 autofs 守护程序后检查已安装的文件系统

当我们重新启动autofs时,mount命令显示映射文件(/etc/auto.nfs-share)已挂载到指定的/etc/auto.master 中的目录:

请注意,实际上尚未挂载任何目录,但当我们尝试访问 /etc/auto.nfs-share 中指定的共享时,将会自动挂载:

正如我们所看到的,autofs 服务“挂载”映射文件,可以这么说,但会等到向文件系统发出请求才能实际挂载它们。

在导出的文件系统中执行写入测试

anonuidanongid 选项以及第一个共享中设置的 root_squash 允许我们将 root 用户执行的请求映射到客户端到服务器中的本地帐户。

换句话说,当客户端中的 root 在该导出目录中创建文件时,其所有权将自动映射到 UID 和 GID=1000 的用户帐户,前提是服务器上存在该帐户:

结论

我希望您能够使用本文作为指南,成功设置和配置适合您环境的 NFS 服务器。您可能还需要参考相关手册页以获得进一步帮助(例如,man Exportsman idmapd.conf)。

请随意尝试前面概述的其他选项和测试用例,并随时使用下面的表格发送您的意见、建议或问题。我们很高兴收到您的来信。