NFS实验

devtools/2025/3/10 20:22:18/

NFS_0">1.NFS

1.1 案例

要设置NFS共享,需要至少两台 Linux/Unix 机器。下面使用两台服务器来演示 NFS 安装、配置及使用。

角色IP主机名系统
服务器192.168.88.113nfs-serverRHEL9
服务器192.168.88.114nfs-clientRHEL9

1.2 实现

1.2.1 克隆两台服务器

服务器端和客户端按照同样步骤克隆,只需要修改名字和存放位置即可
在这里插入图片描述
单击右键(红色框位置)→ 选择管理 → 克隆
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改名字和位置,点击完成即可

1.2.2 配置仓库

两台虚拟机中都要执行

在nfs-server虚拟机上配置好本地仓库

[root@localhost ~]# vi /etc/yum.repos.d/dnf.repo
[root@localhost ~]# cat /etc/yum.repos.d/dnf.repo 
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0root@localhost ~]# yum repolist
#用于显示已配置的 yum 软件仓库及其状态。
#Repo-id: 仓库的唯一标识符。
#Repo-name: 仓库的名称,通常比ID更具描述性。
#Status: 表示仓库的状态,通常是启用(Enabled)或禁用(Disabled)。
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.repo id                                            repo name
AppStream                                          AppStream
BaseOS                                             BaseOS[root@localhost ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@localhost ~]# ls /mnt
AppStream  EULA              images      RPM-GPG-KEY-redhat-beta
BaseOS     extra_files.json  isolinux    RPM-GPG-KEY-redhat-release
EFI        GPL               media.repo

然后将这个仓库复制到nfs-client虚拟机中

[root@localhost ~]# scp /etc/yum.repos.d/dnf.repo root@192.168.88.135:/etc/yum.repos.d/
# scp: 发起安全复制请求的命令,基于SSH协议实现文件的安全传输。
# /etc/yum.repos.d/dnf.repo: 这是要复制的源文件路径。在这个例子中,是从本地机器上的 /etc/yum.repos.d/ 目录复制名为 dnf.repo 的文件。
# root@192.168.88.135: 指定目标主机的信息。
# :/etc/yum.repos.d/: 这是目标路径,表示将文件复制到远程服务器上的 /etc/yum.repos.d/ 目录下。The authenticity of host '192.168.88.135 (192.168.88.135)' can't be established.
ED25519 key fingerprint is SHA256:Rp6b3SoxbEe3x+BcVICF5OXozv2NHqCe6x1Y5ma+r5k.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.88.135' (ED25519) to the list of known hosts.
root@192.168.88.135's password: 
dnf.repo                                                  100%  113    41.7KB/s   00:00   

1.2.3 安装基本软件且设置主机名

两台系统都要执行

选择查看 → 撰写 → 撰写栏,就可以在撰写栏中输入指令在两台虚拟机中同时执行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@localhost ~]#  dnf install net-tools wget curl bash-completion vim -y

设置主机名,一台为nfs-server,另一台为nfs-client

[root@localhost ~]# hostnamectl hostname nfs-server
[root@localhost ~]# hostnamectl hostname nfs-client

1.2.4 设置ip

两台虚拟机都要执行,注意ip段要是自己的比如我的是88

