NFS 网络文件系统配置指南 NFS(Network File System)是一种分布式文件系统协议,允许客户端通过网络访问服务器上的文件。本文档介绍如何在现代 Linux 发行版上配置 NFS 服务。
📋 前置要求 支持的 Linux 发行版 CentOS/Rocky Linux/AlmaLinux 8+ Ubuntu 20.04+ Debian 11+ 网络要求 服务器和客户端需要在同一网络或可路由的网络中 确保防火墙允许 NFS 相关端口(见下方防火墙配置) 🔧 服务器端配置 1. 安装 NFS 服务 CentOS/Rocky Linux/AlmaLinux 8+:
1 2 3 4 sudo dnf install -y nfs-utilssudo yum install -y nfs-utils
Ubuntu/Debian:
1 2 sudo apt updatesudo apt install -y nfs-kernel-server
2. 创建共享目录 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo mkdir -p /mnt/data/nfs_datasudo mkdir -p /mnt/data/nfs_data/mysqlsudo chown -R nfsnobody:nfsnobody /mnt/data/nfs_data/mysqlsudo chown -R 1000:1000 /mnt/data/nfs_data/mysqlsudo chmod -R 755 /mnt/data/nfs_data
3. 配置 NFS 导出 编辑 /etc/exports 文件:
添加导出配置:
1 2 3 4 5 6 7 8 9 10 # 基本格式:共享目录 客户端IP/网段(选项) # 示例:允许整个子网访问 /mnt/data/nfs_data/mysql 192.168.3.0/24(rw,sync,no_subtree_check,no_root_squash) # 多个客户端配置示例 /mnt/data/nfs_data/mysql 192.168.3.10(rw,sync,no_subtree_check) \ 192.168.3.20(ro,sync,no_subtree_check) # 允许所有客户端(不推荐用于生产环境) # /mnt/data/nfs_data/mysql *(rw,sync,no_subtree_check)
常用选项说明:
rw: 读写权限ro: 只读权限sync: 同步写入(更安全,但性能较低)async: 异步写入(性能更好,但数据安全性较低)no_subtree_check: 禁用子树检查(提高性能)no_root_squash: 允许 root 用户保持 root 权限(谨慎使用)root_squash: 将 root 用户映射为匿名用户(更安全,默认)all_squash: 将所有用户映射为匿名用户4. 重新加载 NFS 配置 1 2 3 4 5 sudo exportfs -rasudo exportfs -v
5. 启动并启用服务 CentOS/Rocky Linux/AlmaLinux:
1 2 3 4 5 6 7 8 9 10 11 sudo systemctl start rpcbindsudo systemctl start nfs-serversudo systemctl start nfs-locksudo systemctl start nfs-idmapsudo systemctl enable rpcbindsudo systemctl enable nfs-serversudo systemctl enable nfs-locksudo systemctl enable nfs-idmap
Ubuntu/Debian:
1 2 3 4 5 sudo systemctl start nfs-kernel-serversudo systemctl enable nfs-kernel-server
6. 配置防火墙 firewalld (CentOS/Rocky Linux):
1 2 3 4 sudo firewall-cmd --permanent --add-service=nfssudo firewall-cmd --permanent --add-service=rpc-bindsudo firewall-cmd --permanent --add-service=mountdsudo firewall-cmd --reload
ufw (Ubuntu):
1 2 3 4 5 sudo ufw allow from 192.168.3.0/24 to any port nfssudo ufw allow 111/udpsudo ufw allow 111/tcpsudo ufw allow 2049/tcpsudo ufw allow 2049/udp
🔍 验证服务 检查 RPC 服务 1 2 3 4 5 6 7 8 9 rpcinfo -p localhost
检查导出列表 1 2 3 4 5 showmount -e localhost showmount -e <服务器IP>
💻 客户端配置 1. 安装 NFS 客户端 CentOS/Rocky Linux/AlmaLinux:
1 sudo dnf install -y nfs-utils
Ubuntu/Debian:
1 sudo apt install -y nfs-common
2. 创建挂载点 1 sudo mkdir -p /mnt/nfs/mysql
3. 手动挂载 1 2 3 4 5 sudo mount -t nfs <服务器IP>:/mnt/data/nfs_data/mysql /mnt/nfs/mysqldf -h | grep nfs
4. 自动挂载(推荐) 编辑 /etc/fstab:
添加以下行:
1 2 # NFS 自动挂载配置 <服务器IP>:/mnt/data/nfs_data/mysql /mnt/nfs/mysql nfs defaults,_netdev 0 0
选项说明:
defaults: 使用默认挂载选项_netdev: 表示网络设备,系统启动时等待网络就绪后再挂载0 0: dump 和 fsck 选项测试配置:
1 2 3 4 5 sudo mount -amount | grep nfs
🔒 安全建议 限制访问范围 :只允许必要的 IP 或子网访问使用只读权限 :如果客户端不需要写入,使用 ro 选项**避免使用 no_root_squash**:除非有特殊需求,否则使用默认的 root_squash 使用 NFSv4 :NFSv4 提供更好的安全性和性能配置 SELinux (如适用):1 2 3 sudo setsebool -P nfs_export_all_rw 1sudo setsebool -P nfs_export_all_ro 1
🐛 故障排查 检查服务状态 1 2 3 4 5 6 sudo systemctl status nfs-serversudo systemctl status rpcbindsudo systemctl status nfs-kernel-server
查看日志 1 2 3 4 5 6 sudo journalctl -u nfs-server -fsudo journalctl -u rpcbind -fsudo tail -f /var/log/messages
常见问题 挂载失败:Connection refused
检查防火墙配置 确认 NFS 服务正在运行 检查网络连通性 权限被拒绝
检查 /etc/exports 配置 确认目录权限设置 检查 SELinux 配置(如适用) 挂载后无法写入
检查导出配置中的权限选项 确认目录的所有者和权限 检查客户端用户权限 📚 参考资源