以下所使用的环境为:
虚拟化软件:VMware Workstation 17 Pro
麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
一、 NFS服务概述
NFS(Network File System),即网络文件系统。是一种使用于分散式文件协议通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用程序通过网络可以访问位于服务器磁盘中的数据。NFS在文件传输或信息传输的过程中,依赖于RPC协议。RPC(Remote Procedure Call),即远程过程调用。是客户端能够执行其它系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,能实现基于网络的资料共享,是因为NFS使用了PRC提供的传输协议,可以说NFS是RPC的一个程序。NFS一般使用在中小型网站集群后端存储,存储一些静态的资源(如图片、附件)。如果是大型网站,则会使用mooseFS-mfs。在企业应用中,使用FastDFS-fastdfs较多。
NFS可以通过网络让不同的机器、不同的操作系统彼此分享文件。当用户想使用远程文件时,只要用mount命令就可以把远程文件系统挂载到自己的文件系统下。NFS支持的功能很多,不同的功能使用不同的程序来启动,并且会主动向RPC服务注册所采用的端口和功能信息。RCP服务使用固定端口111监听来着NFS客户端的请求。
二、RPC守护进程
NFS服务依赖于RPC服务,至少需要启动3个系统守护进程。
- **nfsd:**NFS的守护进程,主要功能是管理客户端是否能够登录服务器
- mountd:RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务后,在使用NFS服务所提供的凭证前,还必须通过文件使用权限的验证。读取NFS的配置文件/etc/exports来比对客户端的权限。
- rpcbind:进行端口映射。当客户端尝试连接并使用RPC服务器提供的服务,rpcbind 会将所管理的端口(服务对应的端口)提供给客户端,从而使客户可以通过该端口向服务器请求服务。
三、NFS软件包
1.RPC主程序:rpcbind
在启动RPC服务之前,需要做好端口的映射工作。在启动任何一个RPC服务之前,都需要启动rpcbind。
查看本机是否安装rpcbind,可以看到rpcbind是默认安装好,但是未启动、未加入开机自启
2. NFS主程序:nfs-utils
提供rpc.nfsd和rpc.mountd这两个NFS daemons 和其他相关文档、说明文件、执行文件等。
查看本机是否安装nfs-utils,默认已经安装
3. 管理NFS目录列表:exportfs
exportfs命令需要参考配置文件/etc/exports。
常用参数
参数 | 说明 |
---|---|
-a | 输出配置文件中的内容,或全选配置文件中目录 |
-r | 重新读取配置文件中的设置,并立即生效,无需重启服务 |
-u | 卸载某一个目录 |
-v | 显示共享目录 |
4. 客户端查询指令:showmount
exportfs 是NFS服务端所使用的命令,而 showmount 主要用在Client端。showmount 可以用来查看 NFS 服务器共享出来的目录。
通过查询可以发现 showmount 是由 nfs-utils 软件包提供的
查询服务端的共享
showmount -e 192.168.110.1
四、NFS配置文件
NFS服务器共享目录时所使用的配置文件为 /etc/exports,文件默认不存在,需要手动创建
/share 192.168.110.0/24(ro)
/share 192.168.110.0/24(ro) 192.168.120.0/24(rw) # 存在多个客户端,以空格分隔
- /share:共享目录的绝对路径
- 192.168.110.0/24:允许访问的客户端
- ro:只读,共享选项,可设置其他文件访问权限
客户端常用配置
客户端配置 | 说明 |
---|---|
192.168.110.1 | 指定主机 |
192.168.110.1/24 192.168.110.* | 指定网段 |
www.meaauf.com | 指定域名 |
*.meaauf.com | 指定域 |
* | 所有主机 |
权限选项
当客户端在挂载NFS服务器共享目录时,会根据NFS服务器的权限选项来设置共享权限。
访问权限选项 | 说明 |
---|---|
ro | 只读 |
rw | 读写 |
NFS用户映射选项
选项 | |
---|---|
all_squash | 将远程用户访问的所有普通用户和其所属用户组都映射为匿名用户或用户组(nobody) |
no_all_squash | 不将远程访问的普通用户和其所属组映射为匿名用户或用户组【默认】 |
root_squash | 将root用户和所属用户组映射为匿名用户或用户组【默认】 |
no_root_squash | 不将root用户和所属用户组映射为匿名用户或用户组 |
anonuid=xxx | 将远程访问的所有用户都映射为匿名用户,指定该匿名用户账号的UID(匿名用户为服务端的本地账户) |
anongid=xxx | 将远程访问的所有用户组都映射为匿名组,指定该匿名组账号的UID(匿名组为服务端的本地组) |
NFS其他访问权限
选项 | |
---|---|
secure | 限制客户端只能从小于1024的TCP/IP端口连接NFS服务器【默认】 |
insecure | 允许客户端从大于1024的TCP/IP端口连接NFS服务器 |
sync | 将数据同步写入内存缓存区和磁盘中,效率降低,可以保证数据一致性 |
async | 将数据先保存在内存缓冲区,必须时才写入磁盘 |
wdelay | 检测是否存在相关的写操作,将这些写操作一起执行,提高效率【默认】 |
no_wdelay | 有写操作则立即执行,应该与sync一起使用 |
subtree-check | 如果输出目录是一个子目录,则NFS服务器将检查其父目录的权限【默认】 |
no_subtree_check | 输出目录是一个子目录,NFS不会检查其父目录的权限,提高效率 |
五、NFS服务器部署
案例需求
- 将Kylin-1搭建为内网YUM服务器,为Kylin-2通软件包
- 在Kylin-1上开启NFS服务,共享路径为YUM仓库目录
- 仅允许Kylin-2访问目录,权限为读写
节点设置
主机 | 网络信息 | 说明 |
---|---|---|
Kylin-1 | 192.168.110.1/24 | NFS服务器 |
Kylin-2 | 192.168.110.2/24 | 测试客户端 |
[Step1]:
Kylin-1配置:安装所需软件
yum install -y nfs-utils rpcbind
[Step2]:
Kylin-1配置:编辑配置文件
vim /etc/exports# 写入下列内容
/mnt/cdrom 192.168.110.2(rw)
[Step3]:
Kylin-1配置:查看rpcbind服务状态,默认状态为关闭
[Step4]:
Kylin-1配置:启动rpcbind和nfs-server,并加入开机自启,调整防火墙策略
systemctl enable --now rpcbind.service
systemctl enable --now nfs-server.service
firewall-cmd --add-service=rpc-bind --permanent # 防火墙需要放行NFS的三个组件
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload
[Step5]:
Kylin-1验证:查看NFS的权限目录,可以看到所有默认配置
cat /var/lib/nfs/etab
[Step6]:
Kylin-1验证:查看本地NFS共享目录
exportfs -a
[Step7]:
Kylin-1验证:显示本地系统中注册到rpcbind协议版本2的所有RPC服务
rpcinfo -p localhost
[Step8]:
Kylin-2配置:启动RPC守护进程和nfs服务
systemctl enable --now nfs-server.service
systemctl enable --now rpcbind.service
[Step9]:
Kylin-2验证:查看服务端的全部共享目录
showmount -e 192.168.110.1
[Step10]:
Kylin-2验证:新建目录/mnt/nfs,将目录挂载到/mnt/nfs(挂载点需要提前创建)
mkidr /mnt/nfs
mount 192.168.110.1:/mnt/cdrom /mnt/nfs
[Step11]:
Kylin-2配置:配置yum仓库文件,将原有的仓库文件备份
cd /etc/yum.repos.d/
mv kylin_x86_64.repo{,.bak}
vim nfs.repo# 输入下列内容
[yum]
name=yum
baseurl=file:///mnt/nfs
enabled=1
gpgcheck=0
[Step12]:
Kylin-2配置:清除YUM的缓存目录,重新创建缓存数据
yum clean all # 清除YUM的缓存目录
yum makecache # 重新创建缓存数据
[Step13]:
Kylin-2验证:尝试下载vsftpd
[Step14]:
Kylin-2配置:将NFS共享写入配置文件中,以实现开机自动挂载
vim /etc/fstab# 追加下列内容
192.168.110.1:/mnt/cdrom /mnt/nfs nfs4 defaults 0 0
[Step15]:
Kylin-2配置:客户端卸载NFS挂载
umount /mnt/nfs # 如果显示[device is busy],可以添加 -lf 参数强制卸载
六、autofs自动挂载
autofs自动挂载文件系统服务,需要后台automount进程支持。缺省配置下,客户端的NFS访问在系统重启后就消失了;如果将挂载写入/etc/fstab文件中,会实现永久挂载,即使不访问,该挂载点仍然是存在;autofs可以实现按需挂载,当你访问该目录时会自动挂载,超时会自动卸载。挂载点也无需提前新建,autofs会自动帮我们新建该目录。
autofs服务的配置文件
-
/etc/auto.master:主配置文件
-
/etc/auto.xxx:映射文件,文件必须以auto开头,后缀无任何要求
默认情况下,麒麟操作系统的镜像中不存在autofs的安装包
主配置文件的编写方式:
/misc /etc/auto.misc # autofs提供给我们的示例文件
- /misc:挂载点的父目录
- /etc/auto.misc:挂载点的映射文件
查看挂载点的映射文件 /etc/auto.misc
[Step1]:
为了方便后续实验,此处重新设置一个NFS共享
mkdir /share
vim /etc/exports# 写入下列内容,经过测试好像[192.168.110.*]无法匹配该网段
/share 192.168.110.0/24(rw)
[Step2]:
重新读取配置文件
exportfs -r
七、Kylin桌面版autofs配置
麒麟操作系统桌面版基于Ubuntu,包管理工具使用的是apt。
案例需求
- 在Kylin-1上存在1个NFS共享,共享的目录为 /mnt/cdrom
- 将共享的目录挂载到 Desktop 上的 /mnt/nfsshare
- 共享权限为读写
节点设置
主机 | 网络信息 | 说明 |
---|---|---|
Kylin-1 | 192.168.110.1/24 | NFS服务器 |
Desktop | 192.168.110.4/24;外网网卡(访问外网) | Kylin V10桌面版 |
[Step1]:
安装nfs-common
sudo apt install -y nfs-common
> 输入当前用户密码
[Step2]:
启动rpc守护进程和NFS服务
sudo systemctl start rpcbind
sudo systemctl start nfs-client.target
[Step3]:
显示NFS服务器的共享信息
showmount -e 192.168.110.1
[Step4]:
安装autofs服务
sudo apt-get install autofs
[Step5]:
编辑autofs主配置文件
sudo vim /etc/auto.master# 写入下列内容,/mnt为挂载点的父目录
/mnt /etc/auto.mnt
[Step6]:
将示例文件拷贝为映射文件,编辑映射文件
sudo cp /etc/auto.misc /etc/auto.mnt
sudo vim /etc/auto.mnt# 写入下列内容
nfsshare -fstype=nfs,rw 192.168.110.1:/share
[Step7]:
查看/mnt目录,可以看到此时不存在任何目录。启动autofs服务后,会自动创建该目录
sudo systemctl start autofs
八、Kylin服务器版autofs配置
麒麟操作系统服务器版的的镜像源中默认不存在autofs安装包,需要连接互联网使用第三方源。
案例需求
- 在Kylin-1上存在1个NFS共享,共享的目录为 /mnt/cdrom
- 将共享的目录挂载到 Desktop 上的 /mnt/nfsshare
- 共享权限为读写
节点设置
主机 | 网络信息 | 说明 |
---|---|---|
Kylin-1 | 192.168.110.1/24 | NFS服务器 |
Kylin-3 | 192.168.110.3/24;外网网卡(访问外网) | Kylin服务器版 |
[Step1]:
安装rpcbind和nfs-utils
yum install -y rpcbind nfs-utils
[Step2]:
启动rpc守护进程和nfs服务
systemctl start rpcbind.service
systemctl start nfs.service
[Step3]:
查看NFS服务器的共享
showmount -e 192.168.110.1
[Step4]:
安装autofs服务
yum install -y autofs
[Step5]:
编辑autofs主配置文件
vim /etc/auto.master# 写入下列内容
/mnt /etc/auto.mnt
[Step6]:
编辑autofs映射文件
cp /etc/auto.misc /etc/auto.mnt
vim /etc/auto.mnt# 修改内容如下
nfsshare -fstype=nfs,rw 192.168.110.1:/share
[Step7]:
查看mnt目录内容,可以看到为空。启动autofs服务并加入到开机自启,然后访问挂载点目录,此时mnt目录下会自动创建挂载点
ll /mnt/
systemctl enable --now autofs.service
ll /mnt/nfsshare