[转帖]为什么不推荐使用/etc/fstab

为什么,推荐,使用,etc,fstab · 浏览次数 : 0

小编点评

**原因分析:** 1. ** /etc/fstab 分区表中写入的文件系统目录失败导致。** 2. **操作系统在开机前会进行硬件扫描,主要扫描的设备包含CPU、内存、启动(引导)盘等。** 3. **倘若你在系统启动盘下新建了 /opt、/usr、/tmp 等目录,开机时也是可以成功加载文件系统目录。** 4. **当分区表中的目录在开机过程中没有被成功加载时,系统将进入紧急模式。** **解决方案:** 1. **使用 /etc/rc.d/rc.local 文件在开机时自动挂载文件系统目录。** 2. **使用 /etc/fstab 分区表中写入除系统启动盘之外的硬件设备,例如 /dev/vdb 。** 3. **使用 /etc/rc.d/rc.local 文件中的mount指令在开机时自动加载文件系统目录。**

正文

https://www.jianshu.com/p/af49a5d0553f

 

对于工作中使用服务器的公司来讲,每到节假日来临时,总免不了对服务器进行下电。而收假回来的早上,则会有一个早上的时间会花费在服务区的开机和修复工作上。是的,修复无法开启或开机失败的服务器。

几乎每次节假日售价回来,恢复服务器的正常工作状态都是一件不得不做的事情。或者开机进入紧急模式,或者因为服务启动失败等等原因,总有一些服务器无法正常启动。而通常,启动时看到的都是如 Welcome to mergency mode

 
emergency_mode.png

紧急模式下,网络等服务均没有开启,SSH无法连接到终端,大部分的工作都不可用。但是紧急模式下,可以通过 journalctl -xe 来查看系统启动过程中的日志。

#journalctl -xe
...
May 6 09:46:13 server systemd[1]: data.mount mount process exited, code=exited status=32
May 6 09:46:13 server systemd[1]: Failed to mount /data.
Subject: Unit data.mount has failed
Defined-By: sustend
Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Unit data. mount has failed.
The result is failed.
May 6 09:46:13 server systemd11: Dependency failed for Local File Systems.
Subject: Unit local-fs.target has failed
Defined-By: sustend
Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Unit local-fs.target has failed.
The result is dependencu.
May 6 09:46:13 server systemd[1]: Dependency failed for Migrate local SELinux policy changes from the old store structure to tr
Subject: Unit selinux-policy-migrate-local-changes@targeted.service has failed
Defined-By: sustend
Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Unit selinux-policy-migrate-local-changes@targeted.service has failed.
The result is dependency.
May 6 09:46:13 server systemd[1]: Job selinux-policy-migrate-local-changes@targeted.service/start

根据日志中的报错信息,很容易可以得出系统在启动时需要挂载 /data 目录,但是失败了。从而导致操作系统进入紧急模式。

而对于大多数人的使用习惯来说,需要使用到开机挂载的文件系统目录都是写入 /etc/fstab 中的。

/etc/fstab 的使用

众所周知,/etc/fstab 文件用来保存操作系统中的挂载目录信息,是一个静态文件。并且操作系统开机时默认也会加载 /etc/fstab 中的文件系统目录。

默认的 /etc/fstab 分区表中写入了 boot 和 root 分区的信息,以便于操作系统开机后可以挂载相应的两个文件系统目录。

#cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu May  5 09:54:17 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root /                       xfs     defaults        0 0
UUID=6bd8018f-79db-421a-a0a4-29693822ea8c /boot                   xfs     defaults        0 0

但是一旦尝试向分区表中写入其他的一些文件系统目录后,操作系统进行了重启,则极有可能会导致系统开机进入紧急模式。

正如上面的事件,就是一次因为开机加载 /etc/fstab 分区表中的文件系统目录失败而导致操作系统进入紧急模式的。那么,如何正确的使用 /etc/fstab 就成为一个值得考虑的问题了。

在考虑这个问题前,还是先回到我们最初的目的上。目的是什么?

我们需要的是一个可以在操作系统开机后自动挂载我们所需要使用到的目录,而不需要每次开机后手动挂载。如果需要每次操作系统开机后手动 mount 一次或多次,费时费力不说,更有可能影响应用的使用,所以,手动 mount 并不是一个解决方案。

既然是开机后进行自动挂载,那么通过Linux操作系统的 开机启动任务 + mount 自然也是可以实现相同的目的。

仅仅需要将在操作系统上已经挂载的文件系统目录,以命令的形式写入到 /etc/rc.d/rc.local 文件中。

#cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

# auto mount /data dir
mount -t xfs -o rw,noatime /dev/vdb /data

/etc/fstab开机挂载失败的原因探索

在很多情况下,通过向 /etc/fstab 分区表中写入文件系统目录的愿景是美好的,我们期望可以通过fstab能够将操作系统上的文件系统分区信息进行管理,以满足生产与应用的需要。

但经过多次的实践证明,随意向分区表中写入文件系统分区信息并不总是好的。因为,一旦分区表中的目录在开机过程中没有被成功加载,系统则必定会进入紧急模式。

那么,造成分区表加载分区信息失败的原因会是什么?

