数字化技能提升教程,数字化时代生存宝典

FreeBSD NFS文件共享

浏览:109

多台服务器需要使用同一批安装包、测试资料或业务文件时,可以通过NFS集中共享目录。客户端挂载后,便能通过本地路径访问服务器上的文件,不必反复复制。本教程使用两台FreeBSD服务器,完成NFS共享、权限配置和读写验证。

一、部署环境

本例使用以下参数:

  • NFS服务端:192.168.10.10
  • NFS客户端:192.168.10.20
  • 服务端共享目录:/srv/nfs/share
  • 客户端挂载目录:/mnt/nfs-share
  • 测试用户:nfsshare
  • 用户UID与组GID:2100
  • 协议:NFSv3,使用TCP传输

请将IP地址替换为实际内网地址。以下管理命令以root身份执行。

本例用于可信局域网,不配置传输加密或强身份认证,不应直接开放到公网。 采用默认身份认证方式时,需要信任客户端及其用户身份管理。

二、准备测试账号

在服务端和客户端分别检查账号、UID和GID是否已经占用:

id nfsshare
getent passwd 2100
getent group 2100

确认名称和编号均未占用后,在两台服务器上分别执行:

pw groupadd nfsshare -g 2100
pw useradd nfsshare -u 2100 -g nfsshare -m -s /bin/sh -w no

这里创建一个无有效登录密码的测试账号,由root使用su执行测试。如果编号已被占用,应选择两端都空闲的编号,不要修改已有业务账号。

核对两端身份:

id nfsshare

本例要求两端UID、GID一致。默认NFS身份映射依据数字身份,不是只比较用户名。

三、创建共享目录

以下操作在服务端执行。

先确认目标路径不是已有业务目录,再创建测试目录并设置权限:

mkdir -p /srv/nfs/share
chown nfsshare:nfsshare /srv/nfs/share
chmod 750 /srv/nfs/share

这里不使用递归权限修改,也不将目录设置为所有用户可写。

编辑共享配置:

vi /etc/exports

加入一行:

/srv/nfs/share 192.168.10.20

该配置仅允许指定客户端挂载,默认以读写方式导出,但实际操作仍受文件权限限制。不要省略客户端地址,否则会扩大允许挂载的范围。 如果同一文件系统已有其他导出规则,应先检查是否存在重复或冲突。

四、启动NFS服务

在服务端设置开机启动:

sysrc rpcbind_enable="YES"
sysrc nfs_server_enable="YES"
sysrc mountd_enable="YES"

首次启动:

service rpcbind start
service nfsd start

启动NFS服务时会联动启动所需的mountd。如果相关服务已经运行,不必重复启动;修改/etc/exports后执行:

service mountd reload

随后检查日志中是否存在配置解析错误:

tail -n 50 /var/log/messages

NFSv3依赖RPC相关服务,不能只检查NFS数据端口。防火墙应仅允许可信客户端访问所需服务,而不是直接向所有来源开放。

五、客户端挂载共享目录

以下操作在客户端执行。

启用客户端支持:

sysrc nfs_client_enable="YES"
service nfsclient start

创建一个空挂载目录:

mkdir -p /mnt/nfs-share

使用NFSv3和TCP挂载:

mount -t nfs -o nfsv3,tcp \
  192.168.10.10:/srv/nfs/share \
  /mnt/nfs-share

检查结果:

mount | grep /mnt/nfs-share
df -h /mnt/nfs-share

挂载后,该目录展示的是远端共享内容。不要把它挂到已有重要文件的目录上,以免原目录内容被挂载临时遮住。

六、验证读写权限

在客户端以测试用户写入文件:

su - nfsshare -c \
  'printf "NFS write test\n" > /mnt/nfs-share/check.txt'

读取文件:

su - nfsshare -c 'cat /mnt/nfs-share/check.txt'

再到服务端检查:

cat /srv/nfs/share/check.txt
ls -ln /srv/nfs/share/check.txt

预期可以看到测试内容,并显示对应的数字属主。

不要使用客户端root写入失败来判断共享不可用。 默认情况下,远端root不会直接保留服务端root权限;本例应使用身份匹配的普通账号验证。

七、配置文件锁支持

如果应用需要跨客户端协调文件锁,应在服务端和客户端都启用相关服务:

sysrc rpcbind_enable="YES"
sysrc rpc_statd_enable="YES"
sysrc rpc_lockd_enable="YES"

启动尚未运行的服务:

service rpcbind start
service statd start
service lockd start

已经运行的服务可以跳过对应启动命令。NFSv3文件锁还涉及客户端与服务端之间的RPC通信,需要同步核对防火墙。不要用仅本地有效的锁代替多客户端共享锁。

八、保存挂载配置

建议先使用手动挂载配置,避免服务器不可达时影响客户端启动。

在客户端的/etc/fstab中加入:

192.168.10.10:/srv/nfs/share /mnt/nfs-share nfs rw,nfsv3,tcp,noauto 0 0

这里的noauto表示开机时不自动挂载。以后需要使用时执行:

mount /mnt/nfs-share

不再使用时,先停止访问共享目录的程序,再卸载:

cd /
umount /mnt/nfs-share

如果后续需要开机挂载,应另外评估网络启动顺序和服务端故障时的等待行为,不建议未经验证直接删除noauto。

九、常见问题

1. 可以挂载,但写入提示权限不足

检查两端UID、GID是否一致,服务端目录是否允许该身份写入,以及导出规则是否设置了-ro。不要直接用chmod 777绕过身份问题。

2. 修改exports后没有生效

执行service mountd reload,再检查/var/log/messages。重新加载命令执行完毕后,仍需确认日志没有配置错误。

3. 服务端断开后,客户端访问目录卡住

默认硬挂载会等待服务端恢复。不要为了消除等待就随意切换软挂载,尤其是有写入需求的共享目录,应先评估应用的数据一致性要求。

十、总结

NFS共享配置建议按“确认账号身份、限制客户端、挂载测试、验证权限”的顺序进行。先在独立目录中完成读写验证,再接入实际业务,并保留服务端备份与故障处理方案。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:
  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。