3-1 NFS网络文件系统
简介
NFS协议: (Network File System)Sun公司于1984年推出了一个在整个计算机工业中被广泛接受的远程文件存取机制,它被称为Sun的网络文件系统(Network File System),或者简称为NFS。 该机制允许在一台计算机上运行一个服务器,使对其上的某些或所有文件都可以进行远程存取,还允许其他计算机上的应用程序对这些文件进行存取。 它使我们能够达到文件的共享。当使用者想用远端档案时只要用mount命令就可把remote档案系统挂接在自己的档案系统之下,使得远端的文件操作上和本地机器的文件没两样。
RPC协议: (Remote Procedure Call Protocol)远程过程调用协议,用于不同服务间进行通信。NFS依赖RPC协议。
实验计划
一台电脑当服务器,另一台电脑当客户端。
也可以一台电脑即当服务器又当客户端。
服务器电脑安装和开启NFS协议,共享/share目录下的文件,
如果客户端能挂载访问到服务器/share目录下的文件,即成功。
虚拟机准备
禁用掉宿主机Virtualbox网卡。虚拟机网卡模式设置为桥接。
root登录
虚拟机进入桌面后检查右上角网络图标是否成功连互联网,记录下虚拟机ip地址。
换源。
sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-* sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.cloud.tencent.com|g" /etc/yum.repos.d/CentOS-* yum makecache
安装
(可选)验证是否已安装:
yum list installed |grep rpcbindyum list installed |grep nfs-utils安装nfs-utils和依赖包nfs-utils:
需要两个软件包,其中nfs-utils依赖rpcbind,因此安装一个软件包nfs-utils即可,yum会自动安装另一个依赖包。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 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创建一些测试文件假设为待共享的文件
touch /share/1.txt touch /share/2.mp4(可选)验证待共享文件夹和被共享文件是否已创建成功
ls /share
配置
编辑配置文件
vim或nano编辑nfs配置文件**/etc/exports**。nano /etc/exports写入下面信息
/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启动它们:
启动rpcbind服务(可选,默认已经启动):
systemctl start rpcbind启动nfs-server服务:
systemctl start nfs-server验证服务状态(可选,但建议):
systemctl status nfs-server systemctl status rpcbindrpcbind的状态应该为
active(running)。
nfs-server的状态应该为active(existed)且没有错误信息。# 这里展示一种错误情况,systemctl status rpcbind后看到虽然状态为Active但报错exportfs: Failed to stat /share: No such file or directory,原因为没有创建共享文件夹。 # 修复错误后,需要重启服务`systemctl restart nfs-server`以生效。 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
查看可挂载的目录
检查当前可供挂载的目录。
exportfs正确返回信息如下,说明待共享文件夹、服务端配置文件和服务启动都没问题,实验成功了90%🎉。因为前面配置允许所有服务端访问,
<world>表示允许所有ip的客户端访问。/share <world>
放通服务端口
(标准的做法是开启防火墙和selinux的状态下放通nfs服务端口,这里为了方便直接关闭掉安全服务。)
关闭防火墙
systemctl stop firewalld关闭防火墙开机自启(可选,因为机房电脑会还原)
systemctl disable firewalld关闭SeLinux:
setenforce 0
==============分割线==============
客户端挂载
准备客户端,几种方式任选其一:
与旁边的同学或室友两人一组。(最有利于理解服务端和客户端,最接近真实情况)
完整克隆另一台虚拟机作为客户端。
(本文采用方式)虚拟机又当服务器又当客户机。(实验成本最低)。
查看服务器IP。
虚拟机桌面/设置/网络查看服务端IP地址或nmcli命令查看返回信息的ip地址。
记录下服务器IP,假设为172.31.5.100 (替换为你自己虚拟机中分到的ip)。创建挂载节点文件夹。需要在客户端上指定共享目录加载后的入口。
mkdir /mnt/share客户端挂载服务端的/share目录
即映射服务器/share ➡️ 客户机/mnt/share。# 服务端ip注意换成你自己的服务器ip。如果采用一台服务器又当服务器又当客户端的方式,IP地址应该为本地127.0.0.1 mount 172.31.5.100:/share /mnt/share无返回消息为成功。
🎉结果,可以在客户机上访问服务器上的文件
ls /mnt/share成功返回了服务机/share目录中的文件
1.txt 2.mp4
命令一览
课上实现成功的命令代码,供参考。
服务端:
客户端:
作业
完成以上流程。展示客户端/mnt/share下内容。