文档

在Linux系统的ECS实例上搭建的NFS服务器无法正常使用怎么办?

更新时间:

本文介绍在使用Linux系统的ECS实例上搭建的NFS服务时,NFS客户端在挂载时不稳定或出现异常的检查方法。

问题现象

在使用Linux系统的ECS实例上搭建的NFS服务进行挂载时,NFS客户端会出现不稳定或异常的情况。

问题原因

可能是由以下原因导致:

  • NFS客户端及服务端软件未安装。

  • portmaprpcbind服务未开启。

  • NFS客户端到服务器之前的网络状态异常。

解决方案

请您参考以下操作对NFS Client端和NFS Server端进行排查。

步骤一:检查NFS Client端

  1. 远程连接作为NFS Client端的Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,查看NFS客户端软件是否安装。

    rpm -qa | grep nfs
    说明

    当返回的信息中包含NFS及其版本信息则该实例已安装NFS,否则您需要手动安装。

  3. 依次执行以下命令,查看客户端的portmaprpcbind服务是否已经开启。

    systemctl status portmap
    systemctl status rpcbind

    系统显示类似如下,若出现Active: active (running)表示rpcbind已经启动。

    service rpcbind status
    Redirecting to /bin/systemctl status rpcbind.service
    ● rpcbind.service - RPC bind service
       Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
       Active: active (running) since Sun 2020-02-09 21:04:14 CST; 3 days ago
      Process: 31543 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
     Main PID: 31544 (rpcbind)
        Tasks: 1
       Memory: 896.0K
       CGroup: /system.slice/rpcbind.service
               └─31544 /sbin/rpcbind -w
    
    Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

    如果portmaprpcbind服务未开启,依次执行以下命令进行开启。

    systemctl start portmap
    systemctl start rpcbind
  4. 依次执行以下命令,将portmaprpcbind服务设为开机自动启动。

    chkconfig portmap on
    chkconfig rpcbind on
  5. 执行以下命令,检查NFS客户端到服务器的网络状态,具体操作步骤请参见链路测试方法

    ping [$IP]
    说明

    [$IP]指的是NFS服务端的IP地址。

    1. 在NFS Client端依次执行以下命令,测试端口连通状态。

      telnet [$IP] 111
      telnet [$IP] 2049
      说明

      111端口是portmap服务,2049端口是nfs service服务。

    2. 在NFS Client上执行以下命令测试873端口是否正常。

      telnet [$IP] 873
      说明

      如果在NFS Server上没有配置NFS使用那些端口,那么就需要在网络上开放所有的端口,否则可能导致NFS客户端连接不上。为了避免此问题,可以设定NFS使用固定的端口,那么开放固定的端口即可。

    3. 执行以下命令,检查NFS客户端的Iptables状态。

      iptables -L -n
    4. 执行以下命令,设定防火墙INPUT的默认策略为ACCEPT

      iptables -t filter -P INPUT ACCEPT
  6. 执行以下命令列出NFS Server信息。

    showmount -e [$IP]
    说明
    • 如果能够查看到共享的信息,表示NFS能够直接挂载使用。

    • 如果不能看到共享的信息,则可能是Server端的问题,请参考步骤二:检查NFS Server端继续排查。

步骤二:检查NFS Server端

  1. 远程连接作为NFS Server端的Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,查看NFS Server软件包是否安装。

    rpm -qa | grep nfs
    说明

    当返回的信息中包含NFS及其版本信息则该实例已安装NFS,否则您需要手动安装。

  3. 执行以下命令,查看portmaprpcbind服务是否已经开启。

    systemctl status portmap
    systemctl status rpcbind

    系统显示类似如下,若出现Active: active (running)表示rpcbind已经启动。

    service rpcbind status
    Redirecting to /bin/systemctl status rpcbind.service
    ● rpcbind.service - RPC bind service
       Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
       Active: active (running) since Sun 2020-02-09 21:04:14 CST; 3 days ago
      Process: 31543 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
     Main PID: 31544 (rpcbind)
        Tasks: 1
       Memory: 896.0K
       CGroup: /system.slice/rpcbind.service
               └─31544 /sbin/rpcbind -w
    
    Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

    如果portmap服务未开启,执行以下命令进行开启。

    systemctl start portmap
    systemctl start rpcbind
  4. 执行以下命令,将portmap服务设为开机自动启动。

    chkconfig portmap on
    chkconfig rpcbind on
  5. 在NFS Server端执行以下命令进行测试。

    netstat -an | less
  6. 执行以下命令查看NFS端口状态。

    rpcinfo -p localhost
    说明

    其中111端口和2049端口必须是开启状态。

  7. 建立目录,在/etc/exports中加入此目录,然后挂载该目录进行测试。

    mount -t nfs [$Catalog]/Pathfile /tmp
    说明

    [$Catalog]指的是您自行建立的目录名称。如果可以挂载成功,表示NFS Server端设置正常。

  8. 查看/etc/exports文件 。

    1. 查看共享目录,确认其客户端,权限、及文件编写的格式是否配置正确。

    2. 确认无误后,执行exportfs -a命令重载文件。

  9. 执行以下命令,查看NFS共享目录。

    showmount -e /etc/exports
    说明

    如果可以展示所有共享目录,并且服务器能够挂载共享出来的NFS,表示NFS Server端正常。