Linux学习应用篇——搭建NFS服务器(超全面+详细!!!)
本文总结了如何在Linux的CentOS7.9系统上搭建NFS服务器,以及使用WIndows系统和Linux系统作为客户端链接NFS服务器、挂载共享目录的过程;内容包括NFS概述、NFS的配置文件和搭建NFS服务器过程中用到的命令、NFS服务器连接实验、以及NFS客户端的两种自动挂载方式,细节有如何克隆虚拟机进行实验、使用autofs动态挂载的注意事项等。内容仅供参考,部分参考他人优秀博文,发布于此供大家交流学习!
目录
NFS服务器搭建
1 NFS概述
1.1 NFS的基本介绍
1.2 NFS的工作原理
1.3 NFS的不同版本
2 NFS的配置文件
2.1 配置文件基本语法
2.2 配置参数
2.3 常用配置
3 搭建NFS服务器中用到的命令
3.1 管理共享文件目录:exportfs命令
3.2 显示NFS加载的信息:showmount命令
3.3 配置防火墙:firewall-cmd命令
4 NFS服务器实验
4.1 在Linux上搭建NFS服务器
4.1.1 安装nfs-utils工具包并启动NFS服务
4.1.2创建NFS服务端的共享目录并进行权限修改
4.1.3 在共享目录中创建测试文件
4.1.4 修改NFS服务的配置文件,进行客户端授权
4.1.5 检查本地的NFS服务挂载情况与共享参数
4.1.6 本地NFS模拟挂载访问
4.1.7 防火墙配置
4.1.7.1 直接关闭防火墙:不安全
4.1.7.2 放行NFS相关服务
4.2 Windows系统作为客户端远程挂载
4.2.1 Windows家庭版系统升级到专业版
4.2.2 启用NFS服务
4.2.3 Windows系统防火墙配置
4.2.4 Windows系统远程挂载共享目录
4.2.4.1 图形化页面挂载
4.2.4.2 命令行窗口挂载
4.3 Linux系统作为客户端进行远程挂载
4.3.1 克隆一个虚拟机进行测试
4.3.2 更改克隆虚拟机的固定IP地址
4.3.3 更改主机配置文件
4.3.4 在克隆虚拟机进行远程挂载
5 NFS自动挂载服务
5.1 开机自动挂载
5.2 autofs动态挂载
5.2.1 autofs介绍
5.2.2 安装autofs工具包
5.2.3 编辑autofs配置文件
5.2.4 创建一个新的配置文件来定义共享目录的挂载规则
5.2.5 启动autofs服务
5.2.6 挂载在/home下出现的问题
5.2.6.1 出现的问题:home下的文件夹消失
5.2.6.2 寻找原因:auto.rule自动挂载到home
5.2.6.3 解决方法
5.2.6.4 总结
NFS服务器搭建
1 NFS概述
在前面我们已经学习了FTP服务器的搭建,它是用于在不同的系统之间传输文件的工具;而在实际工作中,还有一种情景,我们并不需要下载编辑后再上传,而是共享资源文件即可,比如部门共享文档、设计稿、代码库,视频编辑团队共享大型媒体文件等情形。这时我们需要的就是能够共享文件的系统协议,常用的这类协议有以下两个:
-
Samba:Samba 是一组开源软件套件,实现了 SMB 网络协议,提供跨平台的文件共享、打印服务及域控制功能,核心作用是实现 Windows 与 Linux/Unix 系统之间的无缝互操作(文件共享)。
SMB,全称Server Message Block,即服务器消息块协议,用于在计算机之间共享文件、打印机和串口等。
-
NFS:这就是本文即将讲到的内容,其核心作用是实现Linux/Unix 系统之间的文件共享。
1.1 NFS的基本介绍
-
NFS,全称Network File System,即网络文件系统,是一种基于TCP/IP传输的、C/S架构的、分布式的网络文件系统协议。NFS是由 Sun Microsystems 在 1980 年代开发的,它允许远程主机通过网络挂载文件系统,并像它们是本地挂载的文件系统一样与它们进行交互,这使系统管理员能够将资源整合到网络上的集中式服务器上。随着时间的推移,它已经成为了Unix/Linux系统之间共享文件的标准方法之一。
NFS具有以下优点:
-
跨平台共享:不同操作系统之间能够无缝共享文件和目录。
-
集中管理:数据存储集中化,便于管理和备份。
-
空间节约与成本优化:客户端无需重复存储相同数据,降低硬件投资成本。
-
灵活访问:用户可以从任何授权的系统上透明地读写远程文件。
-
性能优化:支持缓存机制以提高文件访问速度,减少网络传输开销。
-
可扩展性好:可以根据需求增加服务器来扩展存储资源。
-
易用性强:配置简单,使用标准命令即可挂载和操作远程文件系统。
1.2 NFS的工作原理
NFS工作原理基于网络的客户端-服务器架构,它允许网络中的不同计算机如同访问本地磁盘一样透明地共享和存取远程主机上的文件系统。
具体过程如下:
-
首先,NFS服务器在其操作系统上配置并启动相关的服务进程,如
rpc.nfsd用于处理来自客户端的数据请求,并通过rpc.mountd管理共享目录的挂载权限。服务器在/etc/exports文件中定义了哪些目录可以被哪些客户端以何种权限访问。 -
当客户端需要访问服务器端的共享资源时,它会通过Portmapper(或rpcbind)服务查询到NFS服务器所监听的实际端口,并向这些端口发送挂载请求。一旦服务器验证并批准该请求后,客户端就可以将远端的共享目录“挂载”至本机的一个指定路径下。
-
在数据交换过程中,NFS协议借助于Remote Procedure Call (RPC)机制,使客户端能够执行诸如读、写、打开、关闭等与文件系统相关的操作。这些操作实际上是对服务器上对应文件系统的调用,而结果则通过网络返回给客户端。
-
为了提高性能,NFS支持缓存技术,即客户端可以对常用文件的部分或全部内容进行缓存。同时,为了确保多用户环境下的数据一致性,NFS使用lock manager服务(如
lockd)来管理和同步多个客户端对同一文件的并发访问。
RPC:全称Remote Procedure Call,即远程过程调用。RPC是一种用于实现分布式系统中进程间通信的机制。它允许一个应用程序在一台计算机上调用另一台计算机上的远程过程(也称为远程函数、远程方法)并获取执行结果,就像调用本地过程一样。
1.3 NFS的不同版本
| NFS版本 | 发布时间 | 版本描述 |
|---|---|---|
| NFS v1 | 1984年 | 基于8un Microsystems的原始设计,存在诸多限制目功能有限,它并未广泛部署。 |
| NFS v2 | 1985年 | 引入了文件属性、目录操作和其他增强功能,但仍有一些局限性,如32位文件大小限制和缺乏安全模型。 |
| NFS v3 | 1995年 | 增加了对64位文件大小的支持,提高了性能,并引入了更丰富的错误处理机制,NFS v3是使用最为广泛的NFS版本之一。 |
| NFS v4 | 2000年 | NFS v4引入了状态保持、会话概念、RPC流水线化、复制支持、安全性改进(例如Kerberos 集成)以及其他许多新特性。NFSV4.1还增加了并发写入支持、租约管理和复制提升等。 |
-
NFS v4版本不再依赖于
RPC服务的映射,故在安装时不再需要rpcbind软件包。但是如果需要兼容 NFSv2 或 NFSv3,则必须安装并运行 rpcbind。因为这两个版本的 NFS 依赖rpcbind来协商和管理通信。
2 NFS的配置文件
2.1 配置文件基本语法
-
NFS的配置文件为:
/etc/exports,内容为空,在服务端按需求进行填写配置。 -
配置语法:
NFS服务端共享目录 NFS客户端地址1(参数1,参数2,...) NFS客户端地址2(参数1,参数2,...)
-
NFS服务端共享目录:即NFS服务端上你想要共享出去的实际目录、文件夹,必须写绝对路径,且注意目录的读写本地权限;如果你允许客户端读写操作,则
other要有读写的权限(user、group和other)。 -
NFS客户端地址:即被允许访问服务端共享目录的客户端IP地址或网络掩码,可以用以下几种常用方式表示:
-
单个IP地址:如:191.168.123.123,只允许指定的客户端访问;
-
主机名:如:client1,只允许指定的主机名对应的客户端访问;
-
网络段:如:191.168.123.1/24,允许特定网络范围内的所有客户端访问;
-
域名:如:nfs.example.com,允许匹配该域名的客户端访问(需NFS服务端能解析域名);
-
通配符
*:如:*表示允许所有客户端访问。
-
2.2 配置参数
-
访问权限
-
ro(默认):只读访问,客户端无法修改共享文件; -
rw:读写访问,但需服务端文件系统权限允许。
-
-
同步与异步
-
sync:数据同步写入到内存和磁盘,优点是保证内存数据安全,但是效率较低(高并发状态下不用); -
async(默认):数据先缓存到内存即响应,再持久化到磁盘,效率非常高,但是可能会有数据丢失的隐患(崩溃时)。
-
-
安全设置
-
secure(默认):NFS通过1024以下的安全TCP/IP端口发送请求(默认); -
insecure:NFS通过1024以上的端口发送请求。
-
-
网络传输/写入设置
-
wdelay(默认):延迟写入;当 NFS 服务器在接收到多个写入请求时,会稍微延迟处理,以便合并多个请求为一次写操作,从而减少磁盘 I/O 操作次数; -
no_wdelay:禁用延迟写入;当 NFS 服务器立即处理每个写入请求,而不等待更多的写操作;当使用async时,无需此设置(需搭配sync)。
-
-
子目录设置
-
hide(默认):隐藏共享目录中的子目录挂载点,客户端只能看到父目录内容,无法访问子目录挂载点; -
no_hide:显式共享子目录挂载点,客户端可访问嵌套挂载的文件系统。
-
-
检查设置
-
subtree_check:强制 NFS 服务器检查父目录的权限,确保客户端对共享子目录的访问合法; -
no_subtree_check(默认):跳过父目录权限检查,仅验证客户端对共享目录本身的权限。
-
-
映射设置
-
all_squash:所有NFS客户端访问NFS服务端共享目录数据时,其UID和GID均被映射为匿名用户nfsnobody,适合公用目录; -
no_all_squash(默认):保留NFS客户端的UID和GID,服务端根据这些 ID 校验权限; -
root_squash(默认):当NFS客户端以root账号访问NFS服务端共享目录数据时,把该root映射为NFS服务端的一个匿名用户,该用户的UID、GID会变成nfsnobody的信息; -
no_root_squash:允许客户端的root用户直接以root身份访问服务端文件,非常不安全,建议禁用!
-
-
挂载点跨越设置
-
crossmnt:允许客户端递归访问共享目录下的所有嵌套挂载点; -
nocrossmnt(默认):禁止客户端跨越挂载点访问子目录,仅共享当前目录的直接内容。
-
-
文件锁设置
-
insecure_locks:放宽文件锁检查,兼容不支持NLM协议的旧客户端; -
secure_locks(默认):强制客户端遵守标准的 NFS锁管理器(NLM)协议,确保文件锁严格生效。
-
2.3 常用配置
/application/shared *(rw,sync,insecure)
-
说明:将
/application/shared目录共享给所有客户端,允许读写、同步写入,并允许通过非特权端口(1024以上的端口)访问。
3 搭建NFS服务器中用到的命令
3.1 管理共享文件目录:exportfs命令
-
语法:
exportfs [选项] -
功能:管理NFS服务器导出的共享目录(无需重启NFS服务即可生效)。
-
选项
-
-a:全部挂载(或卸载)/etc/exports文件内的设定; -
-r:重新挂载/etc/exports中的设置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的内容; -
-u:卸载指定共享目录(需指定客户端和目录); -
-v: 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。
-
-
示例:
exportfs -rv-
说明:重新加载所有共享配置。
-
3.2 显示NFS加载的信息:showmount命令
-
语法:
showmount [选项 <参数>] -
功能:查询NFS服务器的共享信息或客户端挂载状态。
-
选项
-
-a:以HostName:Directory格式显示所有客户端的挂载信息,其中-
HostName:客户机的主机名或IP;
-
Directory:客户端挂载的NFS共享目录路径。
-
-
-d:仅显示已被NFS客户端挂载的目录; -
-e:显示NFS服务器上所有导出的共享目录(即/etc/exports中定义的共享列表)。
-
-
参数:NFS服务器IP或主机名。
-
示例:
showmount -e 127.0.0.1-
说明:显示本机的NFS服务端挂载情况。
-
3.3 配置防火墙:firewall-cmd命令
-
语法:
firewall-cmd [options] [command] [parameter] -
常用选项如下:
| 选项 | 说明 |
|---|---|
--zone= | 指定防火墙区域(默认 public) |
--permanent | 永久生效(需 --reload 或重启生效) |
--reload | 重新加载防火墙规则(不中断现有连接) |
--complete-reload | 完全重新加载(中断所有连接) |
--state | 查看防火墙状态 |
--list-all | 列出当前区域的所有规则 |
-
常用命令:(在root用户下执行)
-
示例1:
firewall-cmd --state-
说明:检查防火墙是否运行,若是,则回复
running;
-
-
示例2:
firewall-cmd --list-all-
说明:查看防火墙当前区域(默认公共区域)的规则;
-
-
示例3:
firewall-cmd --permanent --add-service=ssh-
说明:永久放行SSH服务,若想临时放行用于测试则去除
--permanent;
-
-
示例4:
firewall-cmd --permanent --remove-service=ssh-
说明:永久移除SSH服务,若想临时移除用于测试则去除
--permanent;
-
-
示例5:
firewall-cmd --permanent --add-port=80/tcp-
说明:永久放行TCP端口80,若想临时放行用于测试则去除
--permanent;
-
-
示例6:
firewall-cmd --reload-
说明:重新加载防火墙规则(使用
--permanent后需执行--reload生效)。
-
-
4 NFS服务器实验
-
采用Windows系统和两个Linux的CentOS7.9系统进行实验,其中一台CentOS7.9作为NFS服务端,另外一台CentOS7.9系统和Window系统用作NFS客户端,测试NFS共享文件夹功能,完成创建文件、删除文件和创建文件夹的功能。
4.1 在Linux上搭建NFS服务器
4.1.1 安装nfs-utils工具包并启动NFS服务
(1)检查系统是否已安装nfs-utils工具包:rpm -q nfs-utils

