NFS系统介绍
NFS(Network File System) 是一种由 Sun Microsystems 开发的分布式文件系统协议,允许客户端计算机通过网络访问服务器上的文件,就像访问本地存储一样。它基于 客户端-服务器(C/S) 架构,广泛应用于 Linux/Unix 环境,支持跨平台文件共享(如 Linux ↔ Windows,需额外软件支持)。
1. NFS 核心特点
-
透明访问:客户端挂载远程目录后,操作方式与本地文件系统一致。
-
基于RPC(远程过程调用):依赖 portmap/rpcbind 服务进行通信。
-
无状态协议(NFSv3及之前):服务器不记录客户端状态,依赖客户端重试机制。
-
有状态协议(NFSv4+):支持会话(Session),提升性能和安全性。
-
文件锁定机制:NFSv4 内置文件锁,早期版本需依赖 NLM(Network Lock Manager)。
2. NFS 主要版本对比
| 版本 | 发布时间 | 关键改进 | 缺点 |
|---|---|---|---|
| NFSv2 | 1989 | 首次标准化,支持UDP/TCP | 最大文件2GB,性能低 |
| NFSv3 | 1995 | 支持大文件(64位)、异步写入、TCP协议 | 无状态,锁管理复杂 |
| NFSv4 | 2000 | 有状态协议、集成锁管理、支持ACL、安全性强 | 配置复杂 |
| NFSv4.1 | 2010 | 并行存储(pNFS)、会话持久化 | 需额外存储后端支持 |
| NFSv4.2 | 2016 | 服务器端复制、稀疏文件支持 | 尚未广泛普及 |
3. NFS 工作原理
(1)基本流程
-
客户端 发起挂载请求(
mount -t nfs)。 -
服务器 的
rpcbind服务告知客户端 NFS 服务端口。 -
客户端通过 RPC 调用访问服务器端的
nfsd守护进程。 -
服务器返回文件句柄,客户端可读写远程文件。
(2)协议依赖
-
portmap/rpcbind:端口映射服务(默认端口 111)。
-
nfsd:NFS 服务端守护进程。
-
mountd:处理挂载请求。
-
lockd(可选):文件锁管理(NFSv3需要)。
4. NFS 典型应用场景
(1)企业文件共享
-
多个服务器共享同一存储(如Web集群的静态资源)。
-
开发团队共享代码目录(通过NFS挂载到不同主机)。
(2)虚拟化存储
-
为KVM/VMware提供共享存储(需配合NAS或SAN硬件)。
(3)备份集中化
-
将备份数据统一存储到NFS服务器,客户端通过挂载写入。
(4)高可用架构
-
结合 DRBD+Heartbeat 实现NFS服务器高可用。
5. NFS 服务端(Server)安装与配置
(1)安装 NFS 服务
CentOS 使用 nfs-utils 提供 NFS 服务:
# 安装 nfs-utils sudo yum install -y nfs-utils # 启动 NFS 服务并设置开机自启 sudo systemctl start nfs-server sudo systemctl enable nfs-server
(2)创建共享目录
sudo mkdir -p /data/nfs_share sudo chmod 777 /data/nfs_share # 放宽权限(生产环境应细化权限)
(3)配置 NFS 导出(exports)
编辑 /etc/exports 文件,定义共享目录和访问规则:
sudo vim /etc/exports
添加以下内容(示例允许 所有 网段读写):
/data/nfs_share *(rw,sync,no_root_squash)
参数说明:(更多参数设置,可以自行AI提问)
-
rw:读写权限。 -
sync:同步写入(保证数据一致性)。 -
no_root_squash:允许客户端root用户保留权限(谨慎使用,安全风险高)。
(4)应用配置
# 重新加载 exports 配置(使更改生效)
sudo exportfs -r
# 查看当前共享的目录
sudo exportfs -v
(5)关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
6. NFS 客户端(Client)安装与挂载
(1)安装 NFS 客户端工具
sudo yum install -y nfs-utils
(2)创建本地挂载点
sudo mkdir -p /mnt/nfs
(3)挂载远程 NFS 共享目录
# 临时挂载(重启失效) sudo mount -t nfs 192.168.1.171:/data/nfs_share /mnt/nfs # 永久挂载(编辑 /etc/fstab),这种挂载会一直占用资源,如果访问不多,可以采用另一种方式动态挂载 echo "192.168.1.171:/data/nfs_share /mnt/nfs nfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a # 测试挂载是否成功
(4)验证挂载
# 查看已挂载的NFS共享 df -hT | grep nfs # 测试写入文件 echo "Hello NFS" > /mnt/nfs/test.txt cat /mnt/nfs/test.txt
8. 卸载 NFS 共享
客户端卸载
# 卸载后客户端目录中内容会情况,服务段保持不变
# 如果重新挂载,会将服务端文件同步
sudo umount /mnt/nfs
服务端停止共享

浙公网安备 33010602011771号