操作系统在开机前会进行硬件扫描,主要扫描的设备包含CPU、内存、启动(引导)盘等,而操作系统的主分区(\、boot、root)通常都是建立在启动盘之上。经过了硬件开机自检,启动盘确认正常后,也即是说,建立在启动盘上的文件系统目录(例如, root、boot)都是可以被正常挂载的。

倘若你在系统启动盘下新建了 /opt/usr/tmp 等目录,开机时也是可以成功加载文件系统目录。而我们所说的失败,则更多的原来于非操作系统启动盘以外的硬件磁盘(块设备)。

简单点说,操作系统的启动盘在操作系统上的展现形式可能是 /dev/vda - /、而当你在操作系统的分区表中写入 /dev/vdb - /data 的分区信息,并期望开机后能够自动加载 /data 目录,那么可能会导致加载分区表失败。

以下三个原因仅为个人推想,可能与实际原因相悖

  • 这或许是因为操作系统启动时仅仅加载了部分设备,而当需要加载分区表中的 /dev/vdb 设备时,该设备尚且没有被操作系统所识别到,这种情况下会导致失败。

  • 系统启动时加载分区表中的分区信息时,需要依赖对应的服务(或依赖),而依赖尚未加载完成。

  • 对于手动挂载文件系统目录后,挂载目录时使用了/dev/vdb格式的分区,因为某些原因(异常掉电、拔插硬盘)导致的系统识别到的分区名称发生变化(例如,从/dev/vdb变为/dev/vdd),而写入到分区表中的配置没有发生变化,重新加载分区表信息的时候会导致失败。

总而言之,向 /etc/fstab 中写入除系统启动盘之外的硬件设备可能并不是一个好的主意。如果你需要在开机后自动挂载某个文件系统目录,那么我更推荐你使用 /etc/rc.d/rc.local + mount 来实现自动挂载目录。

与[转帖]为什么不推荐使用/etc/fstab相似的内容:

[转帖]为什么不推荐使用/etc/fstab

https://www.jianshu.com/p/af49a5d0553f 对于工作中使用服务器的公司来讲,每到节假日来临时,总免不了对服务器进行下电。而收假回来的早上,则会有一个早上的时间会花费在服务区的开机和修复工作上。是的,修复无法开启或开机失败的服务器。 几乎每次节假日售价回来,恢复服务器

[转帖]Linux性能测试之unixbench

https://www.modb.pro/db/487945 大家好,昨天为大家带来了一篇关于在Linux下性能测试的文章《性能测试之LTP》,今天继续为大家推荐系列工具之unixbench,本工具用于Linux中cpu系统的测试,详情请查看百度,这里不多赘述,本文主要用于演示如何使用此工具。本文使

[转帖]Linux性能测试之unixbench

https://www.modb.pro/db/487945 大家好,昨天为大家带来了一篇关于在Linux下性能测试的文章《性能测试之LTP》,今天继续为大家推荐系列工具之unixbench,本工具用于Linux中cpu系统的测试,详情请查看百度,这里不多赘述,本文主要用于演示如何使用此工具。本文使

[转帖]焱融全闪系列科普| 为什么 SSD 需要 NVMe?

https://aijishu.com/a/1060000000371942 云计算存储极术推荐 NVMe 的由来 目前机械硬盘大多数使用 SATA (Serial ATA Advanced Host Controller Interface) 接口,接口协议为 AHCI,是 Intel 联合多家公

[转帖]shell的for循环

https://www.jianshu.com/p/e549b9b8d744 2020.03.05 17:19:39字数 195阅读 458 最佳推荐While 适合文件逐行处理For 固定循环While until不固定循环(需要满足条件退出) For 循环默认以空格为分隔符for循环: 将读入的

[转帖]为什么说MySQL单表行数不要超过2000w?

https://segmentfault.com/a/1190000042716913 大家好,我是不才陈某~ 作为在后端圈开车的多年老司机,是不是经常听到过,“mysql 单表最好不要超过 2000w”,“单表超过 2000w 就要考虑数据迁移了”,“你这个表数据都马上要到 2000w 了,难怪查

[转帖]为什么说:善战者无赫赫之功,善医者无煌煌之名,原来如此

https://baijiahao.baidu.com/s?id=1713816247282278270&wfr=spider&for=pc 善于作战的人往往不去立那些辉煌的战功,追求的是不战而屈人之兵。虽然历史上很多著名战将都立下赫赫战功,但是,真正的善战者,往往会回避立大功的机会,换句话说,就是

[转帖]为什么说IO密集型业务,线程数是CPU数的2倍?

https://juejin.cn/post/7184619435309662266 原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,非公众号转载保留此声明。 I/O密集型业务,线程数量要设置成 CPU 的 2 倍! 也不知道这是哪本书的坑爹理论,现在总有一些小青年老拿着这样的定理来说教

[转帖]Nginx 负载均衡 和 健康检查

https://www.jianshu.com/p/fbb0a81604d9 简介 从 nginx 下载, 到模块安装 关于为什么不使用 ngx_http_upstream_module 测试过 ngx_http_upstream_module 这个模块, 在应用稳定的情况下做做负载均衡还可以. 但

[转帖]微服务并不是银弹

https://www.oschina.net/translate/microservices-not-a-silver-bullet?print 让我们看一个公司/客户与前端框架技术团队之间的典型对话。 这是你从公司/客户那里听到的,技术团队因此而疯狂。当整个世界都从微服务中获益时,为什么不应该采