NFS部署


什么是NFS

NFS, 网络文件系统,英文Network File System,是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

NFS可以让服务端跟客户端通过网络共享主机磁盘上的一些数据,主要是在unix和linux系统上实现的一种文件共享方式。

我们可以简单的将NFS看做是一个文件服务器 (file server) 。这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区一样 (partition)。

NFS工作在OSI的会话层,端口号为111

开始部署

这里我用两台linux虚拟机做实验,一台为ubuntu(ip: 192.168.35.128),另一台为centos(ip:192.168.35.135)。用finalshell连接后开始进行部署。

服务端部署(centos)

  1. 首先要安装nfs-utils

yum -y install nfs-utils

rpcbind作为依赖包在此过程中也会被安装,因此无需再单独安装rpcbind。

  1. 启动nfs,并将其设置为开机启动(作为服务器,应保证服务在每次重启之后都能迅速提供服务)
systemctl start nfs
systemctl enable nfs

这里不需要先启动rpc服务,使用ps -ef|grep rpcbind发现启动nfs之后rpcbind已经启动了。

  1. 设置共享目录,并修改其权限
mkdir /data
chmod 755 /data
  1. 修改服务端配置文件(安装完nfs-utils后,会自动生成 /etc/exports这个文件,这是nfs主要的配置文件)
vi /etc/exports

i 插入如下内容:

/data/        192.168.35.0/24(rw,sync,no_root_sqush,no_all_squash)

配置修改

配置相应主机对于这个共享文件夹所拥有的权限等内容,

/etc/exports具体文件内容格式如下

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

a. 输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录;

b. 客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式

  • 指定ip地址的主机:192.168.0.200
  • 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
  • 指定域名的主机:david.bsmart.cn
  • 指定域中的所有主机:*.bsmart.cn
  • 所有主机:*

c. 选项:

选项用来设置输出目录的访问权限、用户映射等。

NFS主要有3类选项:

访问权限选项

  • 设置输出目录只读:ro
  • 设置输出目录读写:rw

用户映射选项

  • all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
  • no_all_squash:与all_squash取反(默认设置);
  • root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
  • no_root_squash:与rootsquash取反;
  • anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
  • anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

其它选项

  • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
  • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
  • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
  • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
  • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
  • no_wdelay:若有写操作则立即执行,应与sync配合使用;
  • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
  • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

配置好后还需要重启nfs服务

systemctl restart nfs
  1. 查看挂载
showmount -e localhost 

查看挂载

发现共享文件挂载成功

最后需要关闭防火墙

systemctl stop firewalld
setenforce 0

关闭防火墙

如果不关闭防火墙,客户端无法看到服务端的共享文件夹

客户端部署(ubuntu)

ubuntu上部署与在centos上部署不太一样

首先安装nfs-common包

apt-get install nfs-common

同样的,也会自动安装rpcbind包

需要启动rpcbind

systemctl start rpcbind

查看远端服务器的共享目录

showmount -e 192.168.35.135

客户端创建挂载目录

mkdir /data

挂载共享目录

mount -t nfs 192.168.35.135:/data /data

使用df查看磁盘情况可以看到挂载成功

总结

  • 当然NFS适用于不同系统、不同类型主机之间进行文件共享,不止局限于ubuntu,centos,甚至windows平台也可以配置NFS。

  • 在配置过程中经常出现如下错误

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

说明服务端防火墙没有关闭,没有关闭的话客户端是无法通过网络连接到服务器那端的。服务端部署的最后一步一定要执行。

  • 可能有人会问,为什么NFS部署的过程中为什么会涉及到rpcbind包?

    因为nfs协议本身是没有网络传输功能的,而是基于远程的调度,需要使用rpc提供一个面向远程服务的一个端口,这样就可以通过网络从远程主机进行一些请求

参考文章:

https://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html


文章作者: anch0r
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anch0r !
  目录