16.8 NFS 服务器

NFS 概述

NFS(Network File System,网络文件系统)最初由 Sun Microsystems 于 1984 年开发,是一种用于在不同操作系统之间共享文件的分布式文件系统协议。NFS 采用远程过程调用(Remote Procedure Call,RPC)机制实现透明的文件访问,使客户端能够像访问本地文件系统一样访问远程服务器上的文件。其设计目标是实现异构系统间的文件共享,无需考虑底层操作系统差异。

共享目录配置

配置 NFS 服务器首先需要编辑 /etc/exports 文件,按照手册页的指示,添加一行内容:

/usr/home/logs -alldirs 192.168.5.15

该配置会将本地 /usr/home/logs 目录及其所有子目录共享给远程主机 192.168.5.15,对应的目录可在远程挂载访问。

/
├── etc
   ├── exports         # NFS 共享目录配置文件
   └── rc.conf         # 系统启动配置文件
├── usr
   └── home
       └── logs        # NFS 共享目录
├── mnt                 # NFS 客户端默认挂载点
└── var
    └── log
        └── messages    # 系统日志文件

服务启动配置

配置好共享目录后,接下来需要设置并启动相关服务,确保 NFS 服务能够正常运行。

  • /etc/rc.conf 中加入:

  • 启动 NFS 服务:

  • 重新加载 NFS 挂载守护进程的配置:

  • 在之前配置的客户端上,启用 NFS 客户端服务:

客户端挂载

将远程服务器 server/usr/home/logs 目录挂载到本地默认挂载点 /mnt

故障排除与未竟事宜

共享目录使用了软链接导致错误

技巧

在新版 FreeBSD(14.0-RELEASE 及以上)中,/home 不再是arrow-up-right 指向 /usr/home 的软链接,该提交修改了默认目录结构,此问题已不复存在。

这里的 access denied 并非用户权限问题,而是挂载请求被 NFS 服务端拒绝,真正的问题出在服务端配置不正确。

查看系统日志内容:

在系统日志中显示如下记录:

该记录表明问题原因在于 /home/logs 路径中存在软链接,因此无法共享。在 FreeBSD 中,/home 曾是指向 /usr/home 的软链接,这与部分 Linux 发行版的行为不同。

然后将 /etc/exports 文件中的

替换如下(将本地 /usr/home/logs 目录及子目录同步到远程主机 192.168.5.15):

  • 重新加载 NFS 挂载守护进程的配置:

  • 回到客户端上,运行如下命令挂载远程服务器 server 的 /usr/home/logs 目录到本地默认挂载点 /mnt

此时远程目录已成功挂载到本地挂载点 /mnt

参考文献

课后习题

  1. 在 FreeBSD 上配置 NFSv4 服务,启用 Kerberos 认证,创建测试共享目录并验证客户端可安全挂载访问。

  2. 分析 NFS 的 RPC 机制与远程过程调用设计,查看其服务发现与请求路由方式。

  3. 修改 NFS 的默认导出配置,添加 root_squash 与 no_root_squash 的对比测试,验证行为变化。

最后更新于