(2)若没有安装,通过以下命令安装:yum -y install nfs-utils

(3)再通过以下命令启动NFS服务:
systemctl start nfs和systemctl enable nfs

(4)检查NFS版本:cat /etc/nfs.conf | grep -i "vers[34]"

-
当前最新的nfs-utils工具包基本都包含了NFS v4最新版本,该版本不再依赖rpcbind工具包,故可以不安装或启动rpcbind。
4.1.2创建NFS服务端的共享目录并进行权限修改
(1)创建共享目录:mkdir -p /application/shared,使用-p选项级联创建;
(2)权限修改1:chmod -R 777 /application/shared,将权限修改为777,让other用户也能读写;(由于色块在白色背景下显示不全,故更改了FinalShell背景色)

(3)权限修改2:chown -R nfsnobody:nfsnobody /application/shared,将共享目录所属用户和用户组改为nfsnobody,如果客户端用户UID在服务端不存在,NFS 会将其映射到 nfsnobody(即“匿名访问”),客户端即使以不同用户访问也能正常读写。
(4)可以用命令id nfsnobody来检查nfsnobody用户是否存在。

4.1.3 在共享目录中创建测试文件
-
创建测试文件:
touch 测试文件1.txt 测试文件2.txt
4.1.4 修改NFS服务的配置文件,进行客户端授权
(1)确定需要的配置,此处仅用于测试,固选用上面提到的常用配置:
/application/shared *(rw,sync,insecure) # 说明:将 `/application/shared` 目录共享给所有客户端,允许读写、同步写入,并允许通过非特权端口(1024以上的端口)访问。
(2)写入配置:可用vim编辑器打开后写入,也可使用echo + 重定向符>>写入;

