✏️
安全运维
  • 目录
  • 常用命令速查手册
    • LINUX 命令总结
  • Linux--CentOS
    • 实战案例
      • 进入CentOS 7紧急模式,恢复root密码
      • 创建一个让root都无法删除的文件
      • tar源码包管理及srpm源码包安装方法
      • 找出系统中使用CPU最多的进程
      • 使用screen执行备份命令
      • 扩展Swap分区
      • 解决磁盘有空间但创建不了文件及修复文件系统问题
      • 修复服务器文件系统
      • 自定义ssh服务的日志类型和存储位置
      • 日志切割及搭建远程日志收集服务器
      • 配置公司内网服务器每天定时自动开关机
    • 基础知识
      • Linux的目录结构
      • 系统时间管理
      • 关机、重启命令及7个运行级别
      • passwd、shadow 文件
    • 基础命令
      • 帮助命令
      • ping 命令
      • ls 命令
      • alias 命令
      • history 命令
      • Linux中的快捷键
      • Untitled
      • Untitled
    • 基础配置
      • 安装中文版man手册
      • 网卡配置
      • 关闭防火墙并设置开机不启动防火墙
      • 临时和永久关闭SELinux
      • 配置本地YUM源
    • 文件管理
      • touch 命令
      • VIM 命令
      • cp 命令
      • mv 命令
    • 文件查看
      • cat 命令
      • more 命令
      • less 命令
      • head 命令
      • tail 命令
      • sort 命令
    • 用户和用户组管理
    • 文件权限管理
      • 文件基本权限
      • 文件的特殊权限:SUID、SGID、STicky及文件扩展权限ACL
    • 程序包的管理与安装
      • Yum的使用
    • 文件的压缩和归档
    • 系统进程管理
      • uptime命令查看系统负载
      • top 命令动态管理进程
      • lsof 命令
      • pstree 命令
      • 进程前、后台切换及优先级管理
    • 重定向和文件的查找
      • 文件描述符
      • 重定向的含义及管道、tee命令的使用
      • 查找文件的常用命令及应用
      • 命令判断——3个特殊符号“;”“﹠﹠”“||”
    • 磁盘介绍及管理
      • 磁盘分区工具和挂载
    • 文件系统结构
      • 文件系统结构
      • 文件的硬链接和软链接
      • 使用ln命令创建文件的链接
    • RAID的原理与搭建
      • RAID常用类型搭建和使用,以及注意事项
    • LVM管理和SSM工具的使用
      • 创建LVM的基本步骤
      • SSM工具
    • Linux计划任务与日志的管理
      • 日志的种类和记录的方式
    • 文件共享服务
      • NFS 的安装与使用
      • Samba 的安装与使用
      • CentOS 7.6 安装和配置samba文件共享服务
      • FTP 的安装与使用
      • proftpd
  • 安全加固
    • Windows 安全加固
    • WebLogic 安全加固
    • Apache 安全加固
    • Tomcat 安全加固
    • MySql 安全加固
    • PHP 安全加固
    • SSH 安全加固
    • IIS 安全加固
  • 基线检查
    • DB2数据库基线检查策略
    • MySQL数据库基线检查策略
    • Oracle10g数据库基线检查策略
    • Sybase数据库基线检查策略
    • MSSQL 2008 基线检查策略
    • Jboss7 基线检查策略
    • Apache 基线检查策略
    • Tomcat 基线检查策略
    • 基线检查策略
  • ClamAV
  • iptables
由 GitBook 提供支持
在本页
  • 网络文件系统(NFS)
  • NFS简介
  • 安装 NFS服务器
  • 配置NFS客户端
  • 常见出错

这有帮助吗?

  1. Linux--CentOS
  2. 文件共享服务

NFS 的安装与使用

上一页文件共享服务下一页Samba 的安装与使用

最后更新于3年前

这有帮助吗?

网络文件系统(NFS)

NFS(Network File System,网络文件系统)是一种分布式文件系统,允许网络中不同操作系统的计算机间共享文件,其通信协议基于TCP/IP协议层,可以将远程的计算机磁盘挂载到本地,读写文件像本地磁盘一样操作。

