Administrator
Administrator
发布于 2026-07-14 / 3 阅读
0
0

NFS 文件共享服务安装与配置教程(CentOS 7)

一、什么是 NFS

NFS(Network File System,网络文件系统)是一种基于网络的文件共享协议,由 Sun 公司开发,主要应用于 Linux/Unix 系统之间共享目录。

使用 NFS 后,客户端可以像访问本地目录一样访问服务器上的共享目录,实现多台服务器共享同一份数据。

常见应用场景:

  • Kubernetes(K8s)共享存储(PV/PVC)

  • Web 集群共享静态资源

  • 日志集中存储

  • 备份服务器

  • 自动化运维共享脚本


二、NFS 工作原理

整个访问过程如下:

        写入文件
+-------------+
| NFS Client  |
+-------------+
       │
       │ RPC请求
       ▼
+----------------+
| rpcbind(111)   |
+----------------+
       │
       ▼
+----------------+
| nfs-server     |
+----------------+
       │
       ▼
  /nfs_file

整个流程:

  1. 客户端首先联系 rpcbind

  2. rpcbind 告诉客户端 NFS 服务端口

  3. 客户端连接 nfs-server

  4. 将远程目录挂载到本地

  5. 后续读写都直接操作服务器目录


三、实验环境

主机

IP

角色

nfs-server

172.21.30.143

NFS 服务端

k3s-master-01

172.21.30.xxx

NFS 客户端


四、服务端安装配置

1)安装 NFS

yum install -y nfs-utils

CentOS7 中安装 nfs-utils 即可。


2)创建共享目录

mkdir /nfs_file

设置权限(实验环境可使用 777,生产环境建议按需授权)

chmod 777 /nfs_file

查看目录

ls -ld /nfs_file

例如:

drwxrwxrwx root root /nfs_file

3)配置共享目录

编辑

vim /etc/exports

添加

/nfs_file 172.21.30.*(rw,sync,no_root_squash)

也可以使用

echo "/nfs_file 172.21.30.*(rw,sync,no_root_squash)" >> /etc/exports

参数说明:

参数

作用

rw

可读可写

ro

只读

sync

数据同步写入磁盘,安全性高

async

异步写入,性能高但风险大

no_root_squash

客户端 root 保持 root 权限

root_squash

客户端 root 映射为匿名用户(默认)


4)启动服务

启动 rpcbind

systemctl start rpcbind

启动 NFS

systemctl start nfs

设置开机启动

systemctl enable rpcbind
systemctl enable nfs

5)发布共享目录

exportfs -rv

输出:

exporting 172.21.30.*:/nfs_file

参数说明:

-r
重新导出

-v
显示详细信息

6)查看共享目录

showmount -e

输出:

Export list for localhost:

/nfs_file 172.21.30.*

说明共享目录发布成功。


五、客户端配置

1)安装 NFS

yum install -y nfs-utils

2)启动服务

systemctl start rpcbind
systemctl start nfs

3)查看服务端共享

showmount -e 172.21.30.143

结果:

Export list for 172.21.30.143:

/nfs_file 172.21.30.*

说明客户端已经能够访问服务端。


4)创建挂载点

mkdir /nfs_file

这里的目录只是挂载点(Mount Point)


5)挂载共享目录

mount 172.21.30.143:/nfs_file /nfs_file

6)确认挂载

df -h | grep 172.21.30.143

例如:

172.21.30.143:/nfs_file   36G 2.1G 34G 6% /nfs_file

也可以查看

mount | grep nfs

六、测试共享

客户端创建文件

echo "这是一个测试" > test01.txt

查看

ls
test01.txt

随后在服务端查看

ls /nfs_file

同样能够看到

test01.txt

说明共享成功。


七、本次实验遇到的问题

实验过程中出现了一个比较容易踩坑的问题。

现象

第一次测试时:

客户端能够看到

test01.txt

但是服务端却没有该文件。

退出目录重新进入后:

test01.txt

又消失了。

重新创建文件后,服务端终于能够看到。


当时的操作

客户端执行:

mkdir /nfs_file

cd /nfs_file

mount 172.21.30.143:/nfs_file /nfs_file

随后立即:

echo "这是一个测试" > test01.txt

八、原因分析

这是 Linux 挂载点的经典问题。

在执行:

cd /nfs_file

之后,Shell 当前工作目录(Current Working Directory,CWD)已经位于本地文件系统中的 /nfs_file

此时再执行:

mount 172.21.30.143:/nfs_file /nfs_file

虽然挂载成功,但 Shell 当前目录仍然引用挂载前的本地目录。

因此:

echo "这是一个测试" > test01.txt

实际上写入的是客户端本地目录,而不是 NFS 服务器上的共享目录。

可以理解为:

挂载前

客户端

/nfs_file
    ↑
    当前目录

执行挂载:

mount ...

/nfs_file
│
├── 已变成NFS目录
│
└── 但是Shell仍然停留在旧目录

因此:

test01.txt

写进了客户端本地硬盘。


九、如何验证

可以退出目录重新进入:

cd /
cd /nfs_file

或者

pwd

重新进入挂载目录后,再创建文件:

echo "这是一个测试" > test01.txt

此时:

客户端:

/nfs_file/test01.txt

服务端:

/nfs_file/test01.txt

两边都能够看到该文件,说明已经真正写入了 NFS 共享目录。


十、正确的操作顺序

推荐始终按照下面的流程进行:

mkdir /nfs_file

mount 172.21.30.143:/nfs_file /nfs_file

cd /nfs_file

touch test.txt

不要在 进入目录之后再进行挂载


十一、实验总结

本实验完成了 NFS 文件共享服务的搭建,并验证了客户端与服务端之间的文件共享功能。

实验过程中还遇到了一个典型问题:在挂载点目录内执行 mount 后,Shell 当前工作目录仍可能停留在挂载前的本地文件系统,导致新建文件实际上写入客户端本地,而不是 NFS 共享目录。 通过退出并重新进入挂载目录后再进行文件操作,即可正确访问共享目录。

通过本次实验,掌握了以下内容:

  • NFS 的工作原理及适用场景

  • 服务端共享目录的配置方法(/etc/exports

  • rpcbindnfs-server 服务的作用

  • 客户端挂载 NFS 共享目录的方法

  • 使用 showmountexportfsmountdf 等命令进行验证

  • 挂载点与当前工作目录(CWD)的关系及常见问题排查方法

这些内容也是日常 Linux 运维和 Kubernetes 共享存储配置中最常用的基础知识。


评论