28 通过 NFS 共享文件系统 #
网络文件系统 (NFS) 是允许访问服务器上的文件的协议,访问方式与访问本地文件非常相似。
28.1 概述 #
网络文件系统 (NFS) 是久经考验且广泛支持的标准化网络协议,它允许在单独的主机之间共享文件。
网络信息服务 (NIS) 可用于在网络中进行集中式用户管理。将 NFS 和 NIS 结合使用可通过文件和目录权限在网络中进行访问控制。NFS 与 NIS 一起使用时网络面向用户是透明的。
在默认配置中,NFS 完全信任网络,因此会信任连接到可信网络的任何计算机。在可通过物理方式访问 NFS 服务器所信任的任何网络的任何计算机上,任何具有管理员特权的用户都可以访问该服务器提供的所有文件。
在许多情况下,此安全性级别非常适于以下情形:所信任的网络是真正的专用网络,通常局限于单个计算机机柜或机房,并且无法进行未经授权的访问。将整个子网作为一个整体信任的其他情形限制较多,需要更精密的信任机制。为了满足这些情形的需要,NFS 使用 Kerberos 基础架构来支持各种安全性级别。Kerberos 需要 NFSv4(默认使用该协议)。有关细节,请参见Chapter 6, Network Authentication with 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 更适合用于防火墙后的环境。
协议指定为 tools.ietf.org。
- pNFS
并行 NFS,属于 NFSv4 的一种协议扩展。任何 pNFS 客户端都可以直接访问 NFS 服务器上的数据。
从理论上讲,所有导出都可以仅使用 IP 地址来完成。为避免超时,您需要一个有效的 DNS 系统。至少为了日志记录目的也应使用 DNS,因为 mountd 守护程序执行反向查找。
28.2 安装 NFS 服务器 #
默认不会安装 NFS 服务器。要使用 YaST 安装 NFS 服务器,请依次选择
› 、 ,然后启用 部分的 选项。按 安装所需的包。与 NIS 一样,NFS 也是一个客户端/服务器系统。但是,一台计算机可充当这两种角色:它可以通过网络提供文件系统(导出),也可以从其他主机装入文件系统(导入)。
SUSE Linux Enterprise Server 上不支持在导出服务器本地装入 NFS 卷。
28.3 配置 NFS 服务器 #
可通过 YaST 配置 NFS 服务器,也可以手动配置它。NFS 还可与 Kerberos 结合来进行身份验证。
28.3.1 使用 YaST 导出文件系统 #
使用 YaST 将网络中的某台主机转换为 NFS 服务器,此服务器可将目录和文件导出到所有有权访问它的主机或导出到某个组的所有成员。因此,无需在每台主机本地安装应用程序,服务器也能提供应用程序。
要设置此类服务器,请继续执行以下步骤:
启动 YaST 并选择图 28.1 “NFS 服务器配置工具”。系统会提示您安装其他软件。
› ;请参见图 28.1︰ NFS 服务器配置工具 #激活
单选按钮。如果防火墙在您的系统 (SuSEfirewall2) 中处于活动状态,请选中
。YaST 会针对 NFS 服务器更改其配置,方法是启用nfs
服务。选中是否注意:NFSv2。
。如果您停用 NFSv4,YaST 将只支持 NFSv3。有关启用 NFSv2 的信息,请参见如果选择 NFSv4,另外还请输入相应的 NFSv4 域名。
idmapd
守护程序会使用此参数。Kerberos 设置需要该守护程序,当客户端无法处理数字用户名时,也需要使用该守护程序。如果您不运行idmapd
或无任何特殊要求,请将它保留为localdomain
(默认值)。有关idmapd
守护程序的详细信息,请参见/etc/idmapd.conf
。
如果您需要安全访问服务器,请单击
。先决条件是您的域中安装了 Kerberos 并且服务器和客户端都已采用 Kerberos 系统。单击 继续执行下一个配置对话框。单击对话框上半部分中的
以导出您的目录。如果您尚未配置允许的主机,系统会自动弹出另一个对话框及相应的选项,供您输入客户端信息。输入主机通配符(通常您可以保留默认值不变)。
可以为每个主机设置四类主机通配符:单主机(名称或 IP 地址)、网络组、通配符(如
*
表示所有计算机都能访问服务器)和 IP 网络。有关这些选项的更多信息,请参见
exports
手册页。单击
以完成配置。
28.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 是 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
)。有关所有选项及其含义的详细说明,请参见
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
从 SLE 12 SP1 开始,仅当使用 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
命令重启动守护程序,以使更改生效。有关更多信息,请参见
idmapd
和idmapd.conf
的手册页(man idmapd
和man idmapd.conf
)。
28.3.3 采用 Kerberos 的 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。在客户端上运行
systemctl start rpc-gssd.service
启动 gssd 服务。在服务器上运行
systemctl start rpc-svcgssd.service
启动 svcgssd 服务。
要进行 Kerberos 身份验证,也需要在服务器上运行 idmapd
守护程序。有关详细信息,请参见/etc/idmapd.conf
。
有关配置采用 Kerberos 的 NFS 的更多信息,请参见第 28.5 节 “更多信息” 中的链接。
28.4 配置客户端 #
要将主机配置为 NFS 客户端,无需安装其他软件。将默认安装所有需要的包。
28.4.1 使用 Yast 导入文件系统 #
授权用户可以用 YaST NFS 客户端模块从 NFS 服务器将 NFS 目录装入本地文件树。按如下所示继续:
启动 YaST NFS 客户端模块。
单击
选项卡中的 。输入 NFS 服务器的主机名、要导入的目录以及要在本地的哪个装入点装入此目录。使用 NFSv4 时,在
选项卡中选择 。另外, 必须包含 NFSv4 服务器所用的相同值。默认域为localdomain
。要对 NFS 使用 Kerberos 身份验证,必须启用 GSS 安全性。选择
。若要使用防火墙并允许从远程计算机访问服务,请启用
选项卡中的 。防火墙状态将显示在复选框旁边。单击
保存更改。
配置写入/etc/fstab
,并将装入指定的文件系统。当您稍后启动 YaST 配置客户端时,它还将读取此文件中的现有配置。
在通过网络以 NFS 共享形式装入根分区的(无磁盘)系统中,配置可供访问 NFS 共享的网络设备时需保持谨慎。
关闭或重引导系统时,默认的处理顺序是关闭网络连接,然后卸载根分区。对于 NFS 根分区,这种顺序会产生问题,因为在尚未激活与 NFS 共享的网络连接的情况下,根分区无法完全卸载。为防止系统停用相关的网络设备,请按第 16.4.1.2.5 节 “激活网络设备”中所述打开网络设备配置选项卡,然后在 窗格中选择 。
28.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
28.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/localdata
,server1
的 /data
目录将通过 NFS 装入,server2
的 /nfsmounts/nfs4mount
将通过 NFSv4 装入。
如果在 autofs 服务正在运行时编辑了 /etc/auto.master
文件,则必须使用 systemctl restart autofs
重启动自动装载器才能使更改生效。
28.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 脚本将在启动时处理这些文件系统的装入。
28.4.3 并行 NFS (pNFS) #
NFS 是最老的协议之一,开发于上世纪八十年代。因此,如果您要共享小文件,NFS 通常能够满足需求。但是,当您要传送大文件或有大量的客户端要访问数据时,NFS 服务器会成为瓶颈,严重影响系统性能。这是因为文件迅速变大,而以太网的相对速度没有完全跟上这一变化。
当您向普通 NFS 服务器请求文件时,服务器会查找文件元数据、收集所有数据并通过网络将数据传送到您的客户端。但是,无论文件的大小如何,性能瓶颈都会凸显出来:
如果是小文件,则大部分时间都花在收集元数据上。
如果是大文件,则大部分时间花在将数据从服务器传送到客户端上。
pNFS 或并行 NFS 则突破了此种限制,因为它将文件系统元数据从数据位置分离出来。因此,pNFS 需要两类服务器:
一个元数据或控制服务器,用于处理所有非数据通讯
一个或多个储存服务器,用于存放数据
元数据和储存服务器组成单独一个逻辑 NFS 服务器。当客户端要读取或写入时,元数据服务器会告诉 NFSv4 客户端使用哪个储存服务器访问文件块。客户端可以直接访问该服务器上的数据。
SUSE Linux Enterprise Server 仅在客户端上支持 pNFS。
28.4.3.1 使用 YaST 配置 pNFS 客户端 #
请执行过程 28.2 “导入 NFS 目录”中所述的步骤,但选中 复选框以及可选的 。YaST 会执行所有必需的步骤,并且会在文件 /etc/exports
中写入所有必要选项。
28.4.3.2 手动配置 pNFS 客户端 #
请参阅第 28.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_debugtux >
sudo echo 32767 > /proc/sys/sunrpc/nfs_debug
28.5 更多信息 #
除了 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 常见问题)。