目录
[1. 项目背景](#1. 项目背景)
[2. 学习目标](#2. 学习目标)
[二、NFS 基础认知](#二、NFS 基础认知)
[1. 定义](#1. 定义)
[2. 核心优点](#2. 核心优点)
[3. 核心依赖](#3. 核心依赖)
[三、NFS 工作原理(必背)](#三、NFS 工作原理(必背))
[四、NFS 服务端部署(完整步骤)](#四、NFS 服务端部署(完整步骤))
[1. 检查与安装软件包](#1. 检查与安装软件包)
[2. 配置主配置文件 /etc/exports](#2. 配置主配置文件 /etc/exports)
[3. 服务管理命令](#3. 服务管理命令)
[4. 共享目录刷新(exportfs 命令)](#4. 共享目录刷新(exportfs 命令))
[5. 防火墙与 SELinux 配置](#5. 防火墙与 SELinux 配置)
[五、NFS 客户端配置](#五、NFS 客户端配置)
[1. 查看服务器共享目录](#1. 查看服务器共享目录)
[2. 手动挂载 NFS](#2. 手动挂载 NFS)
[3. 自动挂载(autofs)](#3. 自动挂载(autofs))
[六、企业级 NFS 实战案例](#六、企业级 NFS 实战案例)
[客户端配置(autofs 自动挂载)](#客户端配置(autofs 自动挂载))
[1. NFS 版本](#1. NFS 版本)
[2. 生产环境权限最佳实践](#2. 生产环境权限最佳实践)
[3. 常见故障排查](#3. 常见故障排查)
[4. NFS 与 Samba 区别](#4. NFS 与 Samba 区别)
[5. 开机自动挂载(fstab 方式)](#5. 开机自动挂载(fstab 方式))
一、项目概述
1. 项目背景
学院多台 Linux 服务器需跨主机文件共享 (软件资料、课程资料、科研资料),Windows 用共享文件夹,Linux 系统间优先使用 NFS(网络文件系统) 实现透明文件访问。
2. 学习目标
- 理解 NFS 工作原理与依赖关系
- 掌握 NFS 服务端安装、配置、启动、管理
- 掌握客户端挂载、自动挂载(autofs)
- 能完成企业级 NFS 部署与权限控制
- 排查 NFS 常见故障
二、NFS 基础认知
1. 定义
NFS(Network File System) :网络文件系统,由 SUN 公司开发,遵循 RFC1904、RFC1813 标准,基于 TCP/IP 实现网络资源共享,客户端可透明读写远程 NFS 服务器文件,如同访问本地文件。
2. 核心优点
- 节省本地磁盘空间:公共数据集中存储,网络统一访问
- 统一家目录:用户 home 目录放 NFS 服务器,全网可用
- 位置透明:服务器文件物理位置变更,不影响客户端访问
- 精细权限控制:可对不同客户端设置不同读写权限
3. 核心依赖
NFS 必须依赖 RPC(远程过程调用) 实现端口映射:
- rpcbind :提供端口映射服务,固定端口 111
- nfs-utils:NFS 服务主程序,负责共享发布与文件访问
三、NFS 工作原理(必背)
- 服务器启动 rpcbind,监听 111 端口
- 服务器启动 nfs,随机占用多个端口,并向 rpcbind 注册端口与功能对应关系
- 客户端启动 rpcbind,向服务器 rpcbind(111)请求 NFS 端口
- 服务器 rpcbind 返回 NFS 对应端口给客户端
- 客户端通过该端口与 NFS 建立连接,进行数据传输
关键术语
- 导出(export):NFS 服务器共享目录对外发布
- 挂载(mount):客户端将远程共享目录映射到本地目录
四、NFS 服务端部署(完整步骤)
1. 检查与安装软件包
# 检查是否已安装
rpm -q nfs-utils rpcbind
# 未安装则用 yum 安装
yum install -y nfs-utils rpcbind
2. 配置主配置文件 /etc/exports
该文件是 NFS 唯一主配置文件,默认空,需手动编写。
配置格式
共享目录 客户端1(权限选项) [客户端2(选项) ...]
客户端指定方式
- 单 IP:192.168.4.100
- 网段:192.168.0.0/24
- 单主机名:www.zhiyuan.com
- 域内所有主机:*.zhiyuan.com
- 所有主机:*
常用权限选项(高频)
| 分类 | 选项 | 说明 |
|---|---|---|
| 访问权限 | ro | 只读 |
| rw | 可读可写 | |
| 用户映射 | root_squash | root 映射为匿名用户(默认) |
| no_root_squash | root 保持 root 权限 | |
| all_squash | 所有用户映射为匿名用户 | |
| 同步策略 | sync | 数据同步写入磁盘(安全,默认) |
| async | 先写内存,再刷磁盘(高效) | |
| 端口 | secure | 仅允许 <1024 端口(默认) |
| insecure | 允许 >1024 端口 |
配置示例
# 示例1:指定网段读写,其他只读
/opt/aaa 172.16.36.0/24(rw,async) *(ro)
# 示例2:指定域读写,所有用户匿名,同步写入
/opt/bbb *.zhiyuan.com(rw,insecure,all_squash,sync)
3. 服务管理命令
# 查看 RPC 端口注册
rpcinfo -p
# 启动(必须先 rpcbind,再 nfs)
systemctl start rpcbind
systemctl start nfs
# 停止/重启/状态
systemctl stop nfs
systemctl restart nfs
systemctl status rpcbind nfs
# 开机自启
systemctl enable rpcbind
systemctl enable nfs
4. 共享目录刷新(exportfs 命令)
修改 /etc/exports 后无需重启服务,用 exportfs 刷新:
# 重新加载所有共享并显示过程
exportfs -rv
# 停止所有共享
exportfs -auv
5. 防火墙与 SELinux 配置
# 临时关闭防火墙
systemctl stop firewalld
# 临时关闭 SELinux
setenforce 0
# 永久关闭 SELinux(修改配置文件)
vim /etc/selinux/config
SELINUX=permissive
五、NFS 客户端配置
1. 查看服务器共享目录
showmount -e 服务器IP
# 例:showmount -e 172.16.42.188
2. 手动挂载 NFS
# 创建挂载点
mkdir /aaa
# 挂载
mount -t nfs 服务器IP:/共享目录 /本地挂载点
# 例:mount -t nfs 172.16.42.188:/opt/aaa /aaa
# 卸载
umount /aaa
3. 自动挂载(autofs)
autofs 是按需挂载、空闲自动卸载的守护进程,避免手动 mount/umount。
部署步骤
安装 autofs
yum install -y autofs
配置主文件 /etc/auto.master
# 格式:挂载父目录 子配置文件 超时时间
/mnt/nfs /etc/auto.nfs --timeout=60
编写子配置文件 /etc/auto.nfs
# 格式:子目录 -fstype=nfs 服务器IP:/共享目录
soft -fstype=nfs,rw 172.16.42.188:/var/soft
course -fstype=nfs,rw 172.16.42.188:/var/course
启动服务
systemctl restart autofs
systemctl enable autofs
验证
# 进入目录自动挂载
cd /mnt/nfs/soft
ls
# 查看挂载
df -TH
六、企业级 NFS 实战案例
需求
服务器:172.16.42.188
- /var/soft:192.168.4.0/24 读写,其他只读
- /var/course、/var/scientific:*.zhiyuan.com 读写,所有用户匿名,insecure,sync
服务端配置
创建目录
mkdir -p /var/soft /var/course /var/scientific
编写 /etc/exports
/var/soft 192.168.4.0/24(rw,sync) *(ro)
/var/course *.zhiyuan.com(rw,insecure,all_squash,sync)
/var/scientific *.zhiyuan.com(rw,insecure,all_squash,sync)
重启服务
systemctl restart rpcbind nfs
exportfs -rv
验证共享
showmount -e 172.16.42.188
客户端配置(autofs 自动挂载)
# 安装 autofs
yum install -y autofs
# 配置主文件
echo "/study /etc/auto.nfs" >> /etc/auto.master
# 配置子文件
cat >> /etc/auto.nfs << EOF
soft -fstype=nfs,rw 172.16.42.188:/var/soft
course -fstype=nfs,rw 172.16.42.188:/var/course
scientific -fstype=nfs,rw 172.16.42.188:/var/scientific
EOF
# 重启服务
systemctl restart autofs
七、项目总结
- NFS = 网络文件系统,依赖 rpcbind(111 端口)
- 核心配置文件:/etc/exports
- 服务启动顺序:先 rpcbind,后 nfs
- 配置刷新用 exportfs -rv,无需重启服务
- 客户端:showmount 查看 → mount 手动挂载 /autofs 自动挂载
- 权限要点:账号 UID/GID 尽量一致,避免权限错乱
- 生产环境:开启防火墙需放行 nfs、rpcbind 相关端口
八、扩展知识(进阶必备)
1. NFS 版本
- NFSv3:默认,多用 UDP,性能高
- NFSv4:基于 TCP,有安全认证,跨网段更稳定,支持防火墙挂载指定版本:
mount -t nfs -o vers=4 服务器IP:/目录 /挂载点
2. 生产环境权限最佳实践
- 公共目录:all_squash,anonuid/anongid 指定统一匿名用户
- 管理员目录:no_root_squash,限制指定 IP
- 数据安全:必用 sync,禁止 async 防止断电丢数据
3. 常见故障排查
-
showmount 无法查看共享
- 原因:防火墙未关、rpcbind 未启动、SELinux 拦截
- 解决:关闭防火墙 / SELinux,重启 rpcbind、nfs
-
挂载提示权限拒绝
- 原因:/etc/exports 配置错误、目录本地权限不足
- 解决:检查配置,chmod 755 共享目录
-
写入失败
- 原因:配置 ro、root_squash 导致权限不足、服务器目录无写权限
- 解决:改为 rw,no_root_squash,chmod 777 测试
4. NFS 与 Samba 区别
- NFS:Linux ↔ Linux 首选,速度快、配置简单
- Samba:Linux ↔ Windows 互访,支持 Windows 共享协议
5. 开机自动挂载(fstab 方式)
vim /etc/fstab
服务器IP:/共享目录 /挂载点 nfs defaults 0 0
mount -a