# 配置服务器IP
[root@nfs-server ~]# nmcli c modify ens160 ipv4.method manual ipv4.address 192.168.88.113/24 ipv4.dns 223.5.5.5 ipv4.gateway 192.168.88.2 connection.autoconnect yes# nmcli c modify ens160:c 是 connection 的缩写,表示您将要对一个网络连接进行操作。modify ens160 表示您希望修改名称或ID为 ens160 的网络连接配置。
# ipv4.method manual:设置IPv4的配置方法为手动(manual),
# ipv4.address 192.168.88.113/24:指定静态IPv4地址为 192.168.88.113,子网掩码为 /24(即255.255.255.0)。这意味着它位于192.168.88.0这个子网内。
# ipv4.dns 223.5.5.5:配置首选DNS服务器的地址为 223.5.5.5。这是一个公共DNS服务地址,由阿里云提供,用于域名解析。选择这个DNS服务器是因为它能够提供稳定且快速的域名解析服务。
# ipv4.gateway 192.168.88.2:设置默认网关的IP地址为 192.168.88.2。
# connection.autoconnect yes:设置此连接在系统启动时自动连接,确保在网络服务启动时该网络接口能自动获取配置并连接到网络。
[root@nfs-server ~]# nmcli c up ens160 #使用该命令连接端会断掉,需要重新连接
[root@nfs-server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:37:20:d0 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.88.113/24 brd 192.168.88.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe37:20d0/64 scope link noprefixroute valid_lft forever preferred_lft forever# 配置客户端IP
[root@nfs-client ~]# nmcli c modify ens160 ipv4.method manual ipv4.address 192.168.88.114/24 ipv4.dns 223.5.5.5 ipv4.gateway 192.168.88.2 connection.autoconnect yes
[root@nfs-client ~]# nmcli c up ens160

1.2.5 安装nfs服务

在两台系统中都要执行。
要重新挂载

 mount /dev/sr0 /mntdnf install nfs-utils -y

1.2.6 启动服务

在两台系统中都要执行。

[root@nfs-server ~]# systemctl enable --now nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.#查看服务是否启动成功
[root@nfs-server ~]# systemctl status nfs-server
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: disabled)Active: active (exited) since Sun 2025-03-09 11:46:47 CST; 2min 13s agoDocs: man:rpc.nfsd(8)man:exportfs(8)Process: 14283 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)Process: 14284 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)Process: 14303 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload >Main PID: 14303 (code=exited, status=0/SUCCESS)CPU: 41msMar 09 11:46:47 nfs-server systemd[1]: Starting NFS server and services...
Mar 09 11:46:47 nfs-server systemd[1]: Finished NFS server and services.# 查看端口
[root@nfs-server ~]# netstat -lntup | grep 2049 
#或者ss -lntup | grep 2049
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
[root@nfs-server ~]# netstat -lntup | grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd           
udp6       0      0 :::111                  :::*                                1/systemd  [root@nfs-server ~]# ps -ef |grep nfs
# 用于显示与 NFS(网络文件系统)相关的进程信息
root         856       1  0 11:52 ?        00:00:00 /usr/sbin/nfsdcld
root        1255       2  0 11:52 ?        00:00:00 [nfsd]
root        1256       2  0 11:52 ?        00:00:00 [nfsd]
root        1257       2  0 11:52 ?        00:00:00 [nfsd]
root        1258       2  0 11:52 ?        00:00:00 [nfsd]
root        1259       2  0 11:52 ?        00:00:00 [nfsd]
root        1260       2  0 11:52 ?        00:00:00 [nfsd]
root        1261       2  0 11:52 ?        00:00:00 [nfsd]
root        1262       2  0 11:52 ?        00:00:00 [nfsd]
root        1598    1542  0 12:18 pts/0    00:00:00 grep --color=auto nfs

1.2.7 放行防火墙

在两台系统中都要执行。

[root@nfs-server ~]# firewall-cmd --permanent --add-service=nfs
success
#通过firewall-cmd工具向防火墙规则中永久添加NFS(Network File System,网络文件系统)服务。
[root@nfs-server ~]# firewall-cmd --reload
success
#重新加载防火墙配置的命令,使更改生效。[root@nfs-client ~]# firewall-cmd --permanent --add-service=nfs
success
[root@nfs-client ~]# firewall-cmd --reload
success

验证是否放行成功firewall-cmd --list-all