NFS简介

NFS在文件传送或信息传送过程中依赖于RPC(Remote Procedure Call)协议。RPC协议可以在不同的系统间使用,此通信协议设计与主机及操作系统无关。使用NFS时用户端只需使用mount命令就可把远程文件系统挂接在自己的文件系统之下,操作远程文件如使用本地计算机上的文件一样。NFS本身可以认为是RPC的一个程序。只要用到NFS的地方都要启动RPC服务,不论是服务端还是客户端,NFS是一个文件系统,而RPC负责信息的传输。

例如,在服务器上,要把远程服务器192.168.1.100上的/NFSshare挂载到本地目录,可以执行如下命令:

mount 192.168.1.100:NFSshare /NFSshare

安装 NFS服务器

NFS的安装需要两个软件包,通常情况下是作为系统的默认包安装的,版本因为系统的不同而不同。
nfs-utils-1.3.0-0.el7.x86_64.rpm包含一些基本的NFS命令与控制脚本。
rpcbind-0.2.0-23.el7.x86_64.rpm是一个管理RPC连接的程序,类似的管理工具为portmap。
确认系统中是否安装了对于的软件
[root@testhost /]# rpm -qa | grep -i nfs
yum 安装nfs、rpcbind 软件包
[root@testhost /]# yum install -y nfs-utils rpcbind

在安装好软件之后,接下来就可以配置NFS服务器了,配置之前先了解一下NFS主要的文件和进程。

(1)nfs有的发行版名字叫作nfsserver,主要用来控制NFS服务的启动和停止,安装完毕后位于/etc/init.d目录下。

(2)rpc.nfsd是基本的NFS守护进程,主要功能是控制客户端是否可以登录服务器,另外可以结合/etc/hosts.allow和/etc/hosts.deny做更精细的权限控制。

(3)rpc.mountd是RPC安装守护进程,主要功能是管理NFS的文件系统。通过配置文件共享指定的目录,同时根据配置文件做一些权限验证。

(4)rpcbind是一个管理RPC连接的程序,rpcbind服务对NFS是必需的,因为是NFS的动态端口分配守护进程,如果rpcbind不启动,NFS服务则无法启动。类似的管理工具为portmap。

(5)exportfs如果修改了/etc/exports文件后不需要重新激活NFS,只要重新扫描一次/etc/exports文件,并且重新将设定加载即可。exportfs参数说明如下:

(6)showmount显示指定NFS服务器连接NFS客户端的信息,常用参数如下:

配置NFS服务器首先需要确认共享的文件目录和权限及访问的主机列表,这些可通过/etc/exports文件配置。一般系统都有一个默认的exports文件,可以直接修改。如果没有,可创建一个,然后通过启动命令启动守护进程。

1.配置文件/etc/exports

要配置NFS服务器,首先就是编辑/etc/exports文件。在该文件中,每一行代表一个共享目录,并且描述了该目录如何被共享。exports文件的格式和使用,如下:

每行一条配置,可指定共享的目录,允许访问的主机及其他选项设置。上面的配置说明在这台服务器上共享了一个目录/NFSshare,参数说明如下:

共享目录:NFS系统中需要共享给客户端使用的目录。
客户端:网络中可以访问这个NFS共享目录的计算机。

客户端常用的指定方式:

指定IP地址的主机:192.168.3.101。
指定子网中的所有主机:192.168.3.0/24 192.168.0.0/255.255.255.0。
指定域名的主机:www.domain.com。
指定域中的所有主机:*.domain.com。
所有主机:*。

语法中的选项用来设置输出目录的访问权限、用户映射等。NFS常用的选项如下:

exports文件的使用方法如下:

/NFSshare *.*(rw)

该行设置表示共享/NFSshare目录,所有主机都可以访问该目录,并且都有读写的权限,客户端上的任何用户在访问时都映射成nobody用户。如果客户端要在该共享目录上保存文件,则服务器上的nobody用户对/NFSshare目录必须要有写的权限。

