1. NFS简介
NFS是Network File System的简写,即网络文件系统. 网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS。
NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
NFS必须和RPC共同使用,而且只兼容类UNIX系统。通过远程过程调用(Remote Procedure Call,RPC)协议来实现了RPC服务(portmap 或rpcbind服务)。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去
2. NFS工作原理
NFS服务端和客户端之间通过随机选择端口来传输数据,NFS服务端利用RPC协议与客户端进行沟通决定使用的随机端口,然后利用这个端口来传输数据,使用的随机端口通常小于1024。RPC协议用来统一管理NFS的随机端口,其使用的端口默认为111。
通信过程:
1.客户端向服务端的rpc服务请求服务端的NFS端口
2.服务端的rpc服务返回NFS端口信息给客户端
3.客户端通过获取到的NFS端口建立和服务端的连接
4.服务端获取本地共享文件的信息
5.服务端通过NFS端口建立和客户端的连接
6.开始进行文件传输
3. 配置NFS服务端
3.1 启动服务
[root@k8s-node-02 backup]# ps -ef|grep nfs
root 123018 2 0 11:18 ? 00:00:00 [nfsiod]
root 123110 2033 0 11:18 pts/0 00:00:00 grep --color=auto nfs
[root@k8s-node-02 backup]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@k8s-node-02 backup]# systemctl start nfs
[root@k8s-node-02 backup]# systemctl enable nfs
[root@k8s-node-02 backup]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since Thu 2023-02-16 11:19:14 EST; 1s ago
Process: 123374 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
Process: 123357 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 123355 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 123357 (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CGroup: /system.slice/nfs-server.service
Feb 16 11:19:13 k8s-node-02 systemd[1]: Starting NFS server and services...
Feb 16 11:19:14 k8s-node-02 systemd[1]: Started NFS server and services.
不同版本的系统可能默认安装的软件不同,如果没有该软件,需要安装
[root@k8s-node-02 backup]# yum install -y nfs-utils
3.2 修改配置文件
NFS的配置文件/etc/exports
[root@k8s-node-02 backup]# cat /etc/exports
/share *(rw,sync,no_subtree_check,no_root_squash)
[root@k8s-node-02 backup]# mkdir /configs
[root@k8s-node-02 backup]# exportfs -r #使配置文件生效
这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在。配置项:
配置项 | 说明 |
---|---|
rw | 可读写权限。 |
ro | 只读权限。 |
no_root_squash | 当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份。 |
root_squash | 如果登录NFS主机使用共享目录的使用者是root,那么对于这个共享的目录来说,它具有root的权限。 |
all_squash | 忽略登录NFS使用者的身份,其身份都会被转换为匿名使用者,通常即nobody。 |
anonuid | 通常为nobody,也可以自行设定这个UID的值,UID必须存在于/etc/passwd中。 |
anongid | 同anonuid,但是变为Group ID。 |
sync | 同步写入资料到内存与硬盘中。 |
async | 资料会先暂存于内存中,而非直接写入硬盘。 |
subtree_check | 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) |
no_subtree_check | 和上面相对,不检查父目录权限 |
wdelay | 如果多个用户要写入NFS目录,则归组写入(默认) |
no_wdelay | 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。 |
hide | 在NFS共享目录中不共享其子目录 |
no_hide | 共享NFS目录的子目录 |
secure | NFS通过1024以下的安全TCP/IP端口发送 |
insecure | NFS通过1024以上的端口发送 |
hide | 在NFS共享目录中不共享其子目录 |
如:
/home/share 192.168.88.109(rw,sync) 192.168.88.102(ro) 配置说明:对192.168.88.109赋予读写权限,102机器仅有只读权限。
4. 配置NFS客户端
服务端
[root@k8s-node-02 backup]# echo 123>/share/123
[root@k8s-node-02 backup]# ll /share/
total 0
-rw-r--r--. 1 root root 0 Feb 16 11:51 123
[root@k8s-node-02 backup]#
客户端
[root@k8s-node-02 backup]# mkdir /share
[root@k8s-node-02 backup]# mount 192.168.71.183:/share /share
[root@k8s-node-02 backup]# ll /share
total 0
[root@k8s-node-02 backup]# ll /share
total 0
-rw-r--r-- 1 root root 0 Feb 16 11:51 123