Bootstrap

Linux 环境下 NFS 服务安装及使用

nfs简介

NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它最早是由 Sun 公司发展出来的,也是 FreeBSD 支持的文件系统中的一个,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。
简单概括:
定义:网络文件存储系统
作用:NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务
工作机制:nfs是基于rpc来实现网络文件系统共享的

rpc简介

RPC(Remote Procedure Call Protocol),远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。

注意:

  • nfs适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能
  • nfs是运行在应用层的协议,其监听于2049/tcp和2049/udp套接字上
  • nfs服务只能基于IP进行
  • NFS 也是 NAS存储设备必然支持的一种协议,但是因为没有用户认证机制,而且数据在网络上明文传输,安全性很差,所以一般只能在局域网中使用

安装 nfs-utils、rpcbind 软件包

环境介绍:
system:龙蜥8.6
kernel:4.19.91-26.an8.x86_64
 NFS 服务端需要安装 rpcbind 和 nfs-utils
 NFS 客户端只需要安装 nfs-utils
 nfs端口号2049
 RPC端口号111

$ rpm -qa nfs-utils rpcbind	#检查是否安装,无结果返回即未安装
安装nfs服务:
cnetos、Anolis安装命令:
# 服务端
$ yum install -y nfs-utils rpcbind
# 客户端
$ yum install -y nfs-utils

Ubuntu安装命令:
# 服务端
apt install nfs-kernel-server
# 客户端
apt install nfs-common

# 配置NFS存储共享⽬录并授权
mkdir -p /opt/nfs/rancher && chmod -R 777 /opt/nfs/rancher
# 开放nfs共享目录权限
echo "/opt/nfs/rancher 192.168.xxx.xxx(rw,sync,insecure,no_subtree_check,no_root_squash)" >> /etc/exports
# 加载nfs开放目录并查看
exportfs -ar && more /etc/exports 

# 启动 RPC 服务
systemctl start rpcbind
或
service rpcbind start

# 查看 NFS 服务项 rpc 服务器注册的端口列表
[root@nfs ftp]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

# 启动 NFS 服务
service nfs-server start
或
service nfs-server start

# 启动 NFS 服务后 rpc 服务已经启用了对 NFS 的端口映射列表
[root@nfs nfs]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  35561  status
    100024    1   tcp  41417  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100021    1   udp  52559  nlockmgr
    100021    3   udp  52559  nlockmgr
    100021    4   udp  52559  nlockmgr
    100021    1   tcp  36035  nlockmgr
    100021    3   tcp  36035  nlockmgr
    100021    4   tcp  36035  nlockmgr

# 检查服务端看下是否正确加载了设置的 /etc/exports 配置
[root@nfs nfs]# showmount -e localhost
Export list for localhost:
/opt/nfs/rancher 192.168.***.0/24

NFS测试

# 在客户端服务器查看服务端设置的共享目录
# showmount -e 服务端ip
[root@docker01 ~]# showmount -e 192.168.116.21
Export list for 192.168.116.21:
/opt/nfs/rancher 192.168.112.0/24
说明,我们可以客户端的文件及文件夹挂载到nfs的服务端的开放目录下

# 客户端创建挂载文件夹
mkdir -p /opt/nfs
# 将客户端的文件夹挂载到nfs服务端并查看挂载状态
[root@docker01 ~]# mount 192.168.116.21:/opt/nfs/rancher /opt/nfs
[root@docker01 ~]# df -h | grep 192.168.116.21
192.168.116.21:/opt/nfs/rancher   92G  3.2G   89G    4% /opt/nfs
至此,客户端文件夹/opt/nfs 已正常挂载至 nfs服务端的/opt/nfs/rancher目录下

# 继续测试
## 在服务器,共享目录(/opt/nfs/rancher)下创建一个nfs.txt文件
[root@nfs rancher]# vi nfs.txt
[root@nfs rancher]# ll
总用量 4
-rw-r--r-- 1 root root 23 428 11:27 nfs.txt

## 客户端查看是否正常读取改文件
[root@docker01 ~]# cd /opt/nfs/
[root@docker01 nfs]# ll
总用量 4
-rw-r--r-- 1 root root 23 428 11:27 nfs.txt
正常读取!

同理,客户端/opt/nfs下的文件在nfs服务端/opt/nfs/rancher同样可正常读取
;