NFS介绍及服务器搭建

news2025/1/19 14:09:56

一、NFS 简介

NFS,英文全称 Network File System,主要功能:通过网络,让不同的机器、不同的操作系统可以共享文件。类似windows的共享文件夹

​ NFS服务器共享本机目录,客户端机器挂载该目录后,就可以像自己本机的目录一样使用,相当便利;操作远程目录就像操作本地目录;

官网:https://nfs.sourceforge.net/
文档:https://nfs.sourceforge.net/nfs-howto/index.html
使用场景:NFS适用于在中小型项目中,作为文件服务器使用;在大型项目中,建议使用真正的分布式存储,如:Ceph; NFS还是有单节点问题;替换FTP服务器还是没问题的;比上不足比下有余
在这里插入图片描述

二、NFS服务器搭建(CentOS)

假设有如下三台服务器
192.168.1.100 :作为NFS服务端
192.168.1.101 :作为NFS客户端1
192.168.1.102 :作为NFS客户端2

1. 服务端搭建(192.168.1.100 服务器)

1.1. 安装 nfs,rpc 服务
yum install -y rpcbind
yum install -y nfs-utils
1.2. 创建共享目录
  • test1共享目录
#目录根据自身情况自行选择,这里仅做演示
mkdir /home/nfs/disk-test1
chmod 666 /home/nfs/disk-test1

666含义:1-可执行权限、2-可写权限、4-可读权限;6=4+2,表示可读写;
第一个6代表当前用户权限,第二个代表同组用户权限,第三个6代表其他用户权限;

  • test2共享目录
mkdir /home/nfs/disk-test2
chmod 666 /home/nfs/disk-test2
1.3. 修改nfs配置文件
#如果没有,则自行创建即可
vim /etc/exports

在文件中添加

#也可用192.168.1.* ,用于访问控制,只有在该IP段的机器才可以访问,* 不做ip控制
/home/nfs/disk-test1 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/home/nfs/disk-test2 *(rw,sync,no_subtree_check,no_root_squash)
参数作用
ro只读(read only)
rw读写(read write)
root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(nobody)
no_root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
syncNFS先写入缓存(内存),再同步到稳定存储(硬盘),sync表示写入硬盘成功后,才告诉客户端写入成功,保证不丢失数据,效率偏低
async写入缓存后就通知客户端写入成功,不关心硬盘是否成功;这样效率更高,但可能会丢失数据
secureNFS客户端必须使用NFS保留端口(通常是1024以下的端口),默认选项
insecure允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)
anonuid指定匿名用户的uid,默认指向nobody
anongid指定匿名用户的gid, 即组id,默认指向nobody组

客户机和NFS服务器之间人员映射规则:linux系统有严格的人员权限控制,那么客户机用什么角色访问NFS服务器呢?这就有一套映射规则

  • root用户的映射由配置决定(root_squash);
  • 非root用户,先映射为有相同UID的,如果没有,则映射为匿名用户nobody,即:两台机器上,UID相同的互为映射,不同的映射为nobody;
1.4. 开启服务
  • 启动服务
#启动rpc服务
systemctl start rpcbind 
#启动nfs服务
systemctl start nfs-server # nfs服务名称和版本相关,有的版本是 nfs

查看是否成功运行

showmount -e 
Export list for localhost:
/home/nfs/disk-test2 *
/home/nfs/disk-test1 *
  • 开机启动
systemctl enable rpcbind
systemctl enable nfs-server
  • 关闭防火墙
#由于nfs使用端口不固定,因此需要关闭防火墙,如果防火墙未开启,可忽略此步
systemctl stop firewalld    #关闭防火墙
systemctl disable firewalld #关闭开机启动
systemctl status firewalld  #查看防火墙状态

启动服务后,如果再次修改了/etc/exports,可重启服务systemctl restart nfs-server或者执行 exportfs -rv,使配置生效

2. 客户端挂载

客户端查看连通性并创建本地用于挂载的目录

$ showmount -e 192.168.1.100
Export list for 192.168.1.100:
/home/nfs/disk-test2 *
/home/nfs/disk-test1 *
mkdir /nfs1
2.1 使用mount命令挂载
#挂载
mount  -t nfs  192.168.1.100:/home/nfs/disk-test1 /nfs1 
#卸载
umount /nfs1

