news 2026/7/10 13:19:26

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/7/10 8:15:38

BBDown终极教程:5步掌握B站视频下载神器

BBDown终极教程:5步掌握B站视频下载神器 【免费下载链接】BBDown Bilibili Downloader. 一款命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 想要永久保存B站上的优质视频内容吗?BBDown作为一款功能强大的Bilibili…

作者头像 李华
网站建设 2026/7/10 10:55:44

纪念币预约自动化:智能赋能预约成功的终极解决方案

纪念币预约自动化:智能赋能预约成功的终极解决方案 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 90%用户在手动预约纪念币时遭遇失败?传统方式面对秒杀级竞…

作者头像 李华
网站建设 2026/7/10 9:20:31

FreeMove:彻底解决C盘空间不足的智能迁移方案

FreeMove:彻底解决C盘空间不足的智能迁移方案 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 你是否曾因C盘爆满而焦虑?每次看到红色警告都束手…

作者头像 李华
网站建设 2026/7/10 3:43:32

ComfyUI-Manager界面按钮消失问题完全解决指南:从诊断到预防

ComfyUI-Manager界面按钮消失问题完全解决指南:从诊断到预防 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager ComfyUI-Manager是ComfyUI生态系统中至关重要的插件管理工具,它让用户能够轻松安装…

作者头像 李华
网站建设 2026/7/10 4:36:46

两两交换链表中的节点

递归解法详解题目要求两两交换链表中的相邻节点,且不能修改节点的值,只能交换节点本身。递归方法通过分解问题为子问题来实现。递归思路 将链表的前两个节点视为node1和node2,交换这两个节点后,node1的下一个节点应指向剩余链表交…

作者头像 李华
网站建设 2026/7/9 15:58:58

Docker极简入门:从零到实战

Docker 极简入门实战大纲 第一章:Docker 初识 痛点引入: 开发与部署环境不一致带来的困扰。 Docker 是什么? 不是虚拟机!轻量级容器技术。 核心概念:镜像(Image)、容器(Container)、仓库(Repository)。 类比:镜像 = 软件包 (.exe/.dmg/.deb) + 运行环境 (JDK/Python等),…

作者头像 李华