news 2026/5/16 16:36:14

Nfs网络文件系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nfs网络文件系统

文章目录

      • Nfs应用场景
      • NFS实现的原理
      • NFS配置文件
      • NFS使用选项参数
      • NFS存储数据的优缺点
      • NFS实验
        • 实验要求
        • 实验环境
        • 实验步骤
        • 服务端:
          • 安装NFS服务并修改配置文件
          • 创建用户并授权
          • 启动服务
        • 客户端
          • 安装nfs工具并启动
          • 本地挂载点目录文件
          • 创建对应用户
          • 查看远端的NFS共享目录是否存在
          • 挂载对应的数据目录
          • 测试权限
          • 设置开机自动挂载
        • 怎么进行协助NFS?
        • NFS扩展

主要功能就是在局域网内让不同的主机系统可以访问相同的数据资源

实现多台服务器之间数据共享

实现多台服务器之间数据一致性

Nfs应用场景

在集群中会经常进行使用,如下图所示,有了共享的服务器,用户上传的数据都会放到共享存储上,这样不管是负载的请求在那台上都可以访问到

NFS实现的原理

nfsd:基于NFS的守护进程,主要的功能是进行管理客户端是否可以登入服务器

mount:管理nfs文件系统,当客户端登入服务器之后 使用服务器提供的文件之前还需要验证权限

portmap:进行端口映射

1.****用户进程访问NFS客户端,使用不同的函数对数据进行处理

2.NFS客户端通过TCP/IP的方式传递给NFS****服务端。

3.NFS服务端接收到请求后,会先调用portmap****进程进行端口映射。

4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS****服务端。

5.Rpc.mount****进程判断客户端是否有对应的权限进行验证。

6.idmap****进程实现用户映射和压缩

7.最后NFS****服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

rpc是一个远程过程调用,那么使用nfs必须有rpc服务

NFS配置文件

配置文件为 /etc/exports 默认里面没有任何内容,按照共享目录的路径 允许访问的NFS客户端(共享权限参数) 格式,定义要共享的目录与相应的权限

NFS使用选项参数

参数 参数作用
rw 读写权限
ro 只读权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid 配置all_squash使用,指定NFS的用户UID,必须存在系统

NFS存储数据的优缺点

优点:NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。

NFS文件系统内数据是在文件系统之上的,所有数据都是能看得见。

缺点:存在单点故障, 如果构建高可用维护麻烦

NFS数据明文, 并不对数据做任何校验

客户端挂载无需账户密码, 安全性一般(内网使用)

生产环境建议:

将静态数据尽可能往前端推, 减少后端存储压力

静态资源必须通过CDN缓存(jpg\png\mp4\avi\css\js)

没有缓存或架构本身历史遗留问题太大, 在多存储也无用

NFS实验

实验要求

NFS服务端(A)

NFS客户端(B)

NFS客户端(C)

1.在NFS服务端(A)上共享/data/w(可写)及/data/r(只读)

2.在NFS客户端(B/C)上进行挂载

