暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

运维日记丨操作系统启动过程和常见启动故障

新运维新数据 2022-08-20
1147

各位新朋友~记得先点蓝字关注我哦~


当我们按下服务器电源的那一刻,你会看到一连串的信息显示在屏幕上!如果一切正常,一般过几分钟服务器就启动成功了。也许你也有过这样的疑问,这就启动好了??它是怎么启动的??如果出问题了咋办 ??今天我们就一起来看下操作系统的启动过程,再探讨下可能会遇到哪些启动问题(以CentOS7系统为例)

系统的启动过程基本可以分为几个阶段:POST-->MBR(GRUB)-->Kernel-->Init-->Runlevel



当按下电源,服务器开始执行BIOS上的POST过程,POST是Power On Self Test的加电自检意思,这个过程需要完成的工作是检查服务器的硬件是否正常,如果正常就按BIOS中设置的引导设备顺序,将第1块硬盘第1个扇区中的MBR加载到内存,然后BIOS将控制权交给下一步引导程序,如果第1块硬盘中没有找到MBR,则会切换到列表中的下一个设备并不断重复此过程,直到找到引导加载程序,否则返回错误。

这就是传统的BIOS引导模式,俗称legacy模式。相比传统的BIOS引导模式,目前主流的BIOS引导模式中还有UEFI引导模式。

uefi全称是Unified Extensible Firmware Interface 统一可扩展固件接口,它与传统的legacy引导模式的区别如下:



简单的来说uefi启动是新一代的bios,有着更强大的功能。近些年新的服务器主板基本都支持UEFI和BIOS两种引导模式,但需要注意的是,在 UEFI 模式下安装的系统,只能用 UEFI 模式引导;同理,如果你是在 Legacy 模式下安装的系统,也只能在legacy模式下引导。

UEFI模式下引导Linux的过程与Legacy模式下引导过程区别较大,这里暂不做讨论。

传统的BIOS引导模式,可以理解为硬件引导过程,其目的是让硬件知道BootLoader在哪,然后让BootLoader引导程序继续完成系统引导。


那么启动的这个过程可能会遇到哪些问题?

1、硬件自检不通过,如硬盘损坏或接触不良、内存和主板有静电(这是个人PC常见的故障)。如果出现该故障,大概率会听到很刺耳的“嘀嘀”声音。

2、引导顺序设置错误,无法进入下一阶段引导。

3、UEFI与Legacy引导模式设置错误,无法找到下一阶段引导程序。

如果系统启动时出现了这种“Operation System not found”界面,那么你需要检查一下BIOS设置,检查一下引导顺序,以及引导模式设置


硬件引导完成后,开始进入MBR中BootLoader程序引导阶段

上面提到了MBR,这又是什么?

MBR全称为Master Boot Record 主引导记录,其大小为512字节,其中前446字节为BootLoader启动加载器程序,中间64字节为硬盘分区信息,最后2字节为校验位。

目前常见的BootLoader有两种,早期的BootLoader是Linux Loader简称LiLo,现在常用的是GRand Unified BootLoader 简称grub。


grub是一个多系统启动程序,其执行过程可分为三个步骤:

stage 1:其实就是MBR,它的主要任务就是为了找到并加载下一阶段引导程序(stage2)。但由于各个分区的文件系统类型不同,而BootLoader仅有446字节,不可能把每种类型的文件系统驱动程序写在一起,所以就需要中间过渡阶段 stage 1.5;

stage 1.5:该步骤就是为了识别内核所在文件系统,加载驱动程序;在Linux的安装过程最后阶段,可以看到“generating initramfs…..”就是在创建initramfs,它就是stage 1.5的核心文件。

stage 2:grub根据/boot/grub2/grub.cfg配置文件找到kernel并加载,至此grub的工作结束,由kernel完成内核空间启动并启动第1个用户空间进程systemd,然后再由systemd完成用户空间的引导工作。

 

这一阶段就是MBR(GRUB)-->Kernel过渡的阶段,其目的就是让引导程序找到Kernal的位置,识别并加载Kernal。

那么启动的这个过程可能会遇到哪些问题?

1、 MBR主引导记录或BootLoader程序损坏,无法进入引导程序;如果出现该故障,也会出现“Operation System not found”界面。可以进入救援模式下,重装引导程序解决此故障