(3)加载配置文件:在更新配置文件后需要重新加载,也有两种方式,一是直接重启NFS服务,即systemctl restart nfs;二是仅重新加载配置,采用exportfs -r
4.1.5 检查本地的NFS服务挂载情况与共享参数
(1)检查挂载情况:使用命令showmount -e 127.0.0.1;(注:使用该命令需要开启rpcbind)
(2)检查共享参数:使用命令cat /var/lib/nfs/etab。

具体详细配置为:
/application/shared *(rw,sync,wdelay,hide,nocrossmnt,insecure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,root_squash,no_all_squash)
4.1.6 本地NFS模拟挂载访问
(1)创建本地挂载目录:mkdir /home/shared_test;
(2)将共享目录挂载至本地挂载目录:mount -t nfs 127.0.0.1:/application/shared /home/shared_test;
(3)检查挂载情况:mount -l | grep shared;
(4)打开本地挂载目录,查看共享目录:ls /home/shared_test
(5)测试完毕,卸载共享:umount /home/shared_test

4.1.7 防火墙配置
4.1.7.1 直接关闭防火墙:不安全
-
采用以下命令直接关闭防火墙:
systemctl stop firewalld;
4.1.7.2 放行NFS相关服务
-
在防火墙中的相关服务有:
nfs、mountd和rpc-bind;
| 服务 | 功能描述 |
|---|---|
nfs | 提供 NFS 文件共享的核心服务,默认端口 2049 |
mountd | 处理客户端的挂载请求,动态端口(通常需固定)。 |
rpc-bind | RPC 端口映射服务,默认端口 111,用于动态服务端口注册与查询。 |
-
必须开启的服务有:
nfs、mountd和rpc-bind; -
使用以下命名开启对应服务:
firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind
-
开启服务后必须使用以下命令重新加载防火墙规则才会生效:
firewall-cmd --reload
4.2 Windows系统作为客户端远程挂载
-
随着版本的更新,如今的Windows系统也支持NFS服务,但是Windows家庭版内没有内置NFS功能,如果家庭版的Windows系统想要实现Windows系统使用NFS服务,则需要升级到Windows专业版或者企业版的系统。本人的Windows 10系统初始也是家庭版,故在此也放上将Windows家庭版系统升级到专业版的方法。
4.2.1 Windows家庭版系统升级到专业版
(1)在桌面“此电脑”处右键单击选择“属性”进入设置,在“系统信息”页面下滑至“相关设置”,选择“更改产品密钥或升级Windows”,在弹出的“激活”页面选择“更改产品密钥”;
(2)在网络上找到Windows专业版或者企业版的产品密钥,填入对应位置,然后断开网络,再点击“下一页”,然后“开始”;等待安装重启即可;
(3)重启后Windows系统升级完成,电脑内的软件应用和数据不会变化,但此时系统未被激活,激活方法如下:
-
使用快捷键
win + R唤出运行窗口,然后输入powershell打开命令行; -
在命令行输入以下内容,然后回车:
irm https://get.activated.win | iex
-
在随后弹出的窗口中输入数字“1”,等待进度完成,即可永久激活。
【注】该代码在本文发布时依然有效,以后不能保证仍然有效。
(4)重复第一步进入“激活”页面,可以看到专业版已被激活。
4.2.2 启用NFS服务
(1)在系统的搜索处搜索“控制面板”并打开,选择“程序”,在“程序和功能”处选择“启用或关闭Windows功能”;
(2)在弹出的窗口中找到“NFS服务”,打开并选中子目录的选项,在点击“确定”进行加载;

