第 29 章通过 NFS 共享文件系统

目录

29.1. 术语
29.2. 安装 NFS 服务器
29.3. 配置 NFS 服务器
29.4. 配置客户端
29.5. 更多信息

摘要

在企业环境中通过网络分发和共享文件系统是一项常见任务。久经验证的网络文件系统 (NFS) 与黄页协议 NIS 协同工作。要使用可以与 LDAP 协同工作并且也可以使用 Kerberos 的更安全协议,请选中 NFSv4。结合使用 pNFS,您可以突破性能瓶颈。

NFS 与 NIS 一起使用时网络面向用户是透明的。利用 NFS,可以通过网络分发任意文件系统。进行适当的设置后,用户将发现自己始终处于同一环境中,而与当前使用的终端无关。

[Important]需要 DNS 的原因

从理论上讲,所有导出都可以仅使用 IP 地址来完成。为避免超时,您需要一个有效的 DNS 系统。至少为了日志记录目的也应使用 DNS,因为 mountd 守护程序执行反向查找。

29.1. 术语

下面是 YaST 模块中使用的术语。

导出

由 NFS 服务器导出的目录,客户端可将其集成到系统中。

NFS 客户端

NFS 客户端是通过网络文件系统协议使用来自 NFS 服务器的 NFS 服务的系统。TCP/IP 协议已集成到 Linux 内核中;无需再安装任何其他软件。

NFS 服务器

NFS 服务器向客户端提供 NFS 服务。运行中的服务器依赖于以下守护程序:nfsd(工作)、idmapd(到 ID 的用户和组名映射,反之亦然)、statd(文件锁定)和 mountd(装入请求)。

pNFS

并行 NFS,属于 NFSv4 的一种协议扩展。任何 pNFS 客户端都可以直接访问 NFS 服务器上的数据。

29.2. 安装 NFS 服务器

NFS 服务器软件不会默认安装。如果您按照第 29.3 节 “配置 NFS 服务器”中的说明配置 NFS 服务器,则系统会自动提示您安装所需的包。或者,使用 YaST 或 zypper 安装包 nfs-kernel-server

与 NIS 一样,NFS 也是一个客户端/服务器系统。但是,一台计算机可充当这两种角色:它可以通过网络提供文件系统(导出),也可以从其他主机装入文件系统(导入)。

29.3. 配置 NFS 服务器

可通过 YaST 配置 NFS 服务器,也可以手动配置它。NFS 还可与 Kerberos 结合来进行身份验证。

29.3.1. 使用 YaST 导出文件系统

使用 YaST 将网络中的某台主机转换为 NFS 服务器,即将目录和文件导出到所有有权访问它的主机的服务器。服务器还可为组的所有成员提供应用程序,而无需在每台主机上本地安装应用程序。

要设置此类服务器,请继续执行以下步骤:

过程 29.1. 设置 NFSv3 服务器

  1. 启动 YaST 并选择网络服务+NFS 服务器;请参见图 29.1 “NFS 服务器配置工具”。系统会提示您安装其他软件。

    图 29.1. NFS 服务器配置工具

    NFS 服务器配置工具

  2. 激活启动单选按钮。

  3. 如果防火墙在您的系统 (SuSEfirewall2) 中处于活动状态,请选中在防火墙中打开端口。YaST 会针对 NFS 服务器更改其配置,方法是启用 nfs 服务。

  4. 请将启用 NFSv4 复选框保留为禁用状态。

  5. 如果您需要安全访问服务器,请单击启用 GSS 安全性。先决条件是您的域中安装了 Kerberos 并且服务器和客户端都已采用 Kerberos 系统。单击下一步

  6. 单击对话框上半部分中的添加目录以导出您的目录。

  7. 如果您尚未配置允许的主机,系统会自动弹出另一个对话框及相应的选项,供您输入客户端信息。输入主机通配符(通常您可以保留默认值不变)。

    可以为每个主机设置四类主机通配符:单主机(名称或 IP 地址)、网络组、通配符(如 * 表示所有计算机都能访问服务器)和 IP 网络。

  8. 单击完成以完成配置。