实验环境
服务器系统角色ip
Centos 7.7NFS服务端10.0.0.31
Centos 7.7NFS客户端110.0.0.41
Centos 7.7NFS客户端210.0.0.7
实验步骤
服务端:
安装NFS服务并修改配置文件
[root@nfs ~]# yum install -y nfs-utilsLoaded plugins: fastestmirror, langpacks Determining fastest mirrors base|3.6kB 00:00:00 epel|4.3kB 00:00:00 extras|2.9kB 00:00:00 nginx-stable|2.9kB 00:00:00 updates|2.9kB 00:00:00 Package1:nfs-utils-1.3.0-0.68.el7.2.x86_64 already installed and latest version#修改文件[root@nfs ~]# cat /etc/exports/data/r10.0.0.0/24(ro,sync,all_squash,anonuid=666,anongid=666)/data/w10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
创建用户并授权
[root@nfs ~]# groupadd -g 666 www[root@nfs ~]# useradd -u 666 -g www www[root@nfs ~]# id wwwuid=666(www)gid=666(www)groups=666(www)#创建共享目录并授权[root@nfs ~ data]# mkdir /data/{r,w} -p[root@nfs ~ data]# lsr w[root@nfs ~ data]#[root@nfs ~ data]# chown -R www.www /data/[root@nfs ~ data]# ls -ld /data/drwxr-xr-x4www www24Dec1616:45 /data/
启动服务
[root@nfs ~]# systemctl restart nfs[root@nfs ~]# systemctl status nfs● nfs-server.service - NFS server and services Loaded: loaded(/usr/lib/systemd/system/nfs-server.service;disabled;vendor preset: disabled)Active: active(exited)since Tue2025-12-1616:48:23 CST;5s ago Process:3593ExecStartPost=/bin/sh -cifsystemctl -q is-active gssproxy;thensystemctl reload gssproxy;fi(code=exited,status=0/SUCCESS)Process:3573ExecStart=/usr/sbin/rpc.nfsd$RPCNFSDARGS(code=exited,status=0/SUCCESS)Process:3571ExecStartPre=/usr/sbin/exportfs -r(code=exited,status=0/SUCCESS)Main PID:3573(code=exited,status=0/SUCCESS)CGroup: /system.slice/nfs-server.service Dec1616:48:23 nfs systemd[1]: Starting NFS server and services... Dec1616:48:23 nfs systemd[1]: Started NFS server and services.
客户端
安装nfs工具并启动
客户端1[root@backup ~]# yum install nfs-utils -yLoaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Package1:nfs-utils-1.3.0-0.68.el7.2.x86_64 already installed and latest version Nothing todo[root@backup ~]# systemctl restart rpcbind客户端2[root@web01 ~]# yum install nfs-utils -yLoaded plugins: fastestmirror, langpacks Determining fastest mirrors base|3.6kB 00:00:00 epel|4.3kB 00:00:00 extras|2.9kB 00:00:00 nginx-stable|2.9kB 00:00:00 updates|2.9kB 00:00:00 Package1:nfs-utils-1.3.0-0.68.el7.2.x86_64 already installed and latest version Nothing todo[root@web01 ~]# systemctl restart rpcbind
本地挂载点目录文件
客户端1[root@backup ~]# mkdir /data/{r,w} -p客户端2[root@web01 ~]# mkdir /data/{r,w} -p
创建对应用户
客户端1[root@backup ~]# groupadd -g 666 www[root@backup ~]# useradd -u 666 -g www www[root@backup ~]# id wwwuid=666(www)gid=666(www)groups=666(www)客户端2[root@web01 ~]# mkdir /data/{r,w} -p[root@web01 ~]# groupadd -g 666 www[root@web01 ~]# useradd -u 666 -g www www[root@web01 ~]# id wwwuid=666(www)gid=666(www)groups=666(www)
查看远端的NFS共享目录是否存在
客户端1[root@backup ~]# showmount -e 10.0.0.31Export listfor10.0.0.31: /data/w10.0.0.0/24 /data/r10.0.0.0/24 客户端2[root@web01 ~]# showmount -e 10.0.0.31Export listfor10.0.0.31: /data/w10.0.0.0/24 /data/r10.0.0.0/24
挂载对应的数据目录
客户端1[root@backup ~]# mount -t nfs 10.0.0.31:/data/w /data/w[root@backup ~]# mount -t nfs 10.0.0.31:/data/r /data/r[root@backup ~]# df -hFilesystem Size Used Avail Use% Mounted on devtmpfs 974M0974M0% /dev tmpfs 991M0991M0% /dev/shm tmpfs 991M9.9M 981M1% /run tmpfs 991M0991M0% /sys/fs/cgroup /dev/mapper/centos-root 47G5.4G 42G12% / /dev/sda1 1014M 171M 844M17% /boot tmpfs 199M0199M0% /run/user/010.0.0.31:/data/w 47G5.4G 42G12% /data/w10.0.0.31:/data/r 47G5.4G 42G12% /data/r 客户端2[root@web01 ~]# mount -t nfs 10.0.0.31:/data/w /data/w[root@web01 ~]# mount -t nfs 10.0.0.31:/data/r /data/r[root@web01 ~]# df -ThFilesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 974M0974M0% /dev tmpfs tmpfs 991M0991M0% /dev/shm tmpfs tmpfs 991M9.8M 981M1% /run tmpfs tmpfs 991M0991M0% /sys/fs/cgroup /dev/mapper/centos-root xfs 47G5.4G 42G12% / /dev/sda1 xfs 1014M 171M 844M17% /boot tmpfs tmpfs 199M0199M0% /run/user/010.0.0.31:/data/w nfs4 47G5.4G 42G12% /data/w10.0.0.31:/data/r nfs4 47G5.4G 42G12% /data/r
测试权限

