3-1 NFS网络文件系统 虚拟机准备 公共步骤:详见0-1。后面章节中不再重复描述。 (可选,本节nfs软件已经被系统内置不需要换源、安装。但其它步骤如桥接 需要做。)
简介 NFS: (Network File System)Sun公司于1984年推出了一个在整个计算机工业中被广泛接受的远程文件存取机制,它被称为Sun的网络文件系统(Network File System),或者简称为NFS。 该机制允许在一台计算机上运行一个服务器,使对其上的某些或所有文件都可以进行远程存取,还允许其他计算机上的应用程序对这些文件进行存取。 它使我们能够达到文件的共享。当使用者想用远端档案时只要用mount命令就可把remote档案系统挂接在自己的档案系统之下,使得远端的文件操作上和本地机器的文件没两样。
RPC: (Remote Procedure Call Protocol)远程过程调用协议,用于不同服务间进行通信。NFS依赖RPC协议。
(可选)安装 (机房安装系统镜像时的向导中选择包含基础软件,nfs-utils已经被预装。下面展示未预装的系统中的安装过程) 需要安装两个软件包rpcbind 和nfs-utils 。
(可选)验证是否已安装,有返回信息代表已经安装,无返回信息为未安装:
yum list installed |grep rpcbind
yum list installed |grep nfs-utils
(可选,因为nfs-util依赖rpcbind)安装rpcbind:
yum install rpcbind
安装nfs-utils:
yum install nfs-utils
Last metadata expiration check: 0:17:01 ago on Tue 08 Oct 2024 09:09:43 PM EDT.
Dependencies resolved.
==========================================================================================================
Package Architecture Version Repository Size
==========================================================================================================
Installing:
nfs-utils x86_64 1:2.3.3-46.el8 baseos 500 k
Installing dependencies:
gssproxy x86_64 0.8.0-19.el8 baseos 119 k
keyutils x86_64 1.5.10-9.el8 baseos 66 k
libverto-libevent x86_64 0.3.0-5.el8 baseos 16 k
rpcbind x86_64 1.2.5-8.el8 baseos 70 k
Transaction Summary
==========================================================================================================
Install 5 Packages
Total download size: 770 k
Installed size: 2.0 M
Is this ok [y/N]: y
按y 后↵ 确认继续安装。
Is this ok [y/N]: y
Downloading Packages:
(1/5): libverto-libevent-0.3.0-5.el8.x86_64.rpm 31 kB/s | 16 kB 00:00
(2/5): gssproxy-0.8.0-19.el8.x86_64.rpm 160 kB/s | 119 kB 00:00
(3/5): keyutils-1.5.10-9.el8.x86_64.rpm 89 kB/s | 66 kB 00:00
(4/5): rpcbind-1.2.5-8.el8.x86_64.rpm 438 kB/s | 70 kB 00:00
(5/5): nfs-utils-2.3.3-46.el8.x86_64.rpm 242 kB/s | 500 kB 00:02
----------------------------------------------------------------------------------------------------------
Total 298 kB/s | 770 kB 00:02
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: rpcbind-1.2.5-8.el8.x86_64 1/5
Installing : rpcbind-1.2.5-8.el8.x86_64 1/5
Running scriptlet: rpcbind-1.2.5-8.el8.x86_64 1/5
Installing : libverto-libevent-0.3.0-5.el8.x86_64 2/5
Installing : gssproxy-0.8.0-19.el8.x86_64 3/5
Running scriptlet: gssproxy-0.8.0-19.el8.x86_64 3/5
Installing : keyutils-1.5.10-9.el8.x86_64 4/5
Running scriptlet: nfs-utils-1:2.3.3-46.el8.x86_64 5/5
Installing : nfs-utils-1:2.3.3-46.el8.x86_64 5/5
Running scriptlet: nfs-utils-1:2.3.3-46.el8.x86_64 5/5
Verifying : gssproxy-0.8.0-19.el8.x86_64 1/5
Verifying : keyutils-1.5.10-9.el8.x86_64 2/5
Verifying : libverto-libevent-0.3.0-5.el8.x86_64 3/5
Verifying : nfs-utils-1:2.3.3-46.el8.x86_64 4/5
Verifying : rpcbind-1.2.5-8.el8.x86_64 5/5
Installed:
gssproxy-0.8.0-19.el8.x86_64 keyutils-1.5.10-9.el8.x86_64 libverto-libevent-0.3.0-5.el8.x86_64
nfs-utils-1:2.3.3-46.el8.x86_64 rpcbind-1.2.5-8.el8.x86_64
Complete!
[root@localhost ~]#
从返回信息中看到下载并安装了一些依赖库。
准备共享文件夹 创建一个目录/share作为待共享区域 mkdir /share
(可选)验证ls /
看share文件夹是否已经创建。
创建测试文件或从宿主机复制到虚拟机 cd /share
touch abc.txt
touch cde.mp4
准备一台客户机,几种方式任选其一:
检查服务器和客户机处于同一网段下,记下服务端IP地址
nmcli | grep 172.
每间教室每台机器ip不同,本文中假设 : 服务端 172.31.5.100 客户端 172.31.5.101 掩码 255.255.255.0 网关 172.30.130.254。
配置 vim或nano编辑nfs配置文件**/etc/exports**,中配置挂载目录、允许的客户机ip地址段、权限。 (有一点不太好的地方是软件包名、配置名、服务名并不一致不方便记忆,可能与软件发明较早有关。现在的软件通常软件名、服务名、配置名三者一致。)
编辑配置文件
nano /etc/exports
配置文件默认空,添加共享目录、允许的客户端ip地址段、客户端对目录权限。
/share *(ro)
/share 表示服务端等待共享的目录。 * 表示允许所有ip的客户机访问,为了避免ip配置不正确这里允许所有。如果配成 172.31.6.0/24 表示允许某个ip段范围内的客户机访问目录。在其它软件中往往0.0.0.0表示允许所有ip,但nfs中用*
表示允许所有客户端ip。 *(ro)*表示read only客户端挂载后能读不能写。 每条规则写一行,多个文件夹不同权限写多行。
启动服务 启动两个服务,服务名为rpcbind 和nfs-server 。rpc负责通讯,nfs负责软件功能。
使用系统管理命令systemctl启动它们:
(可选)查看当前服务状态:
systemctl status rpcbind
systemctl status nfs-server
返回信息中关注状态active(running)/active(existed)/inactive(dead)
Active: inactive (dead)
如果服务未启动则启动 systemctl start nfs-server
再次验证服务状态 systemctl status nfs-server
本节中rpcbind的状态应该为*active(running) 持续监听,nfs-server的状态应该为 active(existed)*且没有错误信息 ,existed状态码为SUCCESS。
这里列出一种错误情况,虽然状态为Active但报错exportfs: Failed to stat /share: No such file or directory,没有创建共享文件夹。 ```text Active: active (exited) since Tue 2024-10-08 23:25:00 EDT; 11s ago Process: 158025 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy> Process: 158009 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 158008 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE) Oct 08 23:24:59 bogon exportfs[158008]: exportfs: Failed to stat /share: No such file or directory ```
(可选)如果配置出错,修改配置后需要重启服务
systemctl restart nfs-server
查看可挂载的目录 exportfs命令是nfs-utils软件中带的管理共享目录和配置文件的命令,不跟参数时输出当前可供挂载的目录。
exportfs
返回
/share <world>
说明配置文件和服务启动都没问题
放通服务端口 (未来每节中均有此步骤,后面不再重复叙述) 标准的做法是开启防火墙和selinux的状态下放通nfs服务端口,这里为了方便直接关闭掉安全服务。
关闭防火墙
systemctl stop firewalld
(可选,因为机房电脑会还原)关闭防火墙随系统自启
systemctl disable firewalld
关闭SeLinux:
(可选,nfs不受此影响,下节课的samba必需关闭)
setenforce 0
至此服务端结束。
客户端挂载 找另一台电脑做客户端 ,客户端虚拟机也选择桥接 ,查看两者的IP确保在同一网段中,记录下服务器IP。
查看IP
nmcli
机房电脑桥接IP以172开头,本节中假设 为172.31.5.100 。
测试客户端到服务端的连通性
ping 172.31.5.100
ctrl+C 终止无限发包。 如果不通,检查客户端的网络ip地址是否与服务端在同一网段下,客户端ip假设为*172.31.5.101*,两者ip前三段应该一致。 ping通并不代表最终能成功,还跟端口通不通和nfs服务是否成功有关。
创建挂载节点文件夹
mkdir /mnt/share
客户端 挂载服务端的/share目录 共享即映射 远程服务器/share ➡️ 客户机/mnt/share。
mount 172.31.5.100:/share /mnt/share
无返回消息为成功。
🎉结果,可以在客户机上访问服务机上的文件
ls /mnt/share
返回服务机/share目录中的文件
1.txt 2.mp4
命令一览 课上实现成功的命令代码,供参考。
服务端:
[root@localhost ~]# history
1 nmcli
2 ping jd.com
3 sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
4 sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.cloud.tencent.com|g" /etc/yum.repos.d/CentOS-*
5 yum makecache
6 yum install nfs-utils
7 mkdir /share
8 touch /share/1.txt
9 touch /share/2.mp4
10 ls /share
11 ll /share
12 nmcli | grep 172.
13 cat /etc/exports
14 nano /etc/exports
15 cat /etc/exports
16 systemctl status rpcbind
17 systemctl status nfs-server
18 systemctl start nfs-server
19 systemctl status nfs-server
20 exportfs
21 systemctl stop firewalld
22 setenforce 0
23 history
客户端:
ping 172.31.5.100
mkdir -p /mnt/share
mount 172.31.5.100:/share /mnt/share
ls /mnt/share
作业 完成以上流程。做完叫我,服务端展示代码历史history,客户端展示已挂载的目录和目录下的文件。 (推荐)两人一组完成。或一人使用两台电脑机房有多余的电脑。
搭建服务是对网络知识、linux基础的综合运用,本节难度比之前明显提升,第一次会感觉有难度。但后面每章的操作都类似,学会本章即约等于学会整本书,加油。
Last modified: 25 十一月 2024