第十六章 网络文件系统(NFS)
16.1. 为什么使用 NFS?
16.2. 挂载 NFS 文件系统(客户端)
   16.2.1. 使用 /etc/fstab 来挂载 NFS 文件系统
   16.2.2. 使用 autofs 来挂载 NFS 文件系统
16.3. 导出 NFS 文件系统(服务器端)
   16.3.1. 命令行配置
   16.3.2. 主机名格式
   16.3.3. 启动和停止服务器(nfs)
网络文件系统(NFS)是一种在网络上的机器间共享文件的方法,文件如同在客户的本地硬盘一样。Red Hat Linux 既可以是 NFS 服务器也可以是 NFS 客户,它可以把文件系统导出给其它系统,也可以挂载从其它机器导出的文件系统。 
16.1. 为什么使用 NFS?
NFS 对于在同一网络上的多个用户间共享目录很有用途。譬如,一组致力于同一工程项目的用户可以通过使用 NFS 文件系统(通常被称作 NFS 共享)中的一个挂载为 /myproject 的共享目录来存取该工程项目的文件。要存取共享的文件,用户进入各自机器上的 /myproject 目录。这种方法既不用输入口令又不用记忆特殊命令,就仿佛该目录位于用户的本地机器上一样。 
16.2. 挂载 NFS 文件系统 

使用 mount 命令来挂载另一个机器 physics.njnu.edu.cn 上的 NFS 文件系统 /misc/export (本地机器上的挂载点目录 /misc/local 必须存在):

 mount physics.njnu.edu.cn:/misc/export /misc/local 

在这项命令中, physics.njnu.edu.cn 是 NFS 文件服务器的主机名; /misc/export 是 physics 要导出的文件系统; /misc/local 是该文件系统在本地机器上的挂载位置。 mount 命令运行之后(而且如果客户具有来自 shadowman.example.com NFS 服务器的正确权限的话),客户用户可以执行 ls /misc/local 命令来显示 physics.njnu.edu.cn 上的 /misc/export 目录中的文件列表。

16.2.1. 使用 /etc/fstab 来挂载 NFS 文件系统

另一种方法是在 /etc/fstab 文件中添加一行。这一行中必须声明 NFS 服务器的主机名,要导出的目录,以及要挂载 NFS 共享的本地机器目录。你必须是根用户才能修改 /etc/fstab 文件。

/etc/fstab 中每行的一般语法如下所示:

 server:/usr/local/pub    /pub   nfs    rsize=8192,wsize=8192,timeo=14,intr 

挂载点 /pub 在客户机器上必须存在。在客户系统的 /etc/fstab 文件中把这一行添加完毕后,在 shell 提示下键入命令 mount /pub ,以及将会从服务器中挂载的挂载点 /pub 。

top

16.2.2. 使用 autofs 来挂载 NFS 文件系统

第三种方法是使用 autofs。autofs 使用 automount 守护进程来管理你的挂载点,它只在文件系统被访问时才动态地挂载它们。

autofs 咨询主映射配置文件 /etc/auto.master 来决定要定义哪些挂载点。然后,它使用适用于各个挂载点的参数来启动 automount 进程。主映射配置中的每一行都定义一个挂载点,一个分开的映射文件定义在该挂载点下要挂载的文件系统。譬如, /etc/auto.misc 文件可能会定义 /misc 目录中的挂载点;这种关系在 /etc/auto.master 文件中会被定义。

auto.master 文件中的每个项目都有三个字段。第一个字段是挂载点。第二个字段是映射文件的位置,第三个字段可选。第三个字段可以包括超时数值之类的信息。

譬如,要在你的机器上的 /misc/myproject 挂载点上挂载远程机器 physics.njnu.edu.cn 上的 /project52 目录,在 auto.master 文件中添加以下行:

 /misc   /etc/auto.misc --timeout 60 

在 /etc/auto.misc 文件中添加以下行:

 myproject  -rw,soft,intr,rsize=8192,wsize=8192   physics.njnu.edu.cn  :/proj52 

/etc/auto.misc 中的第一个字段是 /misc 子目录的名称。该目录被 automount 动态地创建。它不应该在客户机器上实际存在。第二个字段包括挂载选项,如:rw 代表读写访问权。第三个字段是要导出的 NFS 的位置,包括主机名和目录(目录 /misc 在本地文件系统中必须存在。在本地文件系统的 /misc 目录中不应该有子目录)。

autofs 是一种服务。要启动这项服务,在 shell 提示下,键入以下命令:

 /sbin/service autofs restart 

要查看活跃的挂载点,在 shell 提示下键入以下命令:

 /sbin/service autofs status 

如果你在 autofs 运行时修改了 /etc/auto.master 配置文件,你必须在 shell 提示下键入以下命令来通知 automount 守护进程重新载入配置文件:

 /sbin/service autofs reload 

 top

16.3. 输出 NFS 文件系统

NFS 服务器配置工具可以用来把系统配置成 NFS 服务器,输出目录。要使用 NFS 服务器配置工具,你必须运行 X 窗口系统,具备根特权,并且安装了 redhat-config-nfs RPM 软件包。要启动这个程序,点击面板上的「主菜单」 => 「系统设置」 => 「服务器设置」 => 「NFS 服务器」,或键入 redhat-config-nfs 命令。

要添加 NFS 共享,点击「添加」按钮。如图所示的对话框会出现。

「基本」活页标签要求以下信息:

  • 「目录」 — 指定要共享的目录,如 /tmp 。

  • 「主机」 — 指定要共享目录的主机。

  • 「基本权限」 — 指定目录应该有只读权限还是读写权限。

