Ubuntu 部署 NFS 服务
参考:https://blog.csdn.net/weixin_47906106/article/details/134684327
Ubuntu 部署 NFS 服务
NFS 是 Network FileSystem 的缩写,顾名思义就是网络文件存储系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。
案例操作系统:Ubuntu 20.04.4
1、NFS 服务安装
# 服务端
apt install nfs-kernel-server
# 客户端
apt install nfs-common
2、配置共享目录
在服务端创建一个共享目录 /data,作为客户端挂载的远端入口,并设置权限。
mkdir -p /data
chmod 666 /data
修改 NFS 配置文件 /etc/exports
sudo vim /etc/exports
# 将 /data 文件目录设置为允许任意IP的客户端挂载
/data *(rw,async,nohide,insecure,no_subtree_check,no_root_squash)
# 重新加载配置
sudo exportfs -a
配置项功能介绍:
| 参数 | 描述 |
|---|---|
| ro | 共享目录只读; |
| rw | 共享目录可读可写 |
| sync | 同步,将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性 |
| async | 异步,将数据先保存在内存缓冲区中,必要时才写入磁盘,效率高,但有丢失数据的风险; |
| wdelay(默认) | 如果有多个客户端要对同一个共享目录进行写操作,则将这些操作集中执行。对有很多小的IO写操作时,使用该选项可以有效的提高效率; |
| no_wdelay | 如果有多个客户端要对同一个共享目录进行写操作则立即写入。当设置了async选项时,no_wdelay选项无效,应与sync配合使用; |
| root_squash(默认) | 将来访的root用户映射为匿名用户或用户组; |
| no_root_squash | 来访的root用户保持root帐号权限; |
| all_squash | 所有访问用户都映射为匿名用户或用户组; |
| no_all_squash(默认) | 访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组; |
| anonuid= | 指定匿名访问用户的本地用户UID,默认为nfsnobody(65534); |
| anongid= | 指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534); |
| secure(默认) | 限制客户端只能从小于1024的tcp/ip端口连接服务器; |
| insecure | 允许客户端从大于1024的tcp/ip端口连接服务器; |
| subtree_check | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限; |
| no_subtree_check(默认) | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率; |
| hide | 共享一个目录时,不共享该目录的子目录; |
| no_hide | 共享子目录; |
3、启动 RPC 服务
$ service rpcbind start
# 或者
/bin/systemctl start rpcbind.service
查看 NFS 服务项 rpc 服务器注册的端口列表
# 此时还没有启动 NFS 服务话,只监听了 111 端口,下面再启动 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
注意:此时还没有启动 NFS 服务,只监听了 111 端口,下面再启动 NFS 服务,再来看下注册的端口列表。
4、启动 NFS 服务
$ systemctl restart nfs-kernel-server
# 或者使用如下命令
service nfs start
/etc/init.d/nfs-kernel-server restart
/bin/systemctl start nfs.service
/bin/systemctl start nfs-server.service
# 提示没有服务的话,查看所有服务,确认正确的服务名称
systemctl list-units --type=service|grep nfs
启动 NFS 服务后 rpc 服务已经启用了对 NFS 的端口映射列表,rpc 注册的端口列表明显增多。
$ 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 60024 status
100024 1 tcp 50417 status
100005 1 udp 54892 mountd
100005 1 tcp 55981 mountd
...
在服务端看下是否正确加载了设置的 /etc/exports 配置。
$ showmount -e localhost
Export list for localhost:
/data 192.168.1.0/24
5、挂载
在客户端查看下 NFS 服务端 (上边服务端 IP 为:192.168.240.5) 可共享的目录信息。
$ showmount -e 192.168.240.5
Export list for 192.168.240.5:
/data 192.168.1.0/24
在客户端创建挂在目录 /data
$ mkdir -p /data
挂载远端目录到本地/data目录
$ mount 192.168.240.5:/data /data
$ df -h | grep 192.168.240.5
Filesystem Size Used Avail Use% Mounted on
192.168.240.5:/data 27G 11G 17G 40% /data
可以看到,可以正确将远端 NFS 目录挂载到本地。注意:挂载点 /data 目录必须已经存在,而且目录中没有文件或子目录。
6、NFS 测试
在 NFS 服务端 /data 目录下创建一个文件,看下客户端是否能够正确读取并修改。
# 服务端写入
$ echo "This is NFS server." > /data/nfs.txt
$ ll /data/data/
total 4
-rw-r--r-- 1 root root 20 Nov 5 16:49 nfs.txt
# 客户端读取
$ ll /data/
total 4
-rw-r--r-- 1 root root 20 Nov 5 16:49 nfs.txt
$ cat /data/nfs.txt
This is NFS server.
# 客户端写入
$ echo "This is NFS client." >> /data/nfs.txt
# 服务端读取
$ cat /data/nfs.txt
This is NFS server.
This is NFS client.
7、TCP 协议挂载
NFS 默认使用用 UDP 协议来进行挂载。为了提高 NFS 的稳定性,可以使用 TCP 协议挂载,那么客户端挂载命令可使用如下命令:
$ sudo mount 192.168.240.5:/data /data -o proto=tcp -o nolock
8、取消卸载
# 卸载挂载点
$ umount /data
2091

被折叠的 条评论
为什么被折叠?



