网络服务器配置与管理教辅书 Help

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目录下的文件,即成功。

虚拟机准备

  1. 禁用掉宿主机Virtualbox网卡。虚拟机网卡模式设置为桥接。

  2. root登录

  3. 虚拟机进入桌面后检查右上角网络图标是否成功连互联网,记录下虚拟机ip地址。

  4. 换源。

    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

安装

  1. (可选)验证是否已安装:
    yum list installed |grep rpcbind
    yum list installed |grep nfs-utils

  2. 安装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 ~]#

准备共享文件夹

  1. 创建一个目录/share作为待共享区域

    mkdir /share
  2. 创建一些测试文件假设为待共享的文件

    touch /share/1.txt touch /share/2.mp4
  3. (可选)验证待共享文件夹和被共享文件是否已创建成功

    ls /share

配置

  1. 编辑配置文件
    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客户端挂载后能读不能写。
      每条规则写一行,多个文件夹不同权限写多行。 保存退出。

启动服务

启动两个服务,服务名为rpcbindnfs-server 。rpc负责通讯,nfs负责软件功能。

使用系统管理命令systemctl启动它们:

  1. 启动rpcbind服务(可选,默认已经启动):

    systemctl start rpcbind
  2. 启动nfs-server服务:

    systemctl start nfs-server
  3. 验证服务状态(可选,但建议):

    systemctl status nfs-server systemctl status rpcbind

    rpcbind的状态应该为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

查看可挂载的目录

  1. 检查当前可供挂载的目录。

    exportfs

    正确返回信息如下,说明待共享文件夹、服务端配置文件和服务启动都没问题,实验成功了90%🎉。因为前面配置允许所有服务端访问, <world>表示允许所有ip的客户端访问。

    /share <world>

放通服务端口

(标准的做法是开启防火墙和selinux的状态下放通nfs服务端口,这里为了方便直接关闭掉安全服务。)

  1. 关闭防火墙

    systemctl stop firewalld
  2. 关闭防火墙开机自启(可选,因为机房电脑会还原)
    systemctl disable firewalld

  3. 关闭SeLinux:

    setenforce 0

==============分割线==============

客户端挂载

  1. 准备客户端,几种方式任选其一:

    • 与旁边的同学或室友两人一组。(最有利于理解服务端和客户端,最接近真实情况)

    • 完整克隆另一台虚拟机作为客户端。

    • (本文采用方式)虚拟机又当服务器又当客户机。(实验成本最低)。

  2. 查看服务器IP。
    虚拟机桌面/设置/网络查看服务端IP地址或nmcli命令查看返回信息的ip地址。
    记录下服务器IP,假设为172.31.5.100 (替换为你自己虚拟机中分到的ip)。

  3. 创建挂载节点文件夹。需要在客户端上指定共享目录加载后的入口。

    mkdir /mnt/share
  4. 客户端挂载服务端的/share目录
    即映射 服务器/share ➡️ 客户机/mnt/share

    # 服务端ip注意换成你自己的服务器ip。如果采用一台服务器又当服务器又当客户端的方式,IP地址应该为本地127.0.0.1 mount 172.31.5.100:/share /mnt/share

    无返回消息为成功。

  5. 🎉结果,可以在客户机上访问服务器上的文件

    ls /mnt/share

    成功返回了服务机/share目录中的文件
    1.txt 2.mp4

命令一览

课上实现成功的命令代码,供参考。

服务端:

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 update 6 yum install nfs-utils 7 mkdir /share 8 touch /share/1.txt 9 touch /share/2.mp4 10 ls /share 12 nmcli | grep 172. 14 nano /etc/exports 15 cat /etc/exports 18 systemctl start nfs-server 19 systemctl status nfs-server 20 exportfs 21 systemctl stop firewalld 22 setenforce 0

客户端:

1. ping 127.0.0.1 2. mkdir -p /mnt/share 3. mount 172.31.5.100:/share /mnt/share 4. ls /mnt/share

作业

  1. 完成以上流程。展示客户端/mnt/share下内容。

15 十月 2025