Centos7部署NFS服务

news2025/1/21 22:10:35

搭建NFS存储服务器--基于CentOS7系统 - jianmuzi - 博客园

在CentOS中搭建NFS - 陌上荼靡 - 博客园

NFS简介

NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。NFS在文件传送或信息传送过程中依赖于RPC协议。RPC (Remote Procedure Call) ——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以这么理解,NFS是一个文件存储系统,而RPC负责信息的传输。

环境准备

为了搭建并且检验NFS服务的配置,我们需要准备两台安装Linux系统(这里以Centos7为例)的服务器,一台充当NFS服务端,开放共享目录,提供NFS存储服务;一台充当NFS客户端,挂载服务端共享目录到本地,使用NFS存储服务。

表1 服务端和客户端IP配置

C/S类型

eth0 ip

服务端

192.168.203.10

客户端

192.168.203.20

环境搭建

(一)NFS服务端配置

安装软件

NFS服务端默认使用的端口:111204920048

# nfs-utils依赖rpcbind, 因此, 执行 yum -y install nfs-utils 也会安装rpcbind
yum -y install nfs-utils rpcbind

# ps: 常用目录  
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息

创建需要共享的NFS目录,并赋予相关权限

mkdir /home/nfs
chmod 777 /home/nfs

# use
mkdir /data/nfs
chmod 755 /data/nfs

配置

编辑nfs的配置文件,默认为空。

vi /etc/exports

exports文件里面填入内容(网段根据实际情况填写,地址与括号之间不能有空格,括号里面为权限属性)

/mnt/nfs_file 192.168.203.0/24(rw,no_root_squash,no_all_squash,async,anonuid=501,anongid=501)

# 示例: 挂载NFS指定为可读写的目录,并且进行同步读写,将所有root用户都映射为匿名用户
/home/nfs 192.168.203.0/24(rw,sync,root_squash)

# use
# /data/nfs 192.168.1.0/24(rw,sync,root_squash)
/data/nfs 192.168.1.0/24(rw,sync,all_squash,anonuid=0,anongid=0)

# =================== 其它参考配置 =================== #
# 如果只允许一个客户端访问,可以只写一个客户端的IP地址
/mnt/ShareFolder 192.168.43.131(rw,sync,no_subtree_check)

# 如果只允许多个客户端访问,可以向如下一样写
/mnt/ShareFolder 192.168.43.131(rw,sync,no_subtree_check)
/mnt/ShareFolder 192.168.43.171(rw,sync,no_subtree_check)
/mnt/ShareFolder 192.168.43.137(rw,sync,no_subtree_check)

# 所有用户均以匿名方式访问, 但指定以root用户和root用户组写入
/data/nfs 192.168.1.0/24(rw,sync,all_squash,anonuid=0,anongid=0)

# 如果运行一个网段的客户端访问,可以这样写:
/mnt/ShareFolder 192.168.43.*(rw,sync,no_subtree_check)
或者
/mnt/ShareFolder 192.168.43.0/24(rw,sync,no_subtree_check)

查看完整的配置参数介绍:

man exports

配置参数说明:

NFS服务端将/mnt/nfs_file目录共享出来,给192.168.203.0网段的客户端使用

权限属性说明:

  • rw , 读写
  • ro , 只读
  • no_root_squash , 不将root用户转换为匿名,当NFS客户端以root访问时,则映射为NFS服务器的root管理员; 登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。
  • root_squash , 将root用户转换为匿名,当NFS客户端以root访问时,则映射为NFS服务器对应的匿名用户。
  • no_all_squash , 所有用户都不转换为匿名用户,无论NFS客户端使用什么账户访问,原样映射为对应用户身份。
  • all_squash , 所有用户都转换为匿名用户,无论NFS客户端使用什么用户访问,均映射为NFS服务器的匿名用户。不管登陆NFS主机的用户是什么都会被重新设定为nobody。
  • sync , 同步模式,将数据写入内存并同步写入磁盘;
  • async , 异步即不同步写入磁盘, 先将数据写入内存,然后再定期写入磁盘;
  • anonuid=xxx , 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID,要和root_squash 以及all_squash一同使用并生效
  • anongid=xxx , 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID,要和root_squash 以及all_squash一同使用并生效

tip:

如果有多个共享目录配置,则使用多行,一行一个配置。

编译配置

exportfs -r 
# or
exportfs -arv

# ===================== 命令说明 ===================== #
$. exportfs [-aruv]
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在export的时候,将详细的信息输出到屏幕上。

具体例子:
$. exportfs -au # 卸载所有共享目录
$. exportfs -rv # 重新共享所有目录并输出详细信息