但这种方式有个问题,重启后会失效,需要重新执行挂载命令,在生产环境,不建议使用该方式;

2.2 fstab挂载(推荐)
vim /etc/fstab
#在该文件中挂载,使系统每次启动时都能自动挂载
#在文件中添加挂载内容
192.168.1.100:/home/nfs/disk-test1 /nfs1       nfs    defaults 0 0
#保存退出 各列含义可自行百度,网上都有介绍
mount -a   #使文件/etc/fstab生效

3. 检查

  • 在客户端查看挂载情况
df -Th

在这里插入图片描述

  • 向客户端挂载目录存入文件,到服务端查看情况

三、固定端口部署(非必须)

在一些复杂场景下,有时是不能关闭防火墙的,这就需要把nfs部署为固定端口,并添加防火墙规则
场景举例:

  1. nfs服务器上部署有docker容器,docker的网络映射依赖防火墙,如果不开启防火墙,容器会启动失败;
  2. 在做等保测评时,要求服务器必须开启防火墙
  3. 生产环境不建议关闭防火墙;

1. 查看服务端nfs端口使用情况

rpcinfo -p #查看当前服务以及端口

在这里插入图片描述
nfs服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务,nfs 和 portmapper两个服务是固定端口,nfs为2049,portmapper为111。其他的3个服务是随机端口

2.配置NFS固定端口

2.1. 在/etc/sysconfig/nfs中添加以下设置,端口可自行选择
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
2.2. 重启rpc、nfs的配置与服务
systemctl restart rpcbind
systemctl restart nfs-server 
2.3. 在/etc/modprobe.d/lockd.conf中添加以下设置
options lockd nlm_tcpport=30002
options lockd nlm_udpport=30002
2.4. 重新加载NFS配置和服务
systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server
2.5. 查看端口情况
rpcinfo -p

在这里插入图片描述

2.6. 添加防火墙规则
firewall-cmd --add-port=30002/tcp --add-port=30002/udp --permanent
firewall-cmd --add-port=111/tcp --add-port=2049/tcp --permanent
……
#依次把所有用到的端口和协议都添加完成,这里不在赘述,添加完成后,重新加载

firewall-cmd --reload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI+OCR赋能古彝文数字化—让经典重新跳动

1️⃣ 彝文与古彝文概况文化是一个民族社会历史发展到一定程度的产物,代表着文明发展的程度,而文字是文化的一种载体,文字的出现是社会进入文明阶段的重要标志之一,其生动记录着一个民族的智慧成果,深刻反映着一个民族…

Unity 3D 环境特效||Unity 3D 游戏场景设计实例

Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程。 Unity 3D 游戏开发引擎为了能够简单地还原真实世界中的场景,其中内置了雾特效并在标准资源包中添加…

mmLab系列使用方法

mmLab系列使用方法环境搭建mmdetection检查数据集运行部署mmdeploy环境搭建使用mmOCRmmsegmentation环境搭建 Windows最推荐安装方法: 首先需要查好自己gpu的CUDA版本,根据版本到pytorch官方网站查找对应的pytorch版本(!!!只查找不下载!)ht…

Mybatis源码分析(七)MapperMethod的INSERT分析

目录一 INSERT 语句1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 不同的执行器获取不同的StatementHandler1.5 根据参数获取BoundSql1.6 执行器配置参数处理器ParameterHandler1.7 拿到StatementHandl…

人工智能-http协议和静态服务器

目录1、HTTP协议1.1 网址1.2 http协议的介绍1.3 http请求报文1.4 http响应报文1.5查看http协议的通信过程2、静态web服务器程序开发2.1 搭建python自带的静态web服务器2.2 静态web服务器-返回固定页面数据1、HTTP协议 1.1 网址 网站又称为U…

【报错】assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))

🌱 hi,最近开始写嵌入式,碰到蛮多新的问题,也调bug到凌晨五点过。欢迎关注我,一起讨论交流 开发环境 在VScode中使用Arduino,开发板ESP32S3 报错代码 使用队列接收服务器消息,FIFO依次处理消…