#未加载防火墙之前
[root@nfs-server ~]# firewall-cmd --list-all#显示当前防火墙配置详细信息
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client sshports: protocols: forward: yesmasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: #加载防火墙之后,在services栏多出了nfs
[root@nfs-server ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client nfs sshports: protocols: forward: yesmasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

linux_246">1.2.8 关闭Selinux

在两台系统中都要执行。

[root@nfs-server ~]# getenforce
Enforcing
#查询当前 SELinux 的运行模式。输出结果可能是 Enforcing, Permissive, 或者 Disabled,分别表示 SELinux 正在强制执行安全策略、仅记录违反行为而不阻止它们、或者SELinux 完全未启用。
[root@nfs-server ~]# setenforce 0#临时有效,重启后无效
#参数 0 表示将 SELinux 设置为 Permissive 模式,在 Permissive 模式下,SELinux 不会阻止任何行为,但会记录所有违反其策略的行为。
[root@nfs-server ~]# getenforce
Permissive

未避免重启服务之后无效,要在/etc/selinux/config文件中修改,如下图所示:

#服务器端
[root@nfs-server ~]# vim /etc/selinux/config
#客户端
[root@nfs-client ~]# vim /etc/selinux/config

在这里插入图片描述

NFS_270">1.2.9 配置NFS

NFS服务端完成。
1、首先创建一个用于存储文件目录

[root@nfs-server ~]# mkdir /nfs/data -p

2、将这个目录共享给客户端,编写 /etc/exports 文件,在文件中做如下的配置。

[root@nfs-server ~]# vim /etc/exports
# vim 编辑器打开了位于 /etc/ 目录下的 exports 文件。这个文件用于定义哪些目录可以通过 NFS 共享给其他机器以及设置相关的共享选项。
[root@nfs-server ~]# cat /etc/exports
/nfs/data 192.168.88.114(rw)
#/nfs/data: 这是要通过 NFS 共享的目录路径。在这个例子中,服务器上的 /nfs/data 目录将被共享。
#192.168.88.114: 这是允许访问 NFS 共享资源的客户端的 IP 地址。只有来自这个 IP 地址的请求才会被允许访问共享的目录。
#rw 表示读写权限,意味着指定的客户端既可以读取也可以写入共享目录的数据

3、暴露共享服务

# 配置好后,重启服务
[root@nfs-server ~]# systemctl restart nfs-server
# 然后暴露共享服务
[root@nfs-server ~]# showmount -e 192.168.88.113
Export list for 192.168.88.113:
/nfs/data 192.168.88.114

在客户端完成。
1、创建挂载目录

[root@nfs-client ~]# mkdir /data/nfs -p

2、将创建的目录挂载到服务端的共享目录

[root@nfs-client ~]#  mount -t nfs 192.168.88.113:/nfs/data /data/nfs
# mount: 这是 Linux 系统中用于挂载文件系统的命令。
# -t nfs: 这个选项指定了要挂载的文件系统的类型,在这里是指 NFS(Network File System)。它告诉 mount 命令接下来的参数将涉及 NFS 类型的挂载。
# 192.168.88.113:/nfs/data: 这部分指定了 NFS 服务器的 IP 地址和需要挂载的共享目录路径。在这个例子中,192.168.88.113 是 NFS 服务器的地址,/nfs/data 是该服务器上已配置为可共享的目录。
# /data/nfs: 这是本地客户端系统上的一个目录路径,作为挂载点。通过执行这条命令,NFS 服务器上的 /nfs/data 目录将会被挂载到这个位置,使得客户端可以通过访问 /data/nfs 来读取或写入 NFS 服务器上的数据。

3、查看是否挂载成功

[root@nfs-client ~]# df /data/nfs
Filesystem               1K-blocks    Used Available Use% Mounted on
192.168.88.113:/nfs/data  46587904 1755648  44832256   4% /data/nfs
# 命令用于显示文件系统的磁盘空间使用情况,特别是针对挂载在 /data/nfs 路径下的文件系统。

1.2.10 功能测试

1.2.10.1 测试客户端读
在服务器端建立1.txt
[root@nfs-server ~]# cd /nfs/data/
[root@nfs-server data]# ls
[root@nfs-server data]# touch 1.txt
在客户端查看是否有1.txt,且有无内容
[root@nfs-client ~]# ls /data/nfs/
1.txt
[root@nfs-client ~]# cat /data/nfs/1.txt在服务器端输入内容
[root@nfs-server data]# echo 1.txt > 1.txt
在客户端查看
[root@nfs-client ~]# cat /data/nfs/1.txt
1.txt
1.2.10.2 测试客户端写
客户端写入晚上好
[root@nfs-client ~]# echo  good night > /data/nfs/nihao.txt
-bash: /data/nfs/nihao.txt: Permission denied
  • 问题:我们在客户端写数据时,提示没有权限。如何解决呢?

    • 我们需要给服务端的共享目录设置权限。
[root@nfs-server /]# chmod o+rw /nfs -R
# -R这个选项表示递归地应用更改,即不仅改变指定目录本身的权限,还会对目录下的所有文件和子目录进行同样的权限修改。
[root@nfs-server data]# cd /
[root@nfs-server /]# cd /nfs
[root@nfs-server nfs]# ll -d /nfs
drwxr-xrwx. 3 root root 18 Mar  9 12:45 /nfs
三个为一组 rwx:所属用户的权限(有读、写和执行(搜索)权限);r-w:所属用户组的权限(拥有读和执行权限,但没有写权限),rwx:其他用户权限

在服务端设置好权限后,再在客户端执行如下的代码:

[root@nfs-client ~]# echo good night > /data/nfs/nihao.txt

然后在服务端查看:

[root@nfs-server /]# cd /nfs/data
[root@nfs-server data]# ls
1.txt  nihao.txt

http://www.ppmy.cn/devtools/166096.html

相关文章

探秘沃尔什-哈达玛变换(WHT)原理

沃尔什-哈达玛变换&#xff08;WHT&#xff09;起源 起源与命名&#xff08;20世纪早期&#xff09; 数学基础&#xff1a;该变换的理论基础由法国数学家雅克哈达玛&#xff08;Jacques Hadamard&#xff09;在1893年提出&#xff0c;其核心是哈达玛矩阵的构造。扩展与命名&…

【已解决】error setting certificate verify locations

vscode提交代码时&#xff0c;报错 解决 原因很简单&#xff0c;就是找不到路径中的文件。可能是你下载Git后搬迁了文件&#xff0c;导致该路径找不到。找到正确路径重新配置就行. D:/software/git/Git/mingw64/ssl/certs/ca-bundle.crt是我文件的正确路径&#xff0c;所以直接…

Deeplabv3+改进4:在主干网络中添加GAMAattention|助力涨点!

🔥【DeepLabv3+改进专栏!探索语义分割新高度】 🌟 你是否在为图像分割的精度与效率发愁? 📢 本专栏重磅推出: ✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化 ✅ 即插即用模块:ASPP+升级、解码器 PS:订阅专栏提供完整代码 目录 论文简介 步骤一 步骤二…

RBAC的工作原理,以及如何限制特定用户访问

RBAC&#xff08;Role-Based Access Control&#xff09;工作原理 RBAC 是基于角色的访问控制模型&#xff0c;通过 角色&#xff08;Role&#xff09; 和 权限&#xff08;Permission&#xff09; 的抽象层实现细粒度权限管理。其核心思想是&#xff1a; 角色定义权限&#x…

网页制作11-html,css,javascript初认识のCCS样式列表(下)

六、外边距,内边距,边框属性 盒子模型: 1、外边距:margin img{ margin:40px 30px 10px 20px; }/*外边距复合属性:上右下左*/ 2、内边距 body{ padding:10px 20px 40px 30px; }/*内边距复合属性:上右下左*/ 3、边框 1)边框样式 取…

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号&#xff0c;也即MAC地址&#xff0c;也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 &#xff08;每一个数可以用四个…

【CSS3】筑基篇

目录 复合选择器后代选择器子选择器并集选择器交集选择器伪类选择器 CSS 三大特性继承性层叠性优先级 背景属性背景色背景图背景图平铺方式背景图位置背景图缩放背景图固定背景复合属性 显示模式显示模式块级元素行内元素行内块元素 转换显示模式 结构伪类选择器结构伪类选择器…

[MERN] 使用 socket.io 实现即时通信功能

[MERN] 使用 socket.io 实现即时通信功能 效果实现如下&#xff1a; MERN-socket.io 实现即时聊天 Github 项目地址:https://github.com/GoldenaArcher/messenger-mern 项目使用了 MERN(MongoDB, Express, React, Node.js) socket.io 实现即时通信功能&#xff0c;并且使用了…