/NFSshare2 192.168.19.0/255.255.255.0 (rw,all_suash,anonuid=1001,anongid=100) 192.168.32.0/255.255.255.0(ro)

该行设置表示共享/NFSshare2目录,192.168.19.0/24网段的所有主机都可以访问该目录,对该目录有读写的权限,并且所有的用户在访问时都映射成服务器上的uid为1001、gid为100的用户;192.168.32.0/24网段的所有主机对该目录有只读访问权限,并且在访问时所有的用户都映射成nobody用户。

2.启动服务

配置好服务器之后,要使客户端能够使用NFS,必须要先启动服务。启动过程如下:

[root@testhost ~]# cat /etc/exports
/NFSshare *(rw)
[root@testhost ~]#mkdir /NFSshare #必须先创建该目录才能启动nfs
[root@testhost ~]#systemctl restart rpcbind  #rpcbind服务可能正在运行,因此需要重启
[root@testhost ~]#systemctl start nfs-server  #启动nfs服务



NFS服务由5个后台进程组成,分别是rpc.nfsd、rpc.lockd、rpc.statd、rpc.mountd、rpc.rquotad。
rpc.nfsd负责主要的工作;
rpc.lockd和rpc.statd负责抓取文件锁;
rpc.mountd负责初始化客户端的mount请求;
rpc.rquotad负责对客户文件的磁盘配额限制。
这些后台程序是nfs-utils的一部分,如果是使用的RPM包,它们存放在/usr/sbin目录下。
大多数的发行版本都会带有NFS服务的启动脚本,
在CentOS 7.5之前的版本中,要启动NFS服务,执行/etc/init.d/nfs start即可。
在CentOS 7.5中,由于系统框架的改变,我们可以使用systemctl启动,
也可以使用service nfs-server start启动。

3.确认NFS是否已经启动

可以使用rpcinfo命令来确认,如果NFS服务正常运行,应该有下面的输出,如下:

从上述结果可以看出NFS服务已经启动,也可以使用showmount来查看服务器的输出清单:

配置NFS客户端

要在客户端使用NFS,首先需要确定要挂载的文件路径,并确认该路径中没有已经存在的数据文件,然后确定要挂载的服务器端的路径,使用mount挂载到本地磁盘,如下:

 mount -t nfs -o rw ip:/NFSshare /mnt

查看是否情况

常见出错

########################### nfs常见问题排错思 ############################### 
 nfs共享目录权限相关因素
①. 配置文件中的权限指定
②. 共享目录本身的权限,有w权限
③. 共享目录本身的所属用户与所属组的权限指定


### ######################  NFS客户端挂载排错思路  ###########################
客户端排查三部曲
①. 检查服务端房源信息是否还在
    rpcinfo -p 172.16.1.9
②. 检查服务端共享目录信息是否存在
    showmount -e 172.16.1.9
③. 直接进行目录挂载测试
    mount -t nfs 172.16.1.9:/data /mnt
 
#########################  服务端排查三部曲  ################################# 
①. 检查服务端房源信息是否还在
    rpcinfo -p localhost
 如果没有注册的房源信息了,会是什么情况?
 ①. nfs服务没有启动
 ②. nfs服务于rpc服务启动顺序不正确
②. 检查服务端共享目录信息是否存在
    showmount -e localhost
 ①. nfs配置文件编写格式错误
③. 直接进行目录挂载测试
    mount -t nfs 172.16.1.9:/data /mnt


# 实现nfs客户端开机自动挂载方式
①. 将挂在命令追加到/etc/rc.local开机自启动文件中
②. 编写fstab文件,并且需要配合netfs服务使用,实现开机自动挂载




### nfs常见问题排错 
示例1:客户端挂载报错“No such file or directory”
[root@nfs-client ~]# showmount -e 172.16.1.9
Export list for 172.16.1.9:
/data    172.16.1.0/24
[root@nfs-client ~]# mount -t nfs 172.16.1.9:/data /mnt
mount.nfs: mounting 172.16.1.9:/data failed, reason given by server: No such file or directory
解答:原因是NFS服务器端没有共享目录/data,创建即可。命令如下:
[root@nfs-server ~]# mkdir /data


