FreeBSD NFS文件共享
多台服务器需要使用同一批安装包、测试资料或业务文件时,可以通过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
- 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
- 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。