2、 initramfs损坏,无法正常加载驱动程序;出现该故障时,启动界面提示“error: file ‘/initramfs…’ not found”

出现该故障时,可以进入救援模式,重建initramfs文件。

3、 内核文件损坏或丢失,无法正常引导;出现该故障时,启动界面会提示“error: file ‘/vmliunz…’not found”

如遇到此类故障,可以进入救援模式,重新安装内核即可!

4、 内核空间或用户空间引导程序(如udev或selinux)出错,造成引导失败。

出现该类故障时,首先可以从启动的进度上看到内核已经进入正常引导,启动某项服务时报错

该类故障的各类较多,如出现类似故障,首先要根据启动的服务名,判断该服务是内核空间进程还是用户空间进程,再进入emergency模式,查看启动日志,根据日志针对性排除故障

 

内核完成引导后,开始进入init 初始化阶段

内核启动systemd后,会根据已经定义的启动级别,启动相应的进程。在CentOS6上定义了 0~6共7个启动级别,每个启动级别的定义如下

CentOS7上每个启动级别有了新的名字,但其最终的实现方式还是类似的。在/usr/lib/systemd/system/目录下有runlevel{0..6}.target共7个文件,分别对应CentOS6上的0~6启动级别。当系统需要启动指定级别时,即启动该级别对应target单元,启动该级别后,系统运行保存在在/etc/rc.d/目录下指定级别里包含的脚本

CentOS7上定义启动级别的配置文件为/etc/systemd/system/default.target,它其实是个软链接,如果当前系统的默认启动级别是multi-user(对应CentOS6上的3级别),那么该软链接就会对应到/usr/lib/systemd/system/multi-user.target文件上。

系统启动后,可以使用systemd命令设置默认启动级别,也可以设置某些服务开机自启,例如增加firewalld服务开机自启,实际上就是将firewalld的启动脚本,创建个软链接放到指定级别的目录中。

这一阶段完成后,系统就引导成功了,接下来就可以正常登录了

 

理解了这个阶段的启动过程,那么这个阶段又会遇到哪些故障呢?

1、启动级别设置错误,造成循环重启或启动后立即关机。如果遇到该类故障,需要进入单用户模式,修改启动级别后为3或5后,正常重启即可。

2、启动脚本错误,造成用户空间进程启动很慢或启动失败。

出现该类故障时,根据启动界面失败的服务名,再重启进入单用户模式,修改服务脚本,重新引导系统。

3、丢失root密码,启动后无法正常维护系统

出现该问题时,需要重新启动,编辑启动菜单进入单用户模式后,使用passwd命令修改密码,再重新引导操作系统。

4、系统依赖软件包损坏或卸载,造成系统无法使用,重新后无法引导或仍旧无法使用。

出现该问题时,需要记住被误删除的软件包名称,重启进入救援模式,安装光盘中的相同名称的软件包即可


对于操作系统的引导过程,还有很多有趣的故障模拟,这些故障模拟实验能加深对系统启动过程的理解。

除了上面提到的这些故障,你还遇到过哪些系统启动故障,欢迎交流探讨!




美创是国内领先的数据库服务提供商。服务团队拥有PG ACED 1名、Oracle&PG ACE 3人、DSI智库专家5名、DSMM测评师7名、OCM 20余人、数十名Oracle OCP、MySQL OCP、TDSQL TCP、OceanBase OBCP、TiDB PTCP、达梦 DCP、人大金仓、红帽RHCA、中间件weblogic、tuxedo、CISP-DSG、CISSP、CDGA、CDPSE、CZTP、CDSP等认证人员,著有《DBA攻坚指南:左手Oracle,右手MySQL》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》,《Oracle DBA实战攻略》等多本数据库书籍。运维各类数据库合计5000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、MongoDB、Redis、TDSQL、OceanBase、达梦、人大金仓等主流商业和开源数据库。美创拥有完善的运维体系和人员培养体系,并同时提供超融合、私有云整体服务解决方案、数据安全咨询及运营服务方案等,已为金融、政府、企业、能源等多个行业的客户提供量身定制的各类服务,赢得了客户的高度赞誉和广泛认可。



文章转载自新运维新数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论