4.2.3 Windows系统防火墙配置
(1)打开“控制面板”,点击进入“网络和Internet”,再点击进入“网络和共享中心”;

(2)进入后点击左侧边栏中的“更改高级共享设置”;

(3)打开其中“专用”和“来宾或公用”的“启用网络发现”和“启用文件和打印机共享”;打开其中“所有网络”的“公用文件夹共享”。

4.2.4 Windows系统远程挂载共享目录
4.2.4.1 图形化页面挂载
(1)打开“此电脑”,在上边栏的“计算机”处找到“映射网络驱动器”,点击进入;
(2)在弹出的窗口对应处按格式:IP地址共享目录路径填写,点击“完成”,随后弹出尝试连接的窗口,等待一段时间后即可连接成功;

(3)在文件管理器的“此电脑”页面能找到挂载的文件夹,双击进入,可以添加、修改、删除文件并创建文件夹。


(4)在“此电脑”的共享磁盘处右键单击可以选择“断开连接”。

4.2.4.2 命令行窗口挂载
(1)使用快捷键win + R打开运行窗口,输入cmd打开命令提示符窗口;
【注】不要使用powershell,在其中使用mount命令会报错。
(2)使用命令:showmount -e IP地址,检查NFS服务端的共享目录并测试能否连接;
(3)使用命令:mount 92.168.205.XXpplicationshared Z:,将NFS服务端的共享目录挂载到Windows系统的Z:驱动器上;
(4)在文件管理器的“此电脑”页面能找到挂载的文件夹,双击进入,可以添加、修改、删除文件并创建文件夹;
(5)使用命令:umount Z:卸载。

