Skip to content

23.3 NFS 服务器

23.3.1 NFS 概述

NFS(Network File System,网络文件系统)最初由 Sun Microsystems 于 1984 年开发,是一种分布式文件系统协议,允许远程服务器共享文件目录。

NFS 采用远程过程调用(Remote Procedure Call,RPC)机制实现透明文件访问,客户端访问远程文件与访问本地文件系统无异。

23.3.2 共享目录配置

配置 NFS 服务器需编辑 /etc/exports 文件,添加以下内容:

ini
/usr/home/logs -alldirs 192.168.5.15

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

23.3.3 文件结构

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

23.3.4 服务启动配置

完成共享目录的配置后,需设置并启动相关服务。

  • /etc/rc.conf 文件中加入:
ini
rpcbind_enable="YES"      # 启用 RPC 服务以支持 NFS
nfs_server_enable="YES"   # 启用 NFS 服务
mountd_enable="YES"       # 启用 NFS 挂载守护进程
  • 启动 NFS 服务:
sh
# service nfsd start
  • 重新加载 NFS 挂载守护进程的配置:
sh
# service mountd reload
  • 在已配置的客户端上,启用 NFS 客户端服务:
sh
# sysrc nfs_client_enable="YES"

23.3.5 客户端挂载

挂载前可用 showmount -e server 查看服务器已导出的 NFS 共享列表。将远程服务器 server/usr/home/logs 目录挂载到本地默认挂载点 /mnt

sh
# showmount -e server
# mount server:/usr/home/logs /mnt

23.3.6 故障排除与未竟事宜

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

技巧

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

sh
mount.nfs: access denied by server while mounting

此处的 access denied 并非用户权限问题,而是 NFS 服务端拒绝了挂载请求,根本原因在于服务端配置不正确。

查看系统日志内容:

sh
# cat /var/log/messages

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

sh
bad exports list line '/home/logs': symbolic link in export path or statfs failed

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

/etc/exports 文件中的

ini
/home/logs -alldirs 192.168.5.15

替换为:

ini
/usr/home/logs -alldirs 192.168.5.15

该配置将本地 /usr/home/logs 目录及子目录共享至远程主机 192.168.5.15

  • 重新加载 NFS 挂载守护进程的配置:
sh
# service mountd reload
  • 在客户端上执行以下命令,先用 showmount -e server 确认服务端已导出共享,再将远程服务器 server/usr/home/logs 目录挂载到本地默认挂载点 /mnt
sh
# showmount -e server
# mount server:/usr/home/logs /mnt

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

23.3.7 参考文献