一、NFS 基础概念
1. 定义
NFS(Network File System,网络文件系统),基于 TCP/IP 协议,由 Sun 公司开发,作用: 把远端服务器的目录挂载到本地客户端,客户端使用远程文件和本地硬盘文件体验完全一致,属于文件级共享存储。
2. 核心特点
- 跨 Linux/Unix 系统共享文件,Windows 需额外客户端软件;
- 服务端管控权限、数据存储,客户端只做挂载访问;
- 默认端口随机,依赖 RPC 服务协调端口映射;
- 适合内网局域网使用,公网不安全;
- 无加密、原生权限管控偏弱,常结合防火墙 + 内网使用。
3. 工作架构(C/S 架构)
- NFS 服务端:存放共享数据,导出共享目录
- NFS 客户端:挂载服务端共享目录,读写文件
二、依赖核心组件:RPC(远程过程调用)
NFS 本身不会固定监听端口,依靠 RPC 来分配端口:
- rpcbind(CentOS7+/Ubuntu 新版):旧版叫 portmap
- 默认端口:111(TCP/UDP)
- 作用:统一管理 NFS 各模块端口,客户端先连 111 查询 NFS 工作端口,再建立数据传输;
- NFS 启动顺序:先启动 rpcbind → 再启动 nfs 服务。
NFS 主要进程(服务端)
表格
| 进程 | 作用 |
|---|---|
| nfsd | NFS 主服务进程,负责文件读写请求 |
| mountd | 挂载守护进程,校验客户端挂载权限 |
| rpc.lockd | 文件锁机制,防止多客户端同时修改同一文件冲突 |
| rpc.statd | 状态监控,服务器宕机后恢复文件锁 |
三、NFS 配置文件与共享语法
1. 主配置文件
路径:/etc/exports 语法格式:
共享目录 客户端地址(权限参数)
示例:
/data/nfs 192.168.1.0/24(rw,sync,no_root_squash)
2. 客户端地址写法
- 单个 IP:192.168.1.100
- 网段:192.168.1.0/24
- 所有主机:*
3. 常用权限参数(重点)
读写权限
rw:可读可写ro:只读
同步 / 异步
sync:同步写入,数据写完才返回成功,安全、速度慢(推荐生产)async:异步写入,先放缓存即刻返回,速度快、断电易丢数据
root 用户映射(最关键权限)
root_squash(默认开启) 客户端 root 用户访问时,会被压缩映射为服务端匿名用户nfsnobody,防止客户端 root 篡改服务器文件,安全默认配置no_root_squash客户端 root 保持 root 权限,权限极大,内网信任环境才使用,生产谨慎开启
匿名用户设定
all_squash:所有客户端普通用户都压缩为匿名用户 nfsnobodyanonuid=xxx/anongid=xxx:自定义匿名用户 UID/GID
其他参数
no_subtree_check:关闭子树校验,挂载目录包含子目录时提升兼容性insecure:允许客户端使用大于 1024 的端口挂载
四、NFS 服务端部署流程(CentOS7/8/9)
- 安装软件
yum install nfs-utils rpcbind -y
- 创建共享目录,设置权限
mkdir -p /data/nfs
chmod 755 /data/nfs
# 如需写入权限:修改属主为nfsnobody
chown nfsnobody:nfsnobody /data/nfs
- 编辑
/etc/exports写入共享规则 - 启动服务(顺序不能颠倒)
systemctl start rpcbind
systemctl start nfs-server
# 开机自启
systemctl enable rpcbind nfs-server
- 重载配置(修改 exports 后无需重启服务)
-r reexport
exportfs -r
五、常用查看命令
服务端命令
exportfs -v:查看本机所有 NFS 共享列表及参数showmount -e 本机IP:对外展示共享目录 -e exportexportfs -au:全部取消共享exportfs -av:重新发布所有共享
客户端命令
showmount -e NFS服务端IP:查询服务器可挂载目录 示例:showmount -e 192.168.1.20
六、客户端挂载 NFS
1. 临时挂载(重启失效)
mount -t nfs 服务端IP:/共享目录 本地挂载点
# 示例
mount -t nfs 192.168.1.20:/data/nfs /mnt/nfs
指定参数挂载:
mount -t nfs -o sync,ro 192.168.1.20:/data/nfs /mnt/nfs
2. 永久挂载(开机自动挂载)
编辑 /etc/fstab 格式:
服务端IP:/共享目录 本地挂载点 nfs 挂载参数 0 0
示例:
192.168.1.20:/data/nfs /mnt/nfs nfs defaults,sync 0 0
生效:mount -a
3. 卸载挂载
umount /mnt/nfs
# 繁忙无法卸载强制卸载
umount -lf /mnt/nfs
七、NFS 权限原理(极易踩坑)
NFS 权限由两层共同决定:
/etc/exports里的共享权限(rw/ro)- 服务端共享目录本身的本地文件系统权限(rwx、属主属组)
举例: exports 设置 rw,但是服务器 /data/nfs 权限 700,属主 root;客户端普通用户依然无法写入; 原因:客户端用户映射成 nfsnobody,没有目录写入权限。

505

被折叠的 条评论
为什么被折叠?