4.3 Linux系统作为客户端进行远程挂载
4.3.1 克隆一个虚拟机进行测试
(1)关闭当前虚拟机,在VMware Workstation处进行克隆,具体克隆步骤此处不再赘述,可参考以下链接:克隆虚拟机_无法为共享或远程虚拟机创建克隆-CSDN博客

(2)克隆完成后,需要修改mac地址,在“设置”中找到“网络适配器”,选择“高级”,点击“生成”进行MAC地址的更换,再点击“确定”即可。
Mac地址是分配给网络接口卡(NIC)的硬件地址,用于在网络中唯一标识设备。

4.3.2 更改克隆虚拟机的固定IP地址
-
在之前本机已经配置了固定IP地址,故克隆后的虚拟机依然是一样的IP地址,所有需要更改,如何配置固定IP地址可以参考Linux零基础快速入门学习笔记(黑马程序员)-CSDN博客中的对应部分。
(1)使用vim编辑器修改文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR="192.168.205.131" # IP地址,自己设置,要匹配网络范围
修改为与原虚拟机不同的IP地址后保存退出;
(2)重启网络服务:systemctl restart network。
4.3.3 更改主机配置文件
(1)在主机使用命令:vim /etc/exports打开配置文件,将克隆虚拟机的IP地址填入对应位置,修改完成后保存退出:
/application/shared 192.168.205.XXX(rw,sync,insecure)
(2)使用命令:exportfs -r重新加载配置。
4.3.4 在克隆虚拟机进行远程挂载
(1)在克隆虚拟机使用命令:showmount -e 主机的IP地址,检查NFS服务端的共享目录并测试能否连接;
(2)在克隆虚拟机使用命令:mount -t nfs 主机的IP地址:/application/shared /home/shared_test,将共享目录挂载到克隆虚拟机的/home/shared_test目录,可以使用df -Th命令检查挂载情况;