29.3.1.1. 为 NFSv4 客户端导出

对于固定的 NFSv4 客户端集合,可以导出的目录有两种,一种是作为伪根文件系统的目录,一种是绑定到伪文件系统的某个子目录的目录。此伪文件系统作为基本点,为相同客户端导出的所有文件系统在其下各就各位。对于一个或一组客户端,服务器上只有一个目录可以配置为伪 root 目录以供导出。对于此客户端,通过将它们绑定到伪 root 目录中现有的子目录可以导出多个目录。

例如,假定选择目录 /exports 作为能访问服务器的所有客户端的伪 root 目录。然后将其添加到所导出目录的列表,并确保为此目录输入的选项包含 fsid=0。如果有另一个目录 /data 也需要通过 NFSv4 导出,请将此目录同样添加到该列表。为此输入选项时,请确保 bind=/exports/data 在列表中,并且 /exports/data 已经是 /exports 的现有子目录。选项 bind=/target/path 中的任何更改(添加、删除或更改值)都会反映在 Bindmount 目标中。

要将服务器设置为导出 NFSv4 客户端目录,请使用过程 29.1, “设置 NFSv3 服务器”中的一般指南,但以下步骤需要更改:

  1. 在第一个对话框中,选中启用 NFSv4

  2. 在第一个对话框中输入适当的 NFSv4 域名。

    请确保名称与访问此特定服务器的任何 NFSv4 客户端的 /etc/idmapd.conf 文件中的名称相同。此参数用于(服务器和客户端上)NFSv4 支持所需的 idmapd 守护程序。如果没有特殊要求,请将它保留为 localdomain(默认值)。

    单击下一步后,显示的对话框包含两个部分。上半部分包含两列,名为目录绑定装入目标。服务将立即可用。

  3. 单击对话框上半部分中的添加目录以导出您的目录,并单击确定进行确认。

  4. 主机通配符文本字段和选项中输入主机名。

    选项文本字段中,将 fsid=0 纳入以逗号分隔的选项列表中,以将目录配置为伪 root 目录。如果此目录应该绑定到一个已配置的伪 root 目录下的另一个目录,请确保在选项列表中用 bind=/target/path 提供目标绑定路径。

    Bindmount 目标列不可直接编辑,而是概要列出目录及其性质。

  5. 单击完成以完成配置。

29.3.1.2. NFSv3 和 NFSv2 导出

请确保未在初始对话框中选中启用 NFSv4,然后单击下一步

下一个对话框包含两部分。在上面的文本字段中,输入要导出的目录。在下面输入应能访问这些目录的主机。可以为每个主机设置四类主机通配符:单主机(名称或 IP 地址)、网络组、通配符(如 * 表示所有计算机都能访问服务器)和 IP 网络。

图 29.2 “用 NFSv2 和 v3 导出目录”中显示了此对话框。关于这些选项的详细描述,请参见 man exports。单击完成以完成配置。

图 29.2. 用 NFSv2 和 v3 导出目录

用 NFSv2 和 v3 导出目录

29.3.1.3. 并存的 v3 和 v4 导出

NFSv3 和 NFSv4 导出可以在一台服务器上并存。在初始的配置对话框中启用了 NFSv4 之后,选项列表中不包含 fsid=0bind=/target/path 的导出将作为 v3 导出处理。

考虑第 29.3.1.1 节 “为 NFSv4 客户端导出”中的示例。如果添加另一个目录(如 /data2),然后在相应的选项列表中使用添加目录不会提供 fsid=0bind=/target/path,此导出将作为 v3 导出。

[Important]

自动配置防火墙

如果系统上启用了 SuSEfirewall2,并且打开防火墙中的端口处于选中状态,YaST 会通过启用 nfs 服务使防火墙的配置适应 NFS 服务器。