示例2:NFS服务器端启动失败,如下:
[root@nfs-server ~]# /etc/init.d/nfs start
Starting NFS services: [  OK  ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
      [FAILED]
Starting NFS mountd: [FAILED]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
      [FAILED]
解答:这是因为RPC服务没有在NFS前面启动,需要先启动RPC服务再启动NFS,解决方法为,按顺序启动rpcbind及NFS,命令如下:
[root@nfs-server ~]# /etc/init.d/rpcbind restart
[root@nfs-server ~]# /etc/init.d/nfs restart


示例3:注册RPC服务失败,出现failed:RPC Error:Program not registered错误。
[root@nfs-client ~]# mount -t nfs 172.16.1.9:/data /mnt
mount.nfs: requested NFS version or transport protocol is not supported
[root@nfs-client ~]# showmount -e 172.16.1.9
clnt_create: RPC: Program not registered
解答:服务器端的NFS没有启动,客户端没有收到服务器端发来的随机端口信息。
解决方法如下:
[root@nfs-server ~]# /etc/init.d/rpcbind restart
[root@nfs-server ~]# /etc/init.d/nfs restart


示例4:卸载挂载设备时显示device is busy。
[root@nfs-client mnt]# umount /mnt
umount.nfs: /mnt: device is busy
umount.nfs: /mnt: device is busy
解答:有可能是当前目录就是挂载的NFS目录(/mnt),也有可能是NFS Server挂了。对于第一种情况,解决办法为退出挂载目录/mnt,再执行umount /mnt卸载。对于第二种情况,NFS Server挂了,NFS Client就会出现问题(df -h窗口会死掉),这时只能强制卸载,方法为:
umount -lf /mnt     其中的参数-f为强制卸载,参数-l为懒惰的卸载。


示例5:CentOS 6.6客户端NFS挂载时遇到问题。
[root@nfs-client ~]# mount -t nfs 172.16.1.9:/data /mnt
mount:wrong fs type,bad option,bad option,bad superblock on 10.0.0.7:/data,
   missing codepage or helper program,or other error
   (for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program )
In some cases useful info is found in syslog - try
meg | tail or so
排查思路:同样的机器,NFS服务器本地可以挂载,但是客户端挂载时wrong fs type,因此尝试所有客户端安装nfs-utils。CentOS6.5及以前的NFS没有遇到这个问题。
解决方法:执行yum install nfs-utils -y,客户端安装NFS软件,但不启动服务。


示例六:共享目录挂载很卡
mount -t nfs 172.16.1.9:/data /mnt
cd /mnt
time touch test.txt
原因分析:
 NFS服务端重启之后。立刻进行挂载会出现此问题,因为NFS自身重启的时候,拥有无敌的时间,默认是90秒;在无敌时间内,是不能对共享目录进行更改的操作;
 在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
NLM_GRACE_PERI0D=90
find /proc -name | grep -i ” NLM_GRACE_PERIOD”
find /proc -iname ” NLM_GRACE_PERIOD”
 重启NFS服务没有按照顺序进行重启,一旦NFS重启了,需要确认rpcbind服务有没有接收,即rpcinfo -p localhost;先启动rpcbind服务再启动nfs服务


示例七:ls: cannot open directory .: Stale file handle
Stale file handle
客户端报错
mount -t nfs 172.16.1.9:/data  /mnt
mount.nfs: Stale file handle
服务端挂载报错
[root@nfs01 data]# mount -t nfs 172.16.1.9:/data /mnt/
mount.nfs: access denied by server while mounting 172.16.1.9:/data
查看配置文件发现
[root@nfs01 data]# cat /etc/exports
#share /data  by lidao  at 20160913
/data 173.16.1.0/24(rw,sync)
原因分析:

 /proc/mounts客户端挂载文件中已经存在了相应的挂载记录,没有正确卸载掉,就再次进行挂载,就会出现以上错误。