类别:Ubantu / 日期:2026-08-27 / 浏览:97 / 评论:0
详细讲解NFS远程存储的完整操作流程。这份指南会从服务端配置到客户端挂载,一步步带你实践。
一、NFS 基础概念
NFS (Network File System) 允许一台机器(客户端)通过网络访问另一台机器(服务端)的目录,就像访问本地磁盘一样。
二、环境准备
假设我们要搭建一个测试环境:
| 角色 | IP地址 | 共享目录(服务端) | 挂载点(客户端) |
|---|---|---|---|
| 服务端(ubuntu) | 192.168.156.157 | /data/nfs_share | - |
| 客户端(centos) | 192.168.156.156 | - | /mnt/nfs_data |
三、服务端配置(在 192.168.156.157 上操作)
1. 安装 NFS 服务
# Ubuntu/Debian 系统 apt-get install -y nfs-kernel-server rpcbind # 或者CentOS/RHEL 系统 # yum install -y nfs-utils rpcbind
2. 创建共享目录并设置权限
# 创建要共享的目录 mkdir -p /data/nfs_share # 创建一个测试文件,稍后验证 echo "Hello NFS" > /data/nfs_share/test.txt # 设置目录权限(根据需求调整) chmod 755 /data/nfs_share chown nfsnobody:nfsnobody /data/nfs_share # 或 root:root
3. 配置导出规则(核心步骤)
编辑 /etc/exports 文件:
vi /etc/exports
添加以下内容:
# 格式:共享目录 客户端IP/网段(权限选项) /data/nfs_share 192.168.156.156/24(rw,sync,no_root_squash,no_subtree_check)
常用选项详解:
| 选项 | 含义 |
|---|---|
rw | 读写权限(ro 为只读) |
sync | 同步写入(数据实时落盘,更安全但慢) |
async | 异步写入(性能更高但有数据丢失风险) |
no_root_squash | 允许客户端root用户保留root权限(谨慎使用) |
root_squash | 将客户端root映射为匿名用户(默认,更安全) |
no_subtree_check | 不检查子目录权限(提高性能) |
insecure | 允许使用大于1024的端口连接 |
| no_all_squash | 保留客户端用户的UID/GID映射 |
多客户端配置示例:
# 允许单个IP /data/nfs_share 192.168.156.156(rw,sync) # 允许整个网段 /data/nfs_share 192.168.156.0/24(rw,sync) # 允许所有(不安全,仅测试用) /data/nfs_share *(rw,sync,no_root_squash)
4. 使配置生效
# 导出所有共享目录 exportfs -a # 查看当前导出状态 exportfs -v # 重启NFS服务(使配置彻底生效) systemctl restart rpcbind systemctl restart nfs-server # ubuntu、CentOS 7+ 命令 # 或 systemctl restart nfs # 旧版本
5. 设置开机自启
systemctl enable rpcbind systemctl enable nfs-server
6.服务端固定端口
由于nfs的端口是动态随机的,所以需要固定端口。端口根据实际情况去分配,要避免冲突。
6.1 固定端口方案:
mountd → 8901
statd → 8902
lockd → 8903
6.2 配置 NFS 端口
步骤 1:配置 /etc/nfs.conf
sudo vim /etc/nfs.conf
清空文件内容,写入以下配置:
[general] pipefs-directory=/run/rpc_pipefs [lockd] port=8903 udp-port=8903 [mountd] manage-gids=y port=8901 [statd] port=8902
说明:[nfsd] 主服务端口默认 2049,无需修改。
步骤 2:配置 /etc/default/nfs-common
sudo vim /etc/default/nfs-common
修改或添加以下内容:
# 启动 statd 服务(关键:必须设为 yes) NEED_STATD=yes # 固定 statd 端口 STATDOPTS="--port 8902 --outgoing-port 8902"
步骤 3:配置 sysctl 固定 lockd 端口
# 添加 lockd 端口配置 echo "fs.nfs.nlm_tcpport=8903" | sudo tee -a /etc/sysctl.conf echo "fs.nfs.nlm_udpport=8903" | sudo tee -a /etc/sysctl.conf # 立即生效 sudo sysctl -p
6.3 重启服务并验证
步骤 4:完全重启 NFS 服务
# 停止服务 sudo systemctl stop nfs-kernel-server sudo systemctl stop rpcbind # 杀掉所有 statd 进程(确保端口被释放) sudo pkill -f rpc.statd # 重新加载 lockd 内核模块 sudo modprobe -r lockd 2>/dev/null || true sudo modprobe lockd nlm_tcpport=8903 nlm_udpport=8903 # 启动服务 sudo systemctl start rpcbind sudo systemctl start nfs-kernel-server # 等待服务完全启动 sleep 5
步骤 5:验证端口固定效果
rpcinfo -p | grep -E 'mountd|nlockmgr|status'
预期输出:
7. 配置防火墙
放行 NFS 所需端口
# 放行 rpcbind(必须) sudo ufw allow 111/tcp sudo ufw allow 111/udp # 放行 NFS 主服务(必须) sudo ufw allow 2049/tcp # 放行固定端口 sudo ufw allow 8901/tcp # mountd sudo ufw allow 8902/tcp # statd sudo ufw allow 8902/udp # statd sudo ufw allow 8903/tcp # lockd sudo ufw allow 8903/udp # lockd # 重新加载防火墙 sudo ufw reload # 查看防火墙状态 sudo ufw status verbose
8. 检查服务状态
# 查看NFS服务是否正常运行 systemctl status nfs-server # 查看本机共享了哪些目录 showmount -e localhost
四、客户端配置(在 192.168.156.156 上操作)
1. 安装 NFS 客户端工具
yum install -y nfs-utils # CentOS/RHEL # apt-get install -y nfs-common # Ubuntu/Debian
2. 查看服务端共享的目录
showmount -e 192.168.156.157
3. 创建本地挂载点并挂载
# 创建挂载目录 mkdir -p /mnt/nfs_data # 手动挂载(立即生效) mount -t nfs 192.168.156.157:/data/nfs_share /mnt/nfs_data # 或者使用更详细的参数 mount -t nfs -o rw,sync,hard,intr 192.168.156.157:/data/nfs_share /mnt/nfs_data
常用挂载选项:
| 选项 | 含义 |
|---|---|
hard | 硬挂载(网络中断时客户端会卡住等待,数据安全) |
soft | 软挂载(超时后返回错误,避免卡死但可能丢数据) |
intr | 允许中断挂起的NFS操作(配合hard使用) |
timeo=n | 超时时间(默认600,单位0.1秒) |
retrans=n | 重传次数(默认3次) |
vers=3 / vers=4 | 指定NFS协议版本 |
4. 验证挂载是否成功
# 查看已挂载的NFS df -hT | grep nfs # 查看挂载点内容 ls -l /mnt/nfs_data cat /mnt/nfs_data/test.txt # 应该看到 "Hello NFS"
5. 测试读写权限
# 尝试创建文件(如果服务端允许rw) echo "Test write" > /mnt/nfs_data/client_write_test.txt # 如果成功,说明读写权限正常
6. 设置开机自动挂载
编辑 /etc/fstab 文件:
vi /etc/fstab
添加以下行:
# 格式:服务端:共享目录 本地挂载点 文件系统类型 挂载选项 备份频率 检查顺序 192.168.156.157:/data/nfs_share /mnt/nfs_data nfs defaults,_netdev 0 0
参数说明:
_netdev:告诉系统在网络就绪后再挂载(对NFS至关重要)
7. 验证 fstab 配置
# 重新挂载所有fstab中的条目(不重启测试) mount -a # 检查是否挂载成功 mount | grep nfs
五、常用管理命令
服务端命令
# 查看当前共享状态 exportfs -v # 重新导出所有共享(修改/etc/exports后执行) exportfs -ra # 取消导出某个目录 exportfs -u 192.168.156.157:/data/nfs_share # 查看NFS连接状态 nfsstat -c # 客户端统计 nfsstat -s # 服务端统计
客户端命令
# 查看NFS挂载详情 nfsstat -m # 查看NFS连接状态 nfsiostat 1 # 每秒刷新一次 # 强制卸载(当NFS挂起时) umount -f /mnt/nfs_data umount -l /mnt/nfs_data # 懒卸载,待没有进程使用时真正卸载