ROS1学习笔记:参数的使用与编程方法(ubuntu20.04)

参考B站古月居ROS入门21讲: 参数的使用与编程方法 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、概念图讲解二、创建功能包三、参数命令行的使用方法:rosparam显示某个参数值:rosparam get设定某个参数值:rosparam set将…

linux小程序—进度条(动态演示)

文章目录1. \n与\r的区别1. linux环境下2. windows环境下2. 缓冲区问题1.\n的情况2.\r的情况3. \n与\r的情况对比4. 使用fflush函数观察\r情况5. 不为\n与\r的情况3.进度条的实现1. printf 打印字符问题1. 修改前2.修改后2 . 注意事项3. 整体实现1. makefile(自动化编译工具&am…

一篇文章教会你Linux下《常用操作指令》

基本指令首言ls(查看目录)pwds(显示用户当前所在目录)cd(改变工作目录)mkdir(创建目录)rmdir(删除目录)touch (新建文件或更新文件时间&#xff0…

【Python】获取视频弹幕并生成词云

目录一、摘要二、获取目标视频cid三、获取视频弹幕xml文件四、处理弹幕文件五、生成词云六、完整参考代码一、摘要 就是那个大家都用的弹幕视频网站,不写名字了,写了老是不能通过。 获取视频的弹幕文件(xml),并生成如图…

认真分享一个让我变厉害的小建议

很多朋友,加我好友之后,第一句话通常是:我想提高英语,有什么资料推荐? 这要看你学英语的目的了。 我们学英语是为了什么? 理由可能很多,我就说个最俗的目的吧,为了发财。 想发财应向谁学习&…

代码随想录第31天|● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455.分发饼干 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 可以尝试使用贪心策略&#xf…

[ 数据结构 ] 最小生成树(MST)--------普里姆算法、克鲁斯卡尔算法

0 修路问题 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边&a…

Java常用工具类方法(上)

1. Collections首先出场的是java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合&#xff0c;我个人非常喜欢用它。1.1 排序在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的&#xff1a;List<Integer> list new…

揭秘链动2+1商业模式玩法

链动21模式主要是打造裂变团队的同时又能快速地将平台销售额提升起来&#xff0c;链动模式可以说颠覆传统的分销&#xff0c;算是一个创新更能吸引用户&#xff0c;稳住会员&#xff0c;拓展新客户的商业模式。 链动21模式有两个身份&#xff0c;分别是代理和老板 【代理商】…

Java高手速成 | 高质量代码编写最佳实践

程序员之间交流时&#xff0c;会经常使用非程序员无法理解的行话&#xff0c;或者使用令操不同编程语言的程序员理解起来比较模糊的行话。 但是&#xff0c;那些操相同编程语言的程序员理解起来不会产生什么问题。 这有时也取决于程序员所掌握知识的渊博程度。 一个新手或许不理…

以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤&#xff0c;将模型部署到生产环境中。本节以 Animated Drawings APP 为例&#xff0c;实际演示 TorchServe 的模型优化效果。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 去年&#xff0c;Meta 凭借 Animate…

win系统重装系统后提示 BitLocker(磁盘加密)密钥查找及如何关闭

文章目录前言如何找到恢复秘钥&#xff0c;解锁磁盘1、打开链接&#xff1a;[https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key](https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key)2…

Nuxt3+ElementPlus构建打包部署手记

文章目录为何选Nuxt.js?工程package.json参考目录结构页面之间的关系几个主要命令动态组件获取后台数据SSR打包方式部署参考文档为何选Nuxt.js? 在前后端分离出现之前&#xff0c;传统的web页面都是服务端渲染的&#xff0c;如JSP、PHP、Python Django&#xff0c;还有各种模…

06【Filter】

文章目录06【Filter】一、过滤器简介1.1 Filter概述1.2 Filter的使用1.2.1 Filter快速体验1.2.2 XML配置Filter1.2.3 Filter的拦截规则1.3 Filter的生命周期1.3.1 Filter生命周期介绍1.3.2 Filter生命周期相关方法1.3.3 FilterConfig类1.4 Filter的拦截方式1.4.1 REQUEST1.4.2 …