NFS(Network File System) 是一种分布式文件系统协议,允许用户通过网络在不同主机间共享文件和目录。它适用于局域网环境,常用于服务器集群、数据共享等场景。本文详细介绍NFS服务端与客户端的安装、配置及挂载流程。
安装NFS服务
根据 Linux 发行版选择命令:Ubuntu/Debian
sudo apt update && sudo apt install nfs-kernel-server
创建共享目录
sudo mkdir -p /mnt/nfs_share sudo chown nobody:nogroup /mnt/nfs_share # 设置权限(根据需要调整)
配置NFS导出规则
# 语法:<共享目录> <客户端IP/网段>(权限选项) /mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
常用权限选项:
rw:读写权限。
ro:只读权限。
sync:同步写入磁盘(数据安全性高)。
async:异步写入(性能更好,但可能丢失数据)。
no_root_squash:允许客户端root用户保留权限(谨慎使用)。
eg
/mnt/nfs_share *(rw,sync,no_root_squash)
生效配置并启动服务
sudo exportfs -a # 重新加载 exports 配置 sudo systemctl start nfs-server # 启动服务 sudo systemctl enable nfs-server # 设置开机自启
防火墙配置
开放 NFS 相关端口(NFSv4 默认使用 TCP 2049)sudo ufw allow 2049/tcp # Ubuntu sudo firewall-cmd --permanent --add-service=nfs && firewall-cmd --reload # CentOS
常见问题解决
- 权限被拒绝(Permission Denied)
- 检查服务端 /etc/exports 的权限配置。
- 确保客户端用户对挂载点有访问权限。
- 连接超时或无法访问
- 确认防火墙已放行NFS端口(尤其是NFSv3需要额外开放 rpcbind 端口)。
- 使用 rpcinfo -p <服务端IP> 检查RPC服务状态。
- 挂载后文件属主显示为nobody
- 在服务端配置 no_all_squash 或指定 anonuid/anongid。
可能遇到的问题及解决方法
挂载失败
原因:可能是网络问题、权限问题或NFS服务未启动。
解决方法://检查NFS服务是否启动 sudo systemctl status nfs-server //检查网络连接 ping <服务器IP> //使用正确的权限挂载 sudo mount -t nfs <服务器IP>:<远程目录> <本地目录>
读写权限问题
原因:可能是NFS共享目录的权限设置不正确。
解决方法:# 在服务器端设置正确的权限 sudo chmod -R 755 /path/to/shared/directory sudo chown -R nobody:nogroup /path/to/shared/directory # 在客户端重新挂载并指定权限 sudo mount -t nfs -o rw <服务器IP>:<远程目录> <本地目录>
性能问题
原因:可能是网络延迟或NFS配置不当。
解决方法:# 调整NFS挂载选项以提高性能 sudo mount -t nfs -o rsize=8192,wsize=8192 <服务器IP>:<远程目录> <本地目录> # 使用异步模式 sudo mount -t nfs -o async <服务器IP>:<远程目录> <本地目录>
数据一致性问题
原因:NFS的缓存机制可能导致数据不一致。
解决方法:# 使用noac选项禁用客户端缓存 sudo mount -t nfs -o noac <服务器IP>:<远程目录> <本地目录>
示例代码
以下是一个简单的NFS挂载示例:
服务器端配置:
# 编辑/etc/exports文件,添加共享目录
/path/to/shared/directory *(rw,sync,no_subtree_check)
# 重启NFS服务
sudo systemctl restart nfs-server
客户端挂载:
# 创建本地挂载点
sudo mkdir /mnt/nfs
# 挂载远程目录
sudo mount -t nfs <服务器IP>:/path/to/shared/directory /mnt/nfs