NFS

发布时间 2023-12-24 00:02:52作者: qianyuzz

背景

NFS(Network File System,网络文件系统)只提供了基本的文件处理功能,而不提供任何 TCP/IP 数据传输功能。

它需要借助 RPC 协议才能实现 TCP/IP 数据传输功能。

RPC(Remote Procedure Call,远程过程调用)是一种网络程序的编程方法,它定义了一种进程间通过网络进行交互通信的机制。

rpc.nfsd 进程

NFS 服务的主进程,主要管理客户端是否能够接入 NFS 服务器以及数据的传输。

该进程固定监听 TCP/UDP 2049 端口。

rpc.mountd 进程

管理和维护 NFS 文件系统,根据所设定的权限决定是否允许客户端挂载指定的共享目录。

rpcbind 进程

RPC 的端口映射器进程,监听 UDP 111 端口。

该进程监听的端口默认是不固定的。

安装NFS

yum install -y nfs-utils rpcbind
nfs-utils:提供了NFS服务器程序和对应的管理工具
rpcbind:获取nfs服务器端的端口等信息

启动rpcbind检查是否启动了rpcbind服务并监听111端口

[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# netstat -tunlp | grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      598/rpcbind         
tcp6       0      0 :::111                  :::*                    LISTEN      598/rpcbind         
udp        0      0 0.0.0.0:111             0.0.0.0:*                           598/rpcbind         
udp6       0      0 :::111                  :::*                                598/rpcbind  

配置共享

编辑 exports 文件:

 vim /etc/exports

这个文件的格式是:

共享目录路径   允许的 IP 或主机名 1(选项 1,选项 2,...)  允许的 IP 或主机名 2(选项 1,选项 2,...)   ...
选项 功能
ro 以只读方式共享(默认)
rw 以读写方式共享
sync 客户端写入的数据立即写入到磁盘中去(默认)
async 客户端写入的数据先保存到内存中再写入到磁盘中去
root_squash 把root用户映射为匿名用户(默认)
no_root_squash 允许使用root用户
all_squash 把所有用户映射为匿名用户
anonuid= 指定匿名用户的UD
anongid= 指定匿名用户的GD
insecure 允许客户端使用大于1024的端口连接

比如把 /tmp 设置成允许任意主机以匿名身份读写 /tmp 目录

/tmp *(rw,all_squash)

只允许 1.1.1.1 以 root 只读 /root

/root 1.1.1.1(ro,no_root_squash)

启动服务

systemctl start nfs

如果修改了 NFS 配置文件,我们可以通过以下命令直接使新的配置文件生效而不用中断服务。

exportfs -ra

关闭防火墙

systemctl stop firewalld && setenforce 0

查看是否生效

showmount -e

访问

win 11,步骤是:

  1. 打开“控制面板”: 在 Windows 11 中搜索栏中键入“控制面板”,然后打开它。
  2. 选择“程序” -> “启用或关闭 Windows 功能”: 点击左侧菜单中的“程序”选项,然后选择“启用或关闭 Windows 功能”。
  3. 勾选“NFS 客户端”: 在弹出的窗口中找到并勾选“NFS 客户端”,然后点击“确定”并等待功能安装完成。

但是这个我自己是不行的。

这边我用ubuntu来连接,先安装 nfs 工具:

apt install nfs-common

使用以下命令:

root@ubuntu:/home/ming# mkdir /mnt/nfs   # 创建本地挂载点
root@ubuntu:/home/ming# mount -t nfs 192.168.91.168:/tmp /mnt/nfs   # 挂载 NFS 共享目录到本地目录
root@ubuntu:/home/ming# cd /mnt/nfs/
root@ubuntu:/mnt/nfs# ls
hsperfdata_root
ks-script-ri08Ay
ks-script-TaQfPj
lua_NncYtN
ssh-50UpIqz22VoE
ssh-zc0nKv2xmCMJ
systemd-private-54a432bfa8674d438894e543725d7b9e-bolt.service-rF8dnV
systemd-private-54a432bfa8674d438894e543725d7b9e-chronyd.service-Tn5xKw
systemd-private-54a432bfa8674d438894e543725d7b9e-colord.service-F9x5LU
systemd-private-54a432bfa8674d438894e543725d7b9e-cups.service-4SB9gK
systemd-private-54a432bfa8674d438894e543725d7b9e-fwupd.service-aRFJf4
systemd-private-54a432bfa8674d438894e543725d7b9e-rtkit-daemon.service-ZZ5NdU
systemd-private-c2e0544d4a2046068bdae3218a053ffd-bolt.service-kaqZsH
systemd-private-c2e0544d4a2046068bdae3218a053ffd-chronyd.service-lQSMge
systemd-private-c2e0544d4a2046068bdae3218a053ffd-colord.service-s7BQfl
systemd-private-c2e0544d4a2046068bdae3218a053ffd-cups.service-3813TD
systemd-private-c2e0544d4a2046068bdae3218a053ffd-fwupd.service-7yQGJJ
systemd-private-c2e0544d4a2046068bdae3218a053ffd-rtkit-daemon.service-tYPsSB
tmp.RdLUogaC77
tracker-extract-files.1000
vmware-root_638-2722304702
vmware-root_651-4013395565
vmware-root_90197-2801210396
yum.log
yum_save_tx.2023-09-10.06-23.y8LpMc.yumtx

可以发现已经出现了 yum 这个不属于 Ubuntu 的日志了。

卸载

umount /mnt/nfs   # 卸载共享目录