Ubuntu 环境下 NFS 服务安装及配置使用

需求:公司内部有多台物理服务器,需要A服务器上的文件让B服务器访问,也就是两台服务器共享文件,当然也可以对A服务器上的文件做权限管理,让B服务器只读或者可读可写

1、NFS 介绍

NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。

2、环境、软件准备

两台服务器都是一样的:Ubuntu 20.04.3 LTS

3、NFS 服务安装

因为是A服务提供文件给B服务访问,所以这里就用A服务当做服务器

3.1 首先,在终端使用下列命令安装nfs:

go 复制代码
# 服务端
apt install nfs-kernel-server

# 客户端
apt install nfs-common

3.2 NFS 配置及使用

我们在服务端创建一个共享目录 /data/share ,作为客户端挂载的远端入口,然后设置权限。

go 复制代码
mkdir -p /home/recall/fileshop
chmod 666 /home/recall/fileshop

然后,修改 NFS 配置文件 /etc/exports

go 复制代码
sudo vim /etc/exports
/home/recall/fileshop 192.168.1.11(rw,sync,all_squash,no_subtree_check)

说明一下,这里配置后边有很多参数,每个参数有不同的含义,具体可以参考下边。此处,我配置了将 /data/share 文件目录设置为允许 IP 为该 10.222.77.0/24 区间的客户端挂载,当然,如果客户端 IP 不在该区间也想要挂载的话,可以设置 IP 区间更大或者设置为 * 即允许所有客户端挂载,例如:/home *(ro,sync,insecure,no_root_squash) 设置 /home 目录允许所有客户端只读挂载。

接下来,我们先启动 RPC 服务。

go 复制代码
service rpcbind start
或者使用如下命令亦可
/bin/systemctl start rpcbind.service

查看 NFS 服务项 rpc 服务器注册的端口列表

go 复制代码
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 服务,只监听了 111 端口,接着我们来启动 NFS 服务,再来看下注册的端口列表。

启动 NFS 服务

go 复制代码
service nfs start

# 或者使用如下命令亦可
/bin/systemctl start nfs.service

启动 NFS 服务后 rpc 服务已经启用了对 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  33745  status
    100024    1   tcp  36980  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
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  38960  nlockmgr
    100021    3   udp  38960  nlockmgr
    100021    4   udp  38960  nlockmgr
    100021    1   tcp  38362  nlockmgr
    100021    3   tcp  38362  nlockmgr
    100021    4   tcp  38362  nlockmgr

我们发现,启动了 NFS 服务后,rpc 注册的端口列表明显增多。OK 现在服务端都启动起来了,在服务端看下是否正确加载了设置的 /etc/exports 配置。

go 复制代码
$ showmount -e localhost
Export list for localhost:
/home/recall/fileshop 192.168.1.11

NFS 测试

最后,在另一台 Linux 虚拟机上测试一下,是否能够正确挂载吧。

首先,我们可以在客户端查看下 NFS 服务端 (上边服务端 IP 为:192.168.1.12) 设置可共享的目录信息。

go 复制代码
 $ showmount -e 10.222.77.12
 Export list for 10.222.77.12:
 /home/recall/fileshop 192.168.1.11

然后,在客户端创建挂在目录 /share

go 复制代码
$ mkdir -p /share

最后,挂载远端目录到本地 /share 目录。

go 复制代码
mount 10.222.77.12:/home/recall/fileshop /share
df -h | grep 10.222.77.12
Filesystem                 Size  Used  Avail Use% Mounted on
192.168.1.12:/data/share   27G   11G   17G   40%  /share

可以看到,可以正确将远端 NFS 目录挂载到本地。注意:挂载点 /share 目录必须已经存在,而且目录中没有文件或子目录。

最后,我们在 NFS 服务端 /data/share 目录下创建一个文件,看下客户端是否能够正确读取并修改。

go 复制代码
# 服务端写入
$ echo "This is NFS server." > /data/share/nfs.txt
# ll /data/share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt

# 客户端读取
$ ll /share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt
$ cat /share/nfs.txt
This is NFS server.

# 客户端写入
$ echo "This is NFS client." >> /share/nfs.txt

# 服务端读取
$ cat /data/share/nfs.txt
This is NFS server.
This is NFS client.

都是木有问题的,这是因为上边设置了 NFS 远端目录权限为 rw 拥有读写权限,如果设置为 ro,那么客户端只能读取,不能写入,根据实际应用场景合理配置,这里就不在演示了。这里提一下,NFS 默认使用用 UDP 协议来进行挂载,为了提高 NFS 的稳定性,可以使用 TCP 协议挂载,那么客户端挂载命令可使用如下命令:

go 复制代码
$ mount 10.222.77.86:/data/share /share -o proto=tcp -o nolock

最后,如果客户端要卸载 NFS 挂载的话,使用如下命令即可。

go 复制代码
umount /share

好了,上边简单介绍了 NFS 安装及配置使用,使用它我们可以很方便的透过网络,让不同的主机、操作系统实现共享存储

相关推荐
大树8814 分钟前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠17 分钟前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质41 分钟前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush444 分钟前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 小时前
Linux 11 动态监控指令top
linux
Inhand陈工2 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩2 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_2 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈2 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix