linux开机过程分析
1、开机自检BIOS
linux开机加电后,系统开始开机自检,该过程主要对计算机各种硬件设备进行检测。开机自检完成后,CPU首先读取BIOS程序,按照BIOS中设定的启动次序(Boot Sequence)逐一查找可启动设备。找到可启动的设备后,读取指定硬盘MBR(主引导分区),运行 Boot Loader 程序
2、MBR引导
硬盘上第0磁道第一个扇区被称为MBR(Master Boot Record),也叫主引导记录。它的任务就是查找并且加载处在硬盘分区上的Boot Loader(引导程序)
硬盘上第0磁道第一个扇区被称为MBR(Master Boot Record),也叫主引导记录,它由三个部分组成:
- 主引导程序(Bootloader) ,是在操作系统内核运行之前运行的一段小程序。
- 硬盘分区表DPT(Disk Partition table)
- 硬盘有效标志(55AA)
3、GRUB菜单
Boot Loader程序读取grub(引导加载程序)配置信息,就会出现GRUB图形界面,让用户选择加载什么样的内核并依照此配置信息来启动不同的操作系统
4、加载内核
用户选择要加载的内核之后,引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核
5、运行init进程
内核被加载后,第一个运行的程序便是/sbin/init
1、会读取/etc/inittab文件,确定运行级别。 启动时根据"运行级别",确定要运行哪些程序
2、执行rc.sysinit,系统初始化。/etc/rc.d/rc.sysinit脚本程序,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本
3、执行不同级别的脚本程序。根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序。rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
/etc/inittab文件最主要的作用就是设定Linux的运行等级其.设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。
Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
rc.sysinit脚本主要做了哪些事情?
- 获取网络环境与主机类型。首先会读取网络环境设置文件"/etc/sysconfig/network",获取主机名称与默认网关等网络环境
- 用户自定义模块的加载。通过"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中。
- 加载内核的相关设置。系统会主动读取/etc/sysctl.conf文件的设置值
6、执行/bin/login程序,进入登录状态
命令行登录:首先读入 /etc/profile,这是对所有用户都有效的配置;然后依次寻找下面三个文件,这是针对当前用户的配置。
~/.bash_profile -> ~/.bash_login -> ~/.profile
linux启动过程排查
首先我们需要观察开机进入了哪个阶段卡住了。如果能进入grub引导(也就是出现选择内核得界面),可以尝试进入单用户模式进行排查,如果连单用户模式都进不去,那么只能将系统磁盘挂载到其他服务器,通过其他服务器进行排查
单用户模式
已centos为例,其他发行版略有差异请自行查询
首先我们进入开机界面,按e进行选择
然后找到图中红线标注的该行,在行尾添加 init=/bin/bash 并将对应的ro权限改为rw权限 ,然后 按 Ctrl +x 执行进入单用户模式
光盘救援模式