(3)测试添加、修改、删除文件并创建文件夹;
(4)使用命令:umount /home/shared_test 卸载。

【注】卸载时不能处于共享目录内部,需要先退出至上层目录,否则会报错。
5 NFS自动挂载服务
5.1 开机自动挂载
-
经过上述步骤已经完成了共享目录挂载,但是这种挂载在系统重启后会丢失,如果需要长时间挂载使用的话,需要再进行开机自动挂载的配置。
(1)进入克隆虚拟机的开机自动挂载文件:vim /etc/fstab;
(2)把以下挂载命令写入到该文件尾部中,并保存退出:
192.168.205.125:/application/shared /home/shared_test nfs defaults 0 0
(3)使用命令df -Th查看硬盘挂载情况,重启后再使用命令lsblk -l查看硬盘挂载情况,如保持挂载,则挂载成功。;

5.2 autofs动态挂载
-
前面我们提到的挂载方式有:手动mount命令挂载和在
/etc/fstab文件中配置开机自动挂载这两种方式;手动挂载可在需要时才选择挂载,但需要通过命令操作;开机自动挂载虽然便捷,但若是很多用户挂载了共享目录,但实际上他们并不去使用该目录,这会导致NFS服务器资源的耗费,给服务器造成很大的压力。因此一些具有动态特性的文件系统可以选择动态挂载,即使用autofs服务,仅在访问时才动态挂载共享目录。
5.2.1 autofs介绍
-
autofs是一个守护进程,它会在后台检测用户是否要访问某一个还未挂载的文件系统,autofs会自动检测该文件系统是否存在,如果存在则进行挂载;如若用户过了一段时间没有使用该文件系统,autofs自动将其卸载,节省人力维护的成本,以及节省服务器资源。 -
autofs的缺点:autofs只有当用户请求时候才挂载文件系统,如果是高并发的业务场景,大量的用户并发访问文件系统,autofs突然进行大量挂载,会给服务器造成很大的压力,因此在一些高并发场景下,宁愿保持持续挂载,也不用autofs。
5.2.2 安装autofs工具包
-
在测试机中使用命令:
yum -y install autofs,安装autofs工具包。
5.2.3 编辑autofs配置文件
【注】选择的挂载点,应当为一个新目录,或者是空目录,不然可能会出现报错,此处我选用的挂载点为/home/shared_test,在启动autofs后出现了错误bash-4.2$,在5.2.6部分我会进行分析,并不建议将挂载点放在/home下,此处为反例。
(1)在测试机中打开autofs配置文件:vim /etc/auto.master,在命令模式下输入:set nu以显示行号;
(2)在第7行下一行输入以下内容,用于声明测试机挂载点基目录与对应的子规则文件的关联关系,并设置全局参数:
7 /misc /etc/auto.misc # 文件内本来就有,不用修改 8 /home /etc/auto.rule # 超时时间哦欸之:--timeout=600 # 语法:[挂载点基目录] [映射规则文件路径] [可选参数] # 挂载点基目录:为挂载目录的父目录,如/home/shared_test/的父目录为/home,也称一级挂载点; # 映射规则文件路径:子挂载规则文件路径,该文件需要自行创建并添加对应规则; # 可选参数:通常为设置超时时间,超时自动卸载,单位为秒(s)。