启动nfs

(1)顺序启动
systemctl start rpcbind
systemctl status rpcbind

systemctl start nfs
systemctl status nfs
# or,两者等价
systemctl start nfs-server

NFS启动后状态:

(2)加入开机自启
systemctl enable rpcbind 

systemctl enable nfs

校验配置

$. showmount -e localhost
# 输出
Export list forlocalhost:
/mnt/nfs_file 192.168.203.0/24

# use
# 检查是否存在共享目录
showmount -e
showmount -e localhost
showmount -e 172.17.0.15

指定NFS通信端口(选做)

# 由于nfs服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务
# 1. 修改 /etc/sysconfig/nfs 配置
$. vi /etc/sysconfig/nfs
# 在文末加入
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
STATD_OUTGOING_PORT=30005

# 2. 修改 /etc/modprobe.d/lockd.conf 配置
$. vi /etc/modprobe.d/lockd.conf
# 在/etc/modprobe.d/lockd.conf中添加以下设置:
options lockd nlm_tcpport=30002
options lockd nlm_udpport=30002

# 3. 重新加载NFS配置和服务:
systemctl restart rpcbind
systemctl restart nfs
systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock

# 4.  
rpcinfo -p

指定NFS相关服务的端口,便于Firewall防火墙开放端口。

注:其实,这里也可以不用配置,即不指定端口,那么配置Firewalld防火墙时,需要放过特定IP。

重启服务

systemctl restart rpcbind
systemctl restart nfs
systemctl restart nfslock

# 查看状态
systemctl status rpcbind
systemctl status nfs
systemctl status nfslock

使用rpcinfo -p查看并验证

rpcinfo -p
rpcinfo -p 192.168.1.161

会出现

  program vers proto  port service
  100000  4  tcp  111 portmapper
  100000  3  tcp  111 portmapper
  100000  2  tcp  111 portmapper
  100000  4  udp  111 portmapper
  100000  3  udp  111 portmapper
  100000  2  udp  111 portmapper
  100005  1  udp 30003 mountd
  100005  1  tcp 30003 mountd
  100005  2  udp 30003 mountd
  100005  2  tcp 30003 mountd
  100005  3  udp 30003 mountd
  100005  3  tcp 30003 mountd
  100003  3  tcp  2049 nfs
  100003  4  tcp  2049 nfs
  100227  3  tcp  2049 nfs_acl
  100003  3  udp  2049 nfs
  100003  4  udp  2049 nfs
  100227  3  udp  2049 nfs_acl
  100021  1  udp 30002 nlockmgr
  100021  3  udp 30002 nlockmgr
  100021  4  udp 30002 nlockmgr
  100021  1  tcp 30002 nlockmgr
  100021  3  tcp 30002 nlockmgr
  100021  4  tcp 30002 nlockmgr
  100024  1  udp 30004 status
  100024  1  tcp 30004 status

防火墙开放端口或IP

如果firewall防火墙开着,需要把111,2049,30001到30005的端口都开放出来

firewall-cmd --add-port={111,2049,30001,30002,30003,30004,30005}/tcp  --permanent
firewall-cmd --add-port={111,2049,30001,30002,30003,30004,30005}/udp  --permanent
firewall-cmd --reload

注:如果未指定NFS端口,那么应配置firewall防火墙,放过192.168.203.0/24段的ip

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.203.0/24" accept"
firewall-cmd --reload

其它防护墙配置示例参考:

如果执行上述的mount命令一直处于等待状态,可能是服务器上启用了防火墙或者是云服务器本身的防火墙限制了端口的访问,需要在NFS服务端开放以下端口号的访问权限:111204920048。如果是云服务器可以到各自的网站后台去配置防火墙策略,如果是本地的机器可以使用以下命令开放指定的端口。

firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --zone=public --add-port=20048/udp --permanent
firewall-cmd --reload

上述端口信息都可以在以下文件中查找到

/usr/lib/firewalld/services/nfs.xml
/usr/lib/firewalld/services/rpc-bind.xml
/usr/lib/firewalld/services/mountd.xml

如果你不关心具体的端口号,也可以直接使用以下命令,直接根据配置文件放行相应的端口

firewall-cmd --zone=public --add-service=nfs --permanent
firewall-cmd --zone=public --add-service=rpc-bind --permanent
firewall-cmd --zone=public --add-service=mountd --permanent
firewall-cmd --reload

(二)NFS客户端配置

  • 重要说明:
通过容器部署的nfs服务, 其它同一宿主机的nfs客户端容器挂载该nfs服务时, 只能通过nfs服务所在的 容器的ip地址挂载,若是其它主机或者其他宿主机上的容器, 则均可以通过nfs服务容器所在的宿主机的ip地址挂载。
# 这里使用docker创建的centos容器环境, 已有自己的环境可忽略本内容。
docker run -d \
--privileged \
--name nfs_client \
centos:centos7.9.2009 /usr/sbin/init 

docker exec -it nfs_client bash

1. 安装nfs

云平台管理服务器也需要安nfs但无需启动

yum -y install nfs-utils rpcbind

2. 查看服务端挂载的目录

showmount -e 192.168.203.10
# 可以看到
Export list for192.168.203.10:
/mnt/nfs_file      192.168.203.0/24

# use
showmount -e
showmount -e 192.168.1.161
showmount -e 172.17.0.15
# ----------
showmount -e 172.17.0.2
showmount -e 192.168.31.133

3. 挂载共享目录

mkdir /mnt/file_nfc
chmod 777 /mnt/file_nfc
mount -t nfs 192.168.203.10:/mnt/nfs_file /mnt/file_nfc -o proto=tcp -o nolock
# or
mount -t nfs 192.168.203.10:/mnt/nfs_file /mnt/file_nfc

# 如若不再需要可以使用以下命令卸载NFS目录
umount /mnt/file_nfc

# use
mkdir /data -p
chmod 777 /data
mount -t nfs 172.17.0.15:/data/nfs /data -o proto=tcp -o nolock
mount -t nfs 192.168.1.161:/data/nfs /data -o proto=tcp -o nolock
# -----------
mount -t nfs 172.17.0.2:/data/nfs /data -o proto=tcp -o nolock
mount -t nfs 192.168.31.133:/data/nfs /data -o proto=tcp -o nolock
umount /data

同时把这一行加到/etc/rc.local文件的最后,即加入开机启动

  • 或者

修改开机自动挂载文件/etc/fatsb,末行填入如下内容:

192.168.203.10:/mnt/nfs_file /mnt/file_nfc nfs defaults,tcp,nolock 0 0

4.查看挂载盘

# 最后一行显示192.168.203.10:/mnt/nfs_file /mnt/file_nfc,说明挂载成功了
$. df –h
# 输出
Filesystem            Size Used Avail Use% Mounted on
devtmpfs             7.8G   0 7.8G  0% /dev
tmpfs              7.8G 1.4M 7.8G  1% /run
/dev/vda1            197G  53G 134G 29% /
192.168.203.10:/mnt/nfs_file   197G  66G 122G 35% /mnt/file_nfc

5. 验证

在客户端本地/mnt/file_nfc目录中放入一个文件(如a.txt),然后去服务端的/mnt/nfs_file目录中查看,若存在a.txt,则说明配置成功

其他命令

# 在服务端执行,查看nfs状态信息
nfsstat -s

# 在客户端执行,查看nfs挂载信息
nfsstat -m

# 查看服务端的远程共享信息,此命令会调用服务端的20048端口
showmount -e 192.168.202.151

# 查看rpcbind注册的所有端口号
rpcinfo -p
rpcinfo -p 192.168.1.161

# 在服务端执行,重新挂载/etc/exports中配置
exportfs -r

问题

5.1 跨网段执行showmount不通的解决办法

# server端执行
# 1. 修改mountd端口号
$. vi /etc/sysconfig/nfs
# 添加
MOUNTD_PORT=40048

# 2. 重启并查看是否生效
$. systemctl restart rpcbind
$. systemctl restart nfs
$. rpcinfo -p

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

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

相关文章

6.1810: Operating System Engineering 2023 <Lab3: page tables>

一、本节任务 实验环境: 二、要点 如何防止程序破坏内核或其他进程空间?隔离地址空间,进程只能读写自己的内存空间。 在保证隔离的同时,如何将多个地址空间复用到一个物理内存上?虚拟内存/页表。操作系统通过页表来为…

BUUCTF 加固题 babypython WriteUp

原题wp参考链接:https://www.cnblogs.com/karsa/p/13529769.html 这是CISCN2021 总决赛的题,解题思路是软链接zip 读取文件,然后伪造admin的session读取flag 回到buuctf的这个题: ssh连上去,查看 文件 /app/y0u_fou…

分割算法-大津算法

分割算法-大津算法 一、什么是大津算法二、算法原理三、公式推导四、代码五、算法适用性 大津算法介绍以及C函数代码实现。 一、什么是大津算法 大津算法(Otsu)由日本学者大津展之在1979年提出,又称最大类间方差法。此法求得的阈值&#xff…

Lidar-SLAM的历史与现状

