03. NFS服务器

NFS 服务介绍

在计算机网络存储领域,NFS(Network File System,网络文件系统)是一种实现不同计算机之 间文件共享的经典技术。它允许网络中的客户端计算机像访问本地文件一样,透明地访问远程服 务器上的文件资源,极大地简化了跨设备的数据共享与管理流程。

NFS 的核心架构

NFS 采用客户端 - 服务器(Client-Server)架构,主要由两部分组成:

  • NFS 服务器:负责存储文件资源,并通过 NFS 协议将这些资源共享给授权的客户端。服务 器上运行着 NFS 守护进程,用于监听客户端的请求、处理文件访问操作以及维护共享目录的 权限控制。
  • NFS 客户端:通过 NFS 协议访问服务器上的共享文件。客户端需要挂载(Mount)服务器 的共享目录到本地文件系统,之后就可以像操作本地文件一样对远程文件进行读写、创建、 删除等操作。

NFS 服务最佳实践

1. 部署服务

NFS服务由nfs-utils软件包提供。

bash 复制代码
# 安装软件包
[root@server ~]# yum install -y nfs-utils
# 准备用户
[root@server ~]# useradd -u 1000 laoma
[root@server ~]# echo redhat | passwd --stdin laoma
# 准备共享目录
[root@server ~]# mkdir -p /shares/webapp
[root@server ~]# chown 48 /shares/webapp
# apache 账户ID是48
# 启用并启动服务
[root@server ~]# systemctl enable nfs-server --now
# 配置防火墙
[root@server ~]# firewall-cmd --permanent --add-service=nfs --addservice=rpc-bind --add-service=mountd
[root@server ~]# firewall-cmd --reload
命令片段 作用说明
firewall-cmd firewalld 的核心管理命令(区别于 iptables
--permanent 永久生效(不加此参数仅临时生效,重启 firewalld / 服务器后失效)
--add-service=nfs 开放 NFS 服务(对应 firewalld 预定义的 nfs 服务规则,默认端口 2049)
--addservice=rpc-bind 【笔误修正】正确写法是 --add-service=rpc-bind(你少写了 -),开放 rpc-bind 服务(RPC 绑定,默认端口 111)
--add-service=mountd 开放 mountd 服务(NFS 挂载守护进程,端口动态分配,firewalld 预定义规则已适配)
--reload 重新加载 firewalld 规则(使永久配置生效,无需重启服务)

2. 配置 NFS 导出

我们使用以下记录:

bash 复制代码
[root@server ~]# vim /etc/exports
/shares/webapp 10.1.8.0/24(rw)

每当您在/etc/exports或/etc/exports.d/*.exports中更改导出点时,请对NFS服务运行exportfs -r 命令确保更改生效,或者运行 systemctl reload nfs-server 。

bash 复制代码
[root@server ~]# exportfs -r
# 或者
[root@server ~]# systemctl reload nfs-server
# 或者
[root@server ~]# exportfs -av

3. 监视 NFS 导出

使用exportfs命令列出NFS服务器当前导出的目录。

bash 复制代码
[root@server ~]# exportfs
/shares/webapp 10.1.8.0/24

默认情况下,该命令不显示导出选项。 使用-v选项列出这些选项,包括缺省选项。

bash 复制代码
[root@server ~]# exportfs -v
/shares/webapp 10.1.8.0/24(sync,...,rw,secure,no_root_squash,...)

4. 客户端挂载

bash 复制代码
# 安装软件包
[root@client ~]# yum install -y nfs-utils httpd
[root@client ~]# id apache
uid=48(apache) gid=48(apache) 组=48(apache)
[root@client ~]# systemctl enable httpd --now
# 查看服务端提供的共享
[root@client ~]# showmount -e 10.1.8.10
Export list for server:
/shares/webapp 10.1.8.0/24
# 挂载
[root@client ~]# mkdir -p /var/www/html
[root@client ~]# mount -t nfs server:/shares/webapp /var/www/html
# root用户不能创建
[root@client ~]# touch /var/www/html/root-f1
touch: cannot touch '/var/www/html/root-f1': Permission denied
# apache 用户能创建
[root@client ~]# su -l -s /bin/bash apache
-bash-4.2$ echo apache website > /var/www/html/web1.html

访问测试

bash 复制代码
[root@server ~]# curl http://10.1.8.11/
Welcome to laoma website.
[root@server ~]# curl http://10.1.8.11/web1.html
apache website

5. 持久化挂载

修改 /etc/fstab,最后添加如下记录:

bash 复制代码
server:/shares/webapp /var/www/html nfs defaults 0 0
相关推荐
云老大-阿里云国际站代理商30 分钟前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_741484811 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS1 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
wdfk_prog2 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞2 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
浅念-3 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
日常筹谋记3 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
Shadow(⊙o⊙)4 小时前
Linux进阶知识1.0
linux·运维·服务器
闲云自留地4 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算
剑指offer.5 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件