「常规选项」活页标签允许你配置以下选项:

  • 「允许来自高于 1024 的端口的连接」 — 在号码小于 1024 的端口上启动的服务必须以根用户身份启动。选择这个选项来允许根用户以外的用户来启动 NFS 服务。该选项和 insecure 相对应。

  • 「允许不安全的文件锁定」 — 不需要锁定请求。该选项和 insecure_locks 相对应。

  • 「禁用子树检查」 — 如果某文件系统的子目录被导出,但是整个文件系统没有被导出,服务器会检查所请求的文件是否在导出的子目录中。这种检查叫做子树检查(subtree checking)。选择这个选项来禁用子树检查。如果整个文件系统被导出,选择禁用子树检查可以提高传输率。该选项和 no_subtree_check 相对应。

  • 「按要求同步写操作」 — 默认被启用,该选项不允许服务器在请求被写入磁盘前回复这些请求。该选项和 sync 相对应。如果它没有被选择, async 选项会被使用。

    • 「立即强制同步写操作」 — 不推迟写入磁盘的操作。该选项和 no_wdelay 相对应。

「用户访问」活页标签允许你配置以下选项:

  • 「把远程根用户当作本地根用户」 — 按照默认设置,根用户的用户 ID 和组群 ID 都是 0。根权限压缩(Root squashing)把用户 ID 0 和组群 ID 0 映射为匿名的用户和组群 ID,因此客户上的根用户就不会在 NFS 服务器上具备根特权。如果这个选项被选,根用户就不会被映射为匿名用户,客户上的根用户就会对导出的目录拥有根特权。选择这个选项会大大降低系统的安全性。除非绝对必要,请不要选择它。该选项和 no_root_squash 相对应。

  • 「把所有客户用户当作匿名用户」 — 如果该选项被选,所有用户和组群 ID 都会被映射为匿名用户。该选项和 all_squash 相对应。

    • 「为匿名用户指定本地用户 ID」 — 如果「把所有客户用户当作匿名用户」被选,这个选项会让你为匿名用户指定一个用户 ID。该选项和 corresponds to anonuid 相对应。

    • 「为匿名用户指定本地组群 ID」 — 如果「把所有客户用户当作匿名用户」被选,这个选项会让 你为匿名用户指定一个组群 ID。该选项和 corresponds to anongid 相对应。

要编辑 NFS 共享,从列表中选择它,然后点击「属性」按钮。要删除某个现存 NFS 共享,从列表中选择它,然后点击「删除」按钮。

点击了「确定」来从列表中添加、编辑、或删除某个 NFS 共享后,改变就会立即生效 — 服务器守护进程被重新启动,原有的配置文件被保存为 /etc/exports.bak 。新的配置文件被写入 /etc/exports 。

NFS 服务器配置工具直接读写 /etc/exports 配置文件。因此,这个文件在使用该工具后可以被手工修改;手工修改了该文件后也可以使用这个工具(假定手工修改时使用了正确的语法)。

top

16.3.1. 命令行配置

也可以直接修改配置文件。 /etc/exports 文件控制 NFS 服务器要导出哪些目录。它的格式如下:

  directory   hostname ( options ) 

唯一需要指定的选项是 sync 和 async 之一(建议使用 sync )。如果指定了 sync ,服务器在请求所做的改变被写入磁盘之前就不会回复这些请求。例如:

  /misc/export      speedy.example.com(sync) 

会允许来自 speedy.example.com 的用户使用默认的只读权限来挂载 /misc/export ,但是:

  /misc/export      speedy.example.com(rw,sync) 

将会允许来自 speedy.example.com 的用户使用读写权限来挂载 /misc/export 。

请谨慎处理 /etc/exports 文件中的空格。如果主机名和括号内的选项之间没有空格,这些选项就只应用于这个主机名。如果在主机名和选项之间有空格,这些选项就是全局应用的。例如,请仔细查看以下行:

 /misc/export speedy.example.com(rw,sync)
/misc/export speedy.example.com (rw,sync) 

第一行给来自 speedy.example.com 的用户以读写权限并拒绝所有其他用户。第二行给来自 speedy.example.com 的用户以只读权限(默认设置),并给予所有其他用户以读写权限。

在你每次改变 /etc/exports 的时候,使用以下命令来重新载入配置文件:

 /sbin/service nfs reload 

 top

16.3.2. 主机名格式

主机可以使用以下格式:

  • 单个机器 — 一个全限定域名(能够被服务器解析的),主机名(能够被服务器解析的),或 IP 地址。

  • 使用通配符指定的一系列机器 — 使用“*”或“?”字符来指定字符串匹配。通配符不能被用在 IP 地址中;如果逆向 DNS 查寻失败了,通配符可能碰巧会奏效。当你在全限定域名中指定通配符时,点(.)不包括在 通配符的匹配项目内。例如: *.example.com 包括 one.example.com,但不包括 one.two.example.com.

  • IP 网络 — 使用 a.b.c.d/z ,这里的 a.b.c.d 是网络, z 是子网掩码中的位数(如 192.168.0.0/24)。另一种可以接受的格式是 a.b.c.d/netmask ,这里的 a.b.c.d 是网络, netmask 是子网掩码(如 192.168.100.8/255.255.255.0)。

  • Netgroups — 格式为 @group-name ,这里的 group-name 是 NIS netgroup 的名称。

top

16.3.3. 启动和停止服务器

在导出 NFS 文件系统的服务器上, nfs 服务必须在运行。

使用以下命令来查看 NFS 守护进程的状态:

 /sbin/service nfs status 

使用以下命令来启动 NFS 守护进程:

 /sbin/service nfs start 

使用以下命令来停止 NFS 守护进程:

 /sbin/service nfs stop 

要在引导时启动 nfs 服务,使用以下命令:

 /sbin/chkconfig --level 345 nfs on 

top