5.2.4 创建一个新的配置文件来定义共享目录的挂载规则
(1)创建子挂载规则文件:vim /etc/auto.rule;
(2)在文件中添加以下内容,用来定义共享目录的挂载规则:
shared_test -fstype=nfs4,rw,sync,soft,intr 192.168.205.125:/application/shared # 语法:[本地子目录名] -fstype=[文件系统类型], [挂载选项] [NFS服务器地址]:[远程共享路径] # 本地子目录名:二级挂载点; # rw:读写权限;sync:同步写入;soft:软挂载,服务器无响应时,客户端超时后返回错误; # intr:允许用户中断挂起的NFS操作。
(3)保存并退出。
-
将挂载点目录分为一级挂载点(父目录)和二级挂载点(子目录)是为了便于多个挂载点同时出现的情况,这样就只需要在
/etc/auto.rule中修改;当然,如果在auto.master中放入完整的挂载点目录也是可以的,但是在auto.rule的对应位置就需要填上通配符*。
5.2.5 启动autofs服务
(1)使用以下命令启动autofs服务:
systemctl start autofs systemctl enable autofs
(2)测试是否启动成功:在不打开/home/shared_test时使用命令df -Th检查是否挂载,在打开/home/shared_test后使用命令df -Th检查是否挂载,不设置超时时间,退出文件后再使用命令df -Th检查是否挂载。
5.2.6 挂载在/home下出现的问题
5.2.6.1 出现的问题:home下的文件夹消失
-
在按照上面的步骤启动
autofs服务后,打开home目录发现内部的所有文件夹消失不见,包括用户的家目录/home/rfic、/home/ftpuser1和/home/ftpuser2,以及原定的挂载点文件夹shared_test,使用df -Th命令检查挂载情况也没有线索; -
此时发现虽然
home目录下虽然没有文件夹,但是在home目录下依然可以通过命令cd shared_test进入挂载的共享目录,并可以正常修改文件,使用df -Th也显示挂载成功,返回home目录发现挂载点文件夹重新出现,但是其他目录依然消失不见;


-
由于用户的家目录消失,所以
root用户无法返回任意一个普通用户,尝试返回会显示:bash-4.2$,此时关闭autofs的开机自启动服务然后重启可以恢复原状,但是此法治标不治本。
5.2.6.2 寻找原因:auto.rule自动挂载到home
-
使用命令
mount | grep home查看home目录的挂载情况,可以发现auto.rule文件按照auto.master被自动挂载到home下;

-
由此可分析原因可能为:在
auto.master中,autofs将/home配置为挂载点,此时整个/home目录会被autofs接管,而默认情况下,autofs不会保留原有目录内容,而是仅显示当前活动的挂载点,因此home中的文件夹被隐藏,而挂载点目录在auto.rule中被挂载了共享目录,故依然可以被唤起; -
因此把
auto.rule卸载则有可能可以解决这个问题。
5.2.6.3 解决方法
(1)关闭autofs服务:systemctl stop autofs;
(2)退出home目录,再卸载autofs.rule:umount /home。

5.2.6.4 总结
-
若是需要使用
autofs动态挂载服务,选定的挂载点,即auto.master中的本地挂载目录,不要在包含系统相关文件的文件夹中,建议在根目录下新建一个空的二级目录作为挂载点,这样可以避免出现该问题。









