nfs.sh
5 0
linux nfs 文件共享
netnr 2026-05-08
### NFS 服务端
dnf install -y nfs-utils rpcbind

# 创建或确定共享的目录
mkdir -p /srv/nfs_share

# 设置权限,NFS 默认会将远程 root 映射为 nobody/nfsnobody。
chmod 777 /srv/nfs_share
chown nfsnobody:nfsnobody /srv/nfs_share

# 编辑配置文件加入共享的目录
vi /etc/exports
/srv/nfs_share 192.168.1.101(rw,sync,no_subtree_check)
# 客户端 IP (或网段如 192.168.1.0/24)
# 参数 rw: 允许读写 (默认为 ro 只读) , sync : 同步写入 ,no_subtree_check : 禁用子树检查

# 启动服务并应用配置
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server

# 重新加载 exports 配置 (无需重启服务即可生效)
exportfs -r

# 验证当前共享状态,预期输出配置的共享目录和允许的客户端 IP
showmount -e localhost

# 配置防火墙端口 111 2049


### NFS 客户端
dnf install -y nfs-utils

# 创建挂载点
mkdir -p /mnt/nfs_share

# 手动挂载测试,服务端 IP
mount -t nfs 192.168.1.100:/srv/nfs_share /mnt/nfs_share

# 验证挂载
df -h | grep nfs
ls -l /mnt/nfs_share

# 测试读写权限
touch /mnt/nfs_share/test.txt
echo "Hello NFS" > /mnt/nfs_share/test.txt
cat /mnt/nfs_share/test.txt
rm /mnt/nfs_share/test.txt

# 配置开机自动挂载,编辑 fstab 文件末尾添加
vi /etc/fstab

192.168.1.100:/srv/nfs_share /mnt/nfs_share nfs defaults,_netdev 0 0

# 参数解释:
# _netdev : 告诉系统这是网络设备,等待网络就绪后再挂载 (非常重要,否则启动可能卡住)
# defaults: 使用默认挂载选项 (rw, suid, dev, exec, auto, nouser, async)

# 测试 fstab 配置是否正确 (无需重启)
mount -a
# 如果没有报错,说明配置正确

# 如果修改了文件系统权限 (chmod/chown),客户端可能需要重新挂载才能看到新权限
# 在客户端执行:
mount -o remount /mnt/nfs_share

# 查看 NFS 挂载的详细选项
mount | grep nfs
cat /proc/mounts | grep nfs

# 在客户端执行卸载,记得同时从 /etc/fstab 中删除对应行,防止下次启动报错
umount /mnt/nfs_share
# 如果提示 "target is busy",可以使用 lazy unmount
umount -l /mnt/nfs_share


### Permission Denied (权限拒绝)

# 原因 1: 服务器端 /etc/exports 中的 IP 地址不匹配
# 解决: 检查 /etc/exports,确保客户端 IP 在允许列表中

# 原因 2: 文件系统权限不足
# 解决: 在服务器端检查目录权限
ls -ld /srv/nfs_share
# 确保 NFS 用户 (nobody/nfsnobody) 有读取/写入权限

# 原因 3: SELinux 阻止 (CentOS/RHEL)
# 解决: 临时关闭 SELinux 测试
setenforce 0
# 如果问题解决,永久配置 SELinux 布尔值:
setsebool -P nfs_export_all_rw on
setsebool -P use_nfs_home_dirs on

### Connection Refused / Timeout (连接被拒/超时)

# 原因 1: 防火墙未开放端口
# 解决: 检查服务器防火墙状态
firewall-cmd --list-all

# 原因 2: NFS 服务未启动
# 解决: 检查服务状态
systemctl status nfs-server

# 原因 3: 网络不通
# 解决: 从客户端 ping 服务器
ping 192.168.1.100

# 原因 4: rpcbind 服务异常
# 解决: 重启 rpcbind
systemctl restart rpcbind

### Stale File Handle (陈旧的文件句柄)

# 原因: 服务器重启或共享目录结构变化,客户端缓存未更新
# 解决: 卸载后重新挂载
umount /mnt/nfs_share
mount -a

### 性能优化 (可选)

# 在 /etc/fstab 中可以调整 rsize 和 wsize 以提高大文件传输性能
# 例如:
# 192.168.1.100:/srv/nfs_share /mnt/nfs_share nfs defaults,_netdev,rsize=1048576,wsize=1048576 0 0

# 查看当前挂载的性能参数
nfsstat -m
登录写评论