29.3.2. 手动导出文件系统

NFS 导出服务的配置文件是 /etc/exports/etc/sysconfig/nfs。除了这些文件之外,NFSv4 服务器配置还需要 /etc/idmapd.conf。要启动或重启动服务,请运行命令 rcnfsserver restart。如果在 /etc/sysconfig/nfs 中配置了 NFSv4,这还将启动 rpc.idmapd。NFS 服务器依赖于运行的 RPC 端口映射器。所以,还请使用 rcrpcbind restart 启动或重启动端口映射器服务。

29.3.2.1. 用 NFSv4 导出文件系统

NFSv4 是 SUSE Linux Enterprise Server 上可用的最新版 NFS 协议。配置 NFSv4 导出的目录的过程与先前的 NFS 版本略有不同。

29.3.2.1.1. /etc/exports

/etc/exports 文件包含项列表。每个条目表示共享的目录以及共享的方式。/etc/exports 中的条目通常包含:

/shared/directory   host(option_list)

例如:

/export   192.168.1.2(rw,fsid=0,sync,crossmnt)
/export/data   192.168.1.2(rw,bind=/data,sync)

在此,使用 IP 地址 192.168.1.2 标识允许的客户端。您可以使用主机名、表示一组主机的通配符(*.abc.com* 等)或网络组 (@my-hosts)。

指定 fsid=0 的目录是特殊的。它是所导出的文件系统的 root,有时称为伪 root 文件系统。该目录还必须具有 crossmnt,以可以使用 NFSv4 正确操作。通过 NFSv4 导出的所有其他目录必须装入到该点下面。如果要导出不在该导出 root 目录下的目录,则需要将其绑定到导出树中。可以使用 bind= 语法进行该操作。

在上述示例中,/data 不在 /export 下,因此导出 /export/data,并指定 /data 目录应绑定到该名称。目录 /export/data 必须存在,通常应为空。

当从该服务器装入客户端时,应只是装入 servername:/ 而不是 servername:/export。无需同时装入 servername:/data,因为它将在装入 servername:/ 的目录下自动显示。

29.3.2.1.2. /etc/sysconfig/nfs

/etc/sysconfig/nfs 文件包含一些决定 NFSv4 服务器守护程序行为的参数。务必将参数 NFS4_SUPPORT 设置为 yesNFS4_SUPPORT 决定 NFS 服务器是否支持 NFSv4 导出和客户端。

29.3.2.1.3. /etc/idmapd.conf

Linux 计算机上的每个用户都有一个名称和 ID。idmapd 针对服务器的 NFSv4 请求执行名称到 ID 的映射并答复客户端。它必须同时在服务器和客户端上针对 NFSv4 运行,因为 NFSv4 仅将名称用于通讯。

对于可能正在使用 NFS 共享文件系统的计算机,请确保在这些计算机间为用户指定用户名和 ID (uid) 的方式一致。这可以使用 NIS、LDAP 或域中的任何统一的域身份验证机制来实现。

对于客户端和服务器,必须在 /etc/idmapd.conf 文件中将参数 Domain 设为相同值。如果您不确定,请在服务器和客户端文件中将域保留为 localdomain。配置文件样本如下:

[General] 

Verbosity = 0 
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nobody

关于更多参考,请阅读 idmapdidmapd.conf 的手册页:man idmapdman idmapd.conf

29.3.2.1.4. 启动和停止服务

更改 /etc/exports/etc/sysconfig/nfs 后,通过 rcnfsserver restart 启动或重启动 NFS 服务器服务。更改 /etc/idmapd.conf 后,使用 killall -HUP rpc.idmapd 命令重新装载配置文件。

如果 NFS 服务必须在引导时启动,则运行 chkconfig nfsserver on 命令。

29.3.2.2. 用 NFSv2 和 NFSv3 导出文件系统

