摘要
在企业环境中通过网络分发和共享文件系统是一项常见任务。久经验证的网络文件系统 (NFS) 与黄页协议 NIS 协同工作。要使用可以与 LDAP 协同工作并且也可以使用 Kerberos 的更安全协议,请选中 NFSv4。结合使用 pNFS,您可以突破性能瓶颈。
NFS 与 NIS 一起使用时网络面向用户是透明的。利用 NFS,可以通过网络分发任意文件系统。进行适当的设置后,用户将发现自己始终处于同一环境中,而与当前使用的终端无关。
![]() | 需要 DNS 的原因 |
|---|---|
从理论上讲,所有导出都可以仅使用 IP 地址来完成。为避免超时,您需要一个有效的 DNS 系统。至少为了日志记录目的也应使用 DNS,因为 mountd 守护程序执行反向查找。 | |
下面是 YaST 模块中使用的术语。
由 NFS 服务器导出的目录,客户端可将其集成到系统中。
NFS 客户端是通过网络文件系统协议使用来自 NFS 服务器的 NFS 服务的系统。TCP/IP 协议已集成到 Linux 内核中;无需再安装任何其他软件。
NFS 服务器向客户端提供 NFS 服务。运行中的服务器依赖于以下守护程序:nfsd(工作)、idmapd(到 ID 的用户和组名映射,反之亦然)、statd(文件锁定)和 mountd(装入请求)。
并行 NFS,属于 NFSv4 的一种协议扩展。任何 pNFS 客户端都可以直接访问 NFS 服务器上的数据。
NFS 服务器软件不会默认安装。如果您按照第 29.3 节 “配置 NFS 服务器”中的说明配置 NFS 服务器,则系统会自动提示您安装所需的包。或者,使用 YaST 或 zypper 安装包 nfs-kernel-server。
与 NIS 一样,NFS 也是一个客户端/服务器系统。但是,一台计算机可充当这两种角色:它可以通过网络提供文件系统(导出),也可以从其他主机装入文件系统(导入)。
可通过 YaST 配置 NFS 服务器,也可以手动配置它。NFS 还可与 Kerberos 结合来进行身份验证。
使用 YaST 将网络中的某台主机转换为 NFS 服务器,即将目录和文件导出到所有有权访问它的主机的服务器。服务器还可为组的所有成员提供应用程序,而无需在每台主机上本地安装应用程序。
要设置此类服务器,请继续执行以下步骤:
过程 29.1. 设置 NFSv3 服务器¶
启动 YaST 并选择+;请参见图 29.1 “NFS 服务器配置工具”。系统会提示您安装其他软件。
激活单选按钮。
如果防火墙在您的系统 (SuSEfirewall2) 中处于活动状态,请选中。YaST 会针对 NFS 服务器更改其配置,方法是启用 nfs 服务。
请将 复选框保留为禁用状态。
如果您需要安全访问服务器,请单击。先决条件是您的域中安装了 Kerberos 并且服务器和客户端都已采用 Kerberos 系统。单击。
单击对话框上半部分中的以导出您的目录。
如果您尚未配置允许的主机,系统会自动弹出另一个对话框及相应的选项,供您输入客户端信息。输入主机通配符(通常您可以保留默认值不变)。
可以为每个主机设置四类主机通配符:单主机(名称或 IP 地址)、网络组、通配符(如 * 表示所有计算机都能访问服务器)和 IP 网络。
单击以完成配置。
对于固定的 NFSv4 客户端集合,可以导出的目录有两种,一种是作为伪根文件系统的目录,一种是绑定到伪文件系统的某个子目录的目录。此伪文件系统作为基本点,为相同客户端导出的所有文件系统在其下各就各位。对于一个或一组客户端,服务器上只有一个目录可以配置为伪 root 目录以供导出。对于此客户端,通过将它们绑定到伪 root 目录中现有的子目录可以导出多个目录。
例如,假定选择目录 /exports 作为能访问服务器的所有客户端的伪 root 目录。然后将其添加到所导出目录的列表,并确保为此目录输入的选项包含 fsid=0。如果有另一个目录 /data 也需要通过 NFSv4 导出,请将此目录同样添加到该列表。为此输入选项时,请确保 bind=/exports/data 在列表中,并且 /exports/data 已经是 /exports 的现有子目录。选项 bind=/target/path 中的任何更改(添加、删除或更改值)都会反映在 中。
要将服务器设置为导出 NFSv4 客户端目录,请使用过程 29.1, “设置 NFSv3 服务器”中的一般指南,但以下步骤需要更改:
在第一个对话框中,选中。
在第一个对话框中输入适当的 NFSv4 域名。
请确保名称与访问此特定服务器的任何 NFSv4 客户端的 /etc/idmapd.conf 文件中的名称相同。此参数用于(服务器和客户端上)NFSv4 支持所需的 idmapd 守护程序。如果没有特殊要求,请将它保留为 localdomain(默认值)。
单击后,显示的对话框包含两个部分。上半部分包含两列,名为和。服务将立即可用。
单击对话框上半部分中的以导出您的目录,并单击进行确认。
在文本字段和选项中输入主机名。
在文本字段中,将 fsid=0 纳入以逗号分隔的选项列表中,以将目录配置为伪 root 目录。如果此目录应该绑定到一个已配置的伪 root 目录下的另一个目录,请确保在选项列表中用 bind=/target/path 提供目标绑定路径。
列不可直接编辑,而是概要列出目录及其性质。
单击以完成配置。
请确保未在初始对话框中选中,然后单击。
下一个对话框包含两部分。在上面的文本字段中,输入要导出的目录。在下面输入应能访问这些目录的主机。可以为每个主机设置四类主机通配符:单主机(名称或 IP 地址)、网络组、通配符(如 * 表示所有计算机都能访问服务器)和 IP 网络。
图 29.2 “用 NFSv2 和 v3 导出目录”中显示了此对话框。关于这些选项的详细描述,请参见 man exports。单击以完成配置。
NFSv3 和 NFSv4 导出可以在一台服务器上并存。在初始的配置对话框中启用了 NFSv4 之后,选项列表中不包含 fsid=0 和 bind=/target/path 的导出将作为 v3 导出处理。
考虑第 29.3.1.1 节 “为 NFSv4 客户端导出”中的示例。如果添加另一个目录(如 /data2),然后在相应的选项列表中使用不会提供 fsid=0 或 bind=/target/path,此导出将作为 v3 导出。
![]() | |
自动配置防火墙
如果系统上启用了 SuSEfirewall2,并且 | |
NFS 导出服务的配置文件是 /etc/exports 和 /etc/sysconfig/nfs。除了这些文件之外,NFSv4 服务器配置还需要 /etc/idmapd.conf。要启动或重启动服务,请运行命令 rcnfsserver restart。如果在 /etc/sysconfig/nfs 中配置了 NFSv4,这还将启动 rpc.idmapd。NFS 服务器依赖于运行的 RPC 端口映射器。所以,还请使用 rcrpcbind restart 启动或重启动端口映射器服务。
NFSv4 是 SUSE Linux Enterprise Server 上可用的最新版 NFS 协议。配置 NFSv4 导出的目录的过程与先前的 NFS 版本略有不同。
/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:/ 的目录下自动显示。
/etc/sysconfig/nfs 文件包含一些决定 NFSv4 服务器守护程序行为的参数。务必将参数 NFS4_SUPPORT 设置为 yes。NFS4_SUPPORT 决定 NFS 服务器是否支持 NFSv4 导出和客户端。
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
关于更多参考,请阅读 idmapd 和 idmapd.conf 的手册页:man idmapd 和 man idmapd.conf。
更改 /etc/exports 或 /etc/sysconfig/nfs 后,通过 rcnfsserver restart 启动或重启动 NFS 服务器服务。更改 /etc/idmapd.conf 后,使用 killall -HUP rpc.idmapd 命令重新装载配置文件。
如果 NFS 服务必须在引导时启动,则运行 chkconfig nfsserver on 命令。
这部分特定于 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 服务器。
要对 NFS 使用 Kerberos 身份验证,必须启用 GSS 安全性。在初始 YaST NFS 服务器对话框中选择。必须具有一个有效的 Kerberos 服务器才能使用此功能。YaST 不会设置服务器,只是使用所提供的功能。如果希望使用 Kerberos 进行身份验证,则除了 YaST 配置外,还必须首先至少完成以下步骤,才能运行 NFS 配置:
请确保服务器和客户端都在同一 Kerberos 域中。它们必须访问相同的 KDC(密钥分发中心)服务器并共享其 krb5.keytab 文件(在任何计算机上的默认位置是 /etc/krb5.keytab)。有关 Kerberos 的更多信息,请参见Chapter 6, Network Authentication with Kerberos (↑Security Guide)。
在客户端上用 rcgssd start 启动 gssd 服务。
在客户端上用 rcsvcgssd start 启动 svcgssd 服务。
有关配置采用 Kerberos 的 NFS 的更多信息,请参见第 29.5 节 “更多信息” 中的链接。
要将主机配置为 NFS 客户端,无需安装其他软件。将默认安装所有需要的包。
授权用户可以用 YaST NFS 客户端模块从 NFS 服务器将 NFS 目录装入本地文件树。按如下所示继续:
过程 29.2. 导入 NFS 目录¶
启动 YaST NFS 客户端模块。
单击 选项卡中的。输入 NFS 服务器的主机名、要导入的目录以及用于装入此目录的本地安装点。
若要使用防火墙并允许从远程计算机访问服务,请启用 选项卡中的。防火墙状态将显示在复选框旁边。
使用 NFSv4 时,请确保已选中 复选框,并且 包含 NFSv4 服务器所用的值。默认域为 localdomain。
单击保存更改。
配置写入/etc/fstab,并将装入指定的文件系统。当您稍后启动 YaST 配置客户端时,它还将读取此文件中的现有配置。
手动从 NFS 服务器导入文件系统的先决条件是运行 RPC 端口映射器。作为 root 用户输入 rcrpcbind start 来启动它。然后就可以使用 mount 将远程文件系统像本地分区那样装入文件系统中:
mounthost:remote-pathlocal-path
例如,要从 nfs.example.com 计算机导入用户目录,请使用:
mount nfs.example.com:/home /home
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/localdata,server1 的 /data 目录将通过 NFS 装入,server2 的 /nfsmounts/nfs4mount 将通过 NFSv4 装入。
如果在运行 autofs 服务时编辑 /etc/auto.master 文件,则必须用 rcautofs restart 重启动自动装入程序才能使更改生效。
/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 选项,系统的初始化脚本将在启动时处理这些文件系统的装入。
NFS 是最老的协议之一,开发于上世纪八十年代。因此,如果您要共享小文件,NFS 通常能够满足需求。但是,如果您要传送大文件或有大量的客户端要访问数据,则 NFS 会陷入瓶颈并且严重影响系统性能。这是因为文件迅速变大,而以太网的相关速度没有完全跟上。
当您请求“普通” NFS 服务器中的文件时,服务器会查找文件元数据、收集所有数据并通过网络将数据传送到您的客户端。但是,无论文件的大小如何,性能瓶颈都会凸显出来:
如果是小文件,则大部分时间都花在收集元数据上
如果是大文件,则大部分时间花在将数据从服务器传送到客户端上
pNFS 或并行 NFS 则突破了此种限制,因为它将文件系统元数据从数据位置分离出来。因此,pNFS 需要两类服务器:
一个 metadata 或控制服务器,用于处理所有与数据无关的通讯
一或多个储存服务器,用于储存数据
元数据和储存服务器组成单独一个逻辑 NFS 服务器。当客户端要读取或写入时,元数据服务器会告诉 NFSv4 客户端使用哪个储存服务器访问文件块。客户端可以直接访问该服务器上的数据。
SUSE Linux Enterprise 仅支持在客户端上的 pNFS。
请执行过程 29.2, “导入 NFS 目录”中所述的步骤,但选中 复选框以及可选的 。YaST 会执行所有必需的步骤,并且会在文件 /etc/exports 中写入所有必要选项。
请参阅第 29.4.2 节 “手动导入文件系统”着手配置。大多数配置通过 NFSv4 服务器完成。对于 pNFS,唯一的区别是将 minorversion 选项和元数据服务器 MDS_服务器添加到您的 mount 命令:
mount -t nfs4 -o minorversion=1MDS_SERVERMOUNTPOINT
为方便调试,请更改 /proc 文件系统中的值:
echo 32767 > /proc/sys/sunrpc/nfsd_debug echo 32767 > /proc/sys/sunrpc/nfs_debug
除了 exports、nfs 和 mount 的手册页外,还可在 /usr/share/doc/packages/nfsidmap/README 中找到关于配置 NFS 服务器和客户端的信息。有关更多联机文档,请参见以下网站:
在 SourceForge 上联机查找详细的技术文档。
关于设置采用 Kerberos 的 NFS 的描述,请参见 NFS Version 4 Open Source Reference Implementation。
如果您对 NFSv4 有疑问,请参考 Linux NFSv4 FAQ(Linux NFSv4 常见问题)。