文章:LiDAR-based SLAM for robotic mapping: state of the art and new frontiers 作者:Xiangdi Yue and Miaolei He 编辑:点云PCL 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享&#xff0c…

MOS管加三个元件就组成BUCK电路,为何说难点在于电感?

只要是电子产品就需要供电,就离不开电源,那什么是电源:小到手表中的电子,遥控器的电源,大到220V家庭用电,都可以看做是电源。然而在我们的电路设计中,会用到各种芯片,各种芯片所需要…

什么是呼叫中心的语音通道?呼叫中心语音线路有几种?

什么是呼叫中心的语音通道? 呼叫中心的语音通道是指在呼叫中心中使用的语音信号传输通道,它是呼叫中心中至关重要的一部分,负责将客户的语音信息传递给客服代表,以及将客服代表的语音信息传递给客户。在呼叫中心的运营中&#xf…

探索鸿蒙 DevEcoStudio汉化+运行报错

在下载好软件,摸索着成功创建了一个项目的时候,点击运行,竟然失败了。而且一大堆的英文也不知道从何入手,从网上搜了一下,找到了汉化的办法,并且解决了问题。我这里走的是Mac的步骤,微软的其实一…

软件科技成果鉴定测试需提供哪些材料?

为了有效评估科技成果的质量,促进科技理论向实际应用转化,所以需要进行科技成果鉴定测试。申请鉴定的科技成果范围是指列入国家和省、自治区、直辖市以及国务院有关部门科技计划内的应用技术成果,以及少数科技计划外的重大应用技术成果。   …

LIO-SAM如何存储地图

1. 需要修改配置文件config/params.yaml文件的参数: savePCD: true # https://github.com/TixiaoShan/LIO-SAM/issues/3 savePCDDirectory: "/zoe/ws_lio_sam/src/LIO-SAM/map" 2.保存地图: source deve…

重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了

本文来自DataLearnerAI官方网站:重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/105170187…

西工大计算机学院计算机系统基础实验一(函数编写11~14)

稳住心态不要慌,如果考试周冲突的话,可以直接复制这篇博客和上一篇博客西工大计算机学院计算机系统基础实验一(函数编写1~10)-CSDN博客最后的代码,然后直接提交,等熬过考试周之后回过头再慢慢做也可以。 第…

1.2 C语言简介

一、为什么要讲C语言 C语言是编程界的长青藤,可以查看语言排名发现,虽然现在语言很多,但是C语言一直占有一定地址 来源网站:https://www.tiobe.com/tiobe-index/ 在系统、嵌入式、底层驱动等领域存在一定的唯一性(C语…

MIT6.5840-2023-Lab1: MapReduce

前置知识 MapReduce:Master 将一个 Map 任务或 Reduce 任务分配给一个空闲的 worker。 Map阶段:被分配了 map 任务的 worker 程序读取相关的输入数据片段,生成并输出中间 k/v 对,并缓存在内存中。 Reduce阶段:所有 ma…

【LeetCode刷题-链表】--92.反转链表II

92.反转链表II /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ cla…

Java第二十一章网络通信

一、网络程序设计基础 1、局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机,如下图所示。 2、网络协议 1.IP协议 IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的…

基于NIQE算法的图像无参考质量评价算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 空域NSS特征提取 4.2 图像块选取 4.3 MVG模型 4.4 NIQE指标 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 clc; clear; close all; …

Python推导式详细讲解

更多资料获取 📚 个人网站:ipengtao.com 在Python中,推导式是一种简洁而强大的语法特性,可以用来创建列表、集合、字典等数据结构。本文将深入探讨Python中的三种推导式:列表推导式、集合推导式和字典推导式&#xff…

pytorch中的transpose用法

注意:维数从0开始,0维 1维2维…,负数代表从右往左数,-1代表第一维,以此类推 import torch import numpy as np# 创建一个二维数组 arr torch.tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]]) print("原始数组:"…

resnet 图像分类的项目

1. 项目文件 文件下载资源:resnet 图像分类的项目代码 本章利用reset34 作图像分类,包括计算训练集和测试集的loss、accuracy曲线,对训练好的网络在训练集测试集上求混淆矩阵 data 文件为训练集测试集,图像按照文件夹摆放inferenc…

电源滤波器如何检测?ATECLOUD-POWER电源自动测试软件如何助力?

电源滤波器常用来对电源中的纹波和干扰信号进行滤波,从而确保元器件不受损坏,是保证系统稳定性的重要方法。因此电源滤波器测试是非常重要的,通过检测来评估其质量、性能和稳定性,从而使电源滤波器可以稳定工作,进行滤…