这部分特定于 NFSv3 和 NFSv2 导出。请参见第 29.3.1.1 节 “为 NFSv4 客户端导出”了解用 NFSv4 导出。

用 NFS 导出文件系统涉及两个配置文件:/etc/exports/etc/sysconfig/nfs。通常,/etc/exports 文件条目的格式如下:

/shared/directory   host(list_of_options)

例如:

/export   192.168.1.2(rw,sync)

其中,目录 /export 是与选项列表为 rw,sync 的主机 192.168.1.2 共享的。该 IP 地址可使用通配符替换为一个或一组客户端名称甚或网络组(如 *.abc.com)。

有关所有选项及其含义的详细说明,请参见 exports 的手册页 (man exports)。

更改 /etc/exports/etc/sysconfig/nfs 后,请用命令 rcnfsserver restart 启动或重启动 NFS 服务器。

29.3.3. 采用 Kerberos 的 NFS

要对 NFS 使用 Kerberos 身份验证,必须启用 GSS 安全性。在初始 YaST NFS 服务器对话框中选择启用 GSS 安全。必须具有一个有效的 Kerberos 服务器才能使用此功能。YaST 不会设置服务器,只是使用所提供的功能。如果希望使用 Kerberos 进行身份验证,则除了 YaST 配置外,还必须首先至少完成以下步骤,才能运行 NFS 配置:

  1. 请确保服务器和客户端都在同一 Kerberos 域中。它们必须访问相同的 KDC(密钥分发中心)服务器并共享其 krb5.keytab 文件(在任何计算机上的默认位置是 /etc/krb5.keytab)。有关 Kerberos 的更多信息,请参见Chapter 6, Network Authentication with Kerberos (↑Security Guide)。

  2. 在客户端上用 rcgssd start 启动 gssd 服务。

  3. 在客户端上用 rcsvcgssd start 启动 svcgssd 服务。

有关配置采用 Kerberos 的 NFS 的更多信息,请参见第 29.5 节 “更多信息” 中的链接。

29.4. 配置客户端

要将主机配置为 NFS 客户端,无需安装其他软件。将默认安装所有需要的包。

29.4.1. 使用 Yast 导入文件系统

授权用户可以用 YaST NFS 客户端模块从 NFS 服务器将 NFS 目录装入本地文件树。按如下所示继续:

过程 29.2. 导入 NFS 目录

  1. 启动 YaST NFS 客户端模块。

  2. 单击 NFS 共享选项卡中的添加。输入 NFS 服务器的主机名、要导入的目录以及用于装入此目录的本地安装点。

  3. 若要使用防火墙并允许从远程计算机访问服务,请启用 NFS 设置选项卡中的打开防火墙中的端口。防火墙状态将显示在复选框旁边。

  4. 使用 NFSv4 时,请确保已选中启用 NFSv4 复选框,并且 NFSv4 域名包含 NFSv4 服务器所用的值。默认域为 localdomain

  5. 单击确定保存更改。

配置写入/etc/fstab,并将装入指定的文件系统。当您稍后启动 YaST 配置客户端时,它还将读取此文件中的现有配置。

29.4.2. 手动导入文件系统

手动从 NFS 服务器导入文件系统的先决条件是运行 RPC 端口映射器。作为 root 用户输入 rcrpcbind start 来启动它。然后就可以使用 mount 将远程文件系统像本地分区那样装入文件系统中:

mount host:remote-pathlocal-path

例如,要从 nfs.example.com 计算机导入用户目录,请使用:

mount nfs.example.com:/home /home

29.4.2.1. 使用自动装入服务

autofs 守护程序可用于自动装入远程文件系统。请在 /etc/auto.master 文件中添加以下条目:

/nfsmounts /etc/auto.nfs

如果 auto.nfs 文件正确填充,/nfsmounts 目录将作为客户端上所有 NFS 装入的 root 目录。选择 auto.nfs 这个名称是为了方便起见,您可以选择任何名称。在 auto.nfs 中为所有 NFS 装入添加条目,如下所示:

localdata -fstype=nfs server1:/data
nfs4mount -fstype=nfs4 server2:/

root 身份运行 rcautofs start 以激活设置。对于此示例,/nfsmounts/localdataserver1/data 目录将通过 NFS 装入,server2/nfsmounts/nfs4mount 将通过 NFSv4 装入。

如果在运行 autofs 服务时编辑 /etc/auto.master 文件,则必须用 rcautofs restart 重启动自动装入程序才能使更改生效。

29.4.2.2. 手动编辑 /etc/fstab

通常,/etc/fstab 中的 NFSv3 装入项如下:

nfs.example.com:/data /local/path nfs rw,noauto 0 0

也可以将 NFSv4 装入添加到 /etc/fstab 文件中。对于这些装入,请在第三列中使用 nfs4 而不是 nfs,并确保在第一列中的 nfs.example.com: 后面用 / 指定远程文件系统。/etc/fstab 中 NFSv4 装入的示例行如下所示:

nfs.example.com:/ /local/pathv4 nfs4 rw,noauto 0 0

noauto 选项可禁止在启动时自动装入文件系统。如果您要手动安装各文件系统,可以缩短只指定安装点的安装命令:

mount /local/path

请注意,如果您没有输入 noauto 选项,系统的初始化脚本将在启动时处理这些文件系统的装入。

29.4.3. 并行 NFS (pNFS)

NFS 是最老的协议之一,开发于上世纪八十年代。因此,如果您要共享小文件,NFS 通常能够满足需求。但是,如果您要传送大文件或有大量的客户端要访问数据,则 NFS 会陷入瓶颈并且严重影响系统性能。这是因为文件迅速变大,而以太网的相关速度没有完全跟上。

当您请求普通 NFS 服务器中的文件时,服务器会查找文件元数据、收集所有数据并通过网络将数据传送到您的客户端。但是,无论文件的大小如何,性能瓶颈都会凸显出来:

  • 如果是小文件,则大部分时间都花在收集元数据上

  • 如果是大文件,则大部分时间花在将数据从服务器传送到客户端上

pNFS 或并行 NFS 则突破了此种限制,因为它将文件系统元数据从数据位置分离出来。因此,pNFS 需要两类服务器:

  • 一个 metadata控制服务器,用于处理所有与数据无关的通讯

  • 一或多个储存服务器,用于储存数据

元数据和储存服务器组成单独一个逻辑 NFS 服务器。当客户端要读取或写入时,元数据服务器会告诉 NFSv4 客户端使用哪个储存服务器访问文件块。客户端可以直接访问该服务器上的数据。

SUSE Linux Enterprise 仅支持在客户端上的 pNFS。

29.4.3.1. 使用 YaST 配置 pNFS 客户端

请执行过程 29.2, “导入 NFS 目录”中所述的步骤,但选中 pNFS (v4.1) 复选框以及可选的 NFSv4 共享。YaST 会执行所有必需的步骤,并且会在文件 /etc/exports 中写入所有必要选项。

29.4.3.2. 手动配置 pNFS 客户端

请参阅第 29.4.2 节 “手动导入文件系统”着手配置。大多数配置通过 NFSv4 服务器完成。对于 pNFS,唯一的区别是将 minorversion 选项和元数据服务器 MDS_服务器添加到您的 mount 命令:

mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT

为方便调试,请更改 /proc 文件系统中的值:

echo 32767 > /proc/sys/sunrpc/nfsd_debug
echo 32767 > /proc/sys/sunrpc/nfs_debug

29.5. 更多信息

除了 exportsnfsmount 的手册页外,还可在 /usr/share/doc/packages/nfsidmap/README 中找到关于配置 NFS 服务器和客户端的信息。有关更多联机文档,请参见以下网站:


SUSE Linux Enterprise Server 管理指南 11 SP4