测试/data/r读的权限

客户端1[root@backup r]# lstest.txt[root@backup r]# cat test.txthello this is nfs[root@backup r]# touch edutouch: cannottouch‘edu’: Read-onlyfilesystem

测试/data/w写的权限

[root@web01 w]# touch test1.txt[root@web01 w]# lstest1.txt[root@web01 w]#
设置开机自动挂载

写到fstab里面实现开机自动挂载

客户端1[root@backup r]# echo "10.0.0.31:/data/r /data/r nfs defaults 0 0" >>/etc/fstab[root@backup r]# echo "10.0.0.31:/data/w /data/w nfs defaults 0 0" >>/etc/fstab[root@backup r]# mount -a客户端2[root@web01 w]# echo "10.0.0.31:/data/r /data/r nfs defaults 0 0" >>/etc/fstab[root@web01 w]# echo "10.0.0.31:/data/w /data/w nfs defaults 0 0" >>/etc/fstab[root@web01 w]# mount -a
怎么进行协助NFS?

//卸载nfs

#1.正常卸载

[root@backup ~]# umount /data/w/

#2.强制卸载

[root@backup ~]# umount -lf /data/w/

NFS扩展
无需重启NFS服务平滑加载配置文件 服务端[root@nfs w]# echo "/data/p 10.0.0.0/24(ro)" >> /etc/exports[root@nfs w]# cat /etc/exports/data/r10.0.0.0/24(ro,sync,all_squash,anonuid=666,anongid=666)/data/w10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)/data/p10.0.0.0/24(ro)[root@nfs w]# exportfs -rvexporting10.0.0.0/24:/data/p exporting10.0.0.0/24:/data/w exporting10.0.0.0/24:/data/r nfs客户端挂载参数 客户端挂载 mount.nfs4 -o noatime,nodiratime,noexec,nodev,nosuid10.0.0.31:/data/r /data/r/ nfs客户端永久挂载参数10.0.0.31:/data/r /data/r nfs defaults,noatime,nodiratime,noexec,nodev,nosuid00
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 16:34:48

Vue可视化打印插件实战指南:从零构建专业级打印应用

Vue可视化打印插件实战指南:从零构建专业级打印应用 【免费下载链接】vue-plugin-hiprint hiprint for Vue2/Vue3 ⚡打印、打印设计、可视化设计器、报表设计、元素编辑、可视化打印编辑 项目地址: https://gitcode.com/gh_mirrors/vu/vue-plugin-hiprint 还…

作者头像 李华
网站建设 2026/5/16 16:35:51

计数dp详解

计数动态规划详解 计数动态规划(Counting Dynamic Programming),简称计数DP,是动态规划(DP)中专门用于解决计数问题的一类方法。其核心目标是通过定义合适的状态和状态转移方程,高效地计算出满足…

作者头像 李华
网站建设 2026/5/10 19:11:55

Zotero插件市场:一站式插件管理终极指南

Zotero插件市场:一站式插件管理终极指南 【免费下载链接】zotero-addons Zotero add-on to list and install add-ons in Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 核心价值:3步实现Zotero插件自动管理,让学…

作者头像 李华
网站建设 2026/5/15 5:20:28

MTKClient终极指南:3步解锁联发科设备的完整调试能力

MTKClient终极指南:3步解锁联发科设备的完整调试能力 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient 对于需要处理联发科设备的用户来说,MTKClient无疑是一款革命性…

作者头像 李华
网站建设 2026/5/9 2:12:13

Lumafly模组管理器:空洞骑士玩家的终极免费解决方案

Lumafly模组管理器:空洞骑士玩家的终极免费解决方案 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 在《空洞骑士》模组社区中,Lumafly作…

作者头像 李华
网站建设 2026/5/9 2:37:43

一篇文章了解 JavaScript 开发中函数与变量的优先级

函数与变量的优先级:搞懂这3个核心场景,再也不踩坑 在 JavaScript 开发中,我们经常会遇到这样的困惑:当函数和变量同名时,到底谁会被优先访问?为什么有时候打印的是函数,有时候却是变量值&#…

作者头像 李华