跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 服务 / 通过 NFS 共享文件系统
适用范围 SUSE Linux Enterprise Server 15 SP2

33 通过 NFS 共享文件系统

网络文件系统 (NFS) 是允许访问服务器上的文件的协议,访问方式与访问本地文件相似。

SUSE Linux Enterprise Server SP1 会安装 NFS v4.2,后者引入了对稀疏文件、文件预分配、服务器端克隆和复制、应用程序数据块 (ADB) 和用于强制性访问控制 (MAC) 的带标签 NFS(客户端和服务器上均需要 MAC)的支持。

33.1 概述

网络文件系统 (NFS) 是久经考验且广泛支持的标准化网络协议,它允许在单独的主机之间共享文件。

网络信息服务 (NIS) 可用于在网络中进行集中式用户管理。将 NFS 和 NIS 结合使用可通过文件和目录权限在网络中进行访问控制。NFS 与 NIS 一起使用时网络面向用户是透明的。

在默认配置中,NFS 完全信任网络,因此会信任连接到可信网络的任何计算机。在可通过物理方式访问 NFS 服务器所信任的任何网络的任何计算机上,任何具有管理员特权的用户都可以访问该服务器提供的所有文件。

一般而言,此安全性级别非常适于以下情形:所信任的网络是真正的专用网络,通常局限于单个计算机机柜或机房,并且无法进行未经授权的访问。将整个子网作为一个整体信任的其他情形限制较多,需要更精密的信任机制。为了满足这些情形的需要,NFS 使用 Kerberos 基础架构来支持各种安全性级别。Kerberos 需要 NFSv4(默认使用该协议)。有关细节,请参见第 6 章 “使用 Kerberos 进行网络身份验证

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

导出

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

NFS 客户端

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

NFS 服务器

NFS 服务器向客户端提供 NFS 服务。运行中的服务器依赖于以下守护程序:nfsd (worker)、idmapd(用于 NFSv4 的 ID 到名称映射,仅在某些场景下需要)、statd(文件锁定)和 mountd(装入请求)。

NFSv3

NFSv3 是版本 3 实施,支持客户端身份验证的旧版无状态 NFS。

NFSv4

NFSv4 是新的版本 4 实施,支持通过 Kerberos 进行安全用户身份验证。NFSv4 只需要一个端口,因此,它比 NFSv3 更适合用于防火墙后的环境。

协议指定为 http://tools.ietf.org/html/rfc3530

pNFS

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

重要
重要:需要 DNS 的原因

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

33.2 安装 NFS 服务器

默认不会安装 NFS 服务器。要使用 YaST 安装 NFS 服务器,请依次选择软件 › 软件管理模式,然后启用服务器功能部分的文件服务器选项。单击接受安装所需包。

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

注意
注意:在导出服务器上本地装入 NFS 卷

SUSE Linux Enterprise Server 上不支持在导出服务器本地装入 NFS 卷。

33.3 配置 NFS 服务器

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

33.3.1 使用 YaST 导出文件系统

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

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

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

    NFS 服务器配置工具
    图 33.1︰ NFS 服务器配置工具
  2. 单击启动单选按钮。

  3. 如果 firewalld 在系统上处于活动状态,请单独为 NFS 配置 firewalld(请参见第 19.4 节 “firewalld)。YaST 尚不完全支持 firewalld,因此请忽略“防火墙不可配置”讯息并继续。

  4. 选中是否启用 NFSv4。如果您停用 NFSv4,YaST 将只支持 NFSv3。有关启用 NFSv2 的信息,请参见注意:NFSv2

    1. 如果选择 NFSv4,另外还请输入相应的 NFSv4 域名。idmapd 守护程序会使用此参数。Kerberos 设置需要该守护程序,当客户端无法处理数字用户名时,也需要使用该守护程序。如果您不运行 idmapd 或无任何特殊要求,请将它保留为 localdomain(默认值)。有关 idmapd 守护程序的详细信息,请参见 /etc/idmapd.conf

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

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

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

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

    有关这些选项的更多信息,请参见 exports 手册页。

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

33.3.2 手动导出文件系统

NFS 导出服务的配置文件是 /etc/exports/etc/sysconfig/nfs。如果 NFSv4 服务器配置包含经过 Kerberos 身份验证的 NFS,或者客户端不能使用数字用户名,则除了这些文件外,还需要 /etc/idmapd.conf

要启动或重启动服务,请运行命令 systemctl restart nfsserver。此命令还会将 NFS 服务器必需的 RPC portmapper 重启动。

为确保 NFS 服务器始终在引导时启动,请运行 sudo systemctl enable nfsserver

注意
注意:NFSv4

NFSv4 是 SUSE Linux Enterprise Server 上可用的最新版 NFS 协议。现在,通过 NFSv4 导出所用的配置目录与通过 NFSv3 导出所用的目录相同。

SUSE Linux Enterprise Server 11 上,必须在 /etc/exports 中指定绑定装入。该设置仍然受支持,但现在已弃用。

/etc/exports

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

/SHARED/DIRECTORY   HOST(OPTION_LIST)

例如:

/export/data   192.168.1.2(rw,sync)

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

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

如果您在 NFS 服务器运行时修改了 /etc/exports,则需使用 sudo systemctl restart nfsserver 命令重启动 NFS 服务器,以使更改生效。

/etc/sysconfig/nfs

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

如果您在 NFS 服务器运行时修改了 /etc/sysconfig/nfs,则需使用 sudo systemctl restart nfsserver 命令重启动 NFS 服务器,以使更改生效。

提示
提示:装入选项

SUSE Linux Enterprise Server 11 上,必须在 /etc/exports 中指定 --bind 装入。该设置仍然受支持,但现在已弃用。现在,通过 NFSv4 导出所用的配置目录与通过 NFSv3 导出所用的目录相同。

注意
注意:NFSv2

如果 NFS 客户端仍依赖于 NFSv2,请在服务器的 /etc/sysconfig/nfs 中设置以下几项启用该协议:

NFSD_OPTIONS="-V2"
MOUNTD_OPTIONS="-V2"

重启动服务后,请使用以下命令检查版本 2 是否可用:

tux > cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
/etc/idmapd.conf

仅当使用 Kerberos 身份验证或客户端不能使用数字用户名时,才需要 idmapd 守护程序。自 Linux 内核 2.6.39 起,Linux 客户端可以使用数字用户名。idmapd 守护程序会将发送到服务器的 NFSv4 请求进行名称到 ID 的映射,并答复客户端。

如果需要,idmapd 需在 NFSv4 服务器上运行。客户端上的名称到 ID 映射将由以下包提供的 nfsidmap 来执行: nfs-client

对于可能使用 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 守护程序,请运行 systemctl start nfs-idmapd。如果您在守护程序运行时修改了 /etc/idmapd.conf,则需使用 systemctl start nfs-idmapd 命令重启动守护程序,以使更改生效。

有关更多信息,请参见 idmapdidmapd.conf 的手册页(man idmapdman idmapd.conf)。

33.3.3 采用 Kerberos 的 NFS

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

  1. 请确保服务器和客户端都在同一 Kerberos 域中。它们必须访问相同的 KDC(密钥分发中心)服务器并共享其 krb5.keytab 文件(在任何计算机上的默认位置是 /etc/krb5.keytab)。有关 Kerberos 的更多信息,请参见第 6 章 “使用 Kerberos 进行网络身份验证

  2. 在客户端上运行 systemctl start rpc-gssd.service 启动 gssd 服务。

  3. 在服务器上运行 systemctl start rpc-svcgssd.service 启动 svcgssd 服务。

要进行 Kerberos 身份验证,也需要在服务器上运行 idmapd 守护程序。有关详细信息,请参见/etc/idmapd.conf

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

33.4 配置客户端

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

33.4.1 使用 Yast 导入文件系统

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

过程 33.2︰ 导入 NFS 目录
  1. 启动 YaST NFS 客户端模块。

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

  3. 使用 NFSv4 时,在 NFS 设置选项卡中选择启用 NFSv4。另外,NFSv4 域名必须包含 NFSv4 服务器所用的相同值。默认域为 localdomain

  4. 要对 NFS 使用 Kerberos 身份验证,必须启用 GSS 安全性。选择启用 GSS 安全

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

  6. 单击确定保存更改。

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

提示
提示:NFS 用作根文件系统

在通过网络以 NFS 共享形式装入根分区的(无磁盘)系统中,配置可用来访问 NFS 共享的网络设备时需特别小心。

关闭或重引导系统时,默认的处理顺序是关闭网络连接,然后卸载根分区。对于 NFS 根分区,这种顺序会产生问题,因为在尚未激活与 NFS 共享的网络连接的情况下,根分区无法完全卸载。为防止系统停用相关的网络设备,请按第 19.4.1.2.5 节 “激活网络设备”中所述打开网络设备配置选项卡,然后在设备激活窗格中选择通过 NFSroot

33.4.2 手动导入文件系统

手动从 NFS 服务器导入文件系统的先决条件是运行 RPC 端口映射器。nfs 服务负责正确启动该程序;因此,请以 root 身份输入 systemctl start nfs 来启动该服务。然后就可以使用 mount 将远程文件系统像本地分区那样装入文件系统中:

tux > sudo mount HOST:REMOTE-PATHLOCAL-PATH

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

tux > sudo mount nfs.example.com:/home /home

33.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 身份运行 systemctl start autofs 来激活该设置。对于此示例,/nfsmounts/localdataserver1/data 目录将通过 NFS 装入,server2/nfsmounts/nfs4mount 将通过 NFSv4 装入。

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

33.4.2.2 手动编辑 /etc/fstab

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

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

对于 NFSv4 装入,请在第三列中使用 nfs4 而不是 nfs

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

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

tux > sudo mount /local/path
注意
注意:启动时装入

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

33.4.3 并行 NFS (pNFS)

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

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

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

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

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

  • 一个元数据控制服务器,用于处理所有非数据通讯

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

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

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

33.4.3.1 使用 YaST 配置 pNFS 客户端

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

33.4.3.2 手动配置 pNFS 客户端

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

tux > sudo mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT

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

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

33.5 更多信息

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