linux启动顺序_第1张图片

启动第一步:加载BIOS
接通电源后系统的控制权就交由BIOS来完成,系统会运行一个自我检查的例行程序(实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序),
先加载BIOS信息,BIOS中包含了自检程序,中断程序、配置信息、
运行POST(Power-On-Self-Test))自检,主要检查硬件的好坏
eg:硬盘坏道将导致电脑系统文件损坏或丢失,电脑无法启动或死机,
eg:内存条未插紧,

eg:BIOS程序损坏

eg:主板是否正常


启动第二步:读取MBR
Master Boot Record主引导记录,可里面却存放了预启动信息、分区表信息。
系统将其复制到内存中。其实被复制到物理内存的内容就是Boot Loader【实现的功能就是提供一个菜单给用户而具体到你的电脑,那就是lilo或者grub了。
eg:MBR文件损坏

启动第三步:Boot Loader
Boot Loader,Grub、Lilo和spfdisk是常见的Loader。
系统读取内存中的grub配置信息,依照配置信息来启动不同的操作系统。
eg:centos7中使用的是grub2

启动第五步:加载内核
建立Linux内核,基于Linux的程序应该可以正常运行了。
启动第六步:用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,
该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,

启动第七步:init进程执行rc.sysinit
/etc/rc.d/rc.sysinit脚本程序,包括设定PATH、设定网络配置,启动swap分区、设定/proc等等。
这里面的脚本够看几天的

启动第八步:启动内核模块
依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

启动第九步:执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
#THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES(此文件是为了兼容性目的而添加的)
#It is highly advisable to create own systemd services or udev rules(建议创建自己的systemd服务或udev规则)
#to run scripts during boot instead of using this file.(在引导期间运行脚本而不是使用此文件)。
Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

启动第十步--执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,
你已经可以用自己的帐号登入系统了。

启动的三种方法:

1、把启动程序的命令添加到/etc/rc.d/rc.local文件中

2、把写好的启动脚本添加到目录/etc/rc.d/init.d/,然后使用命令chkconfig设置开机启动。

3、把启动程序的命令添加到/etc/rc.d/rc.sysinit 文件中

init是所有进程的顶层

init读取/etc/inittab,执行rc.sysinit脚本

/etc/profile ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。

etc/bashrc ~/.bashrc 是在一个交互的非登陆shell启动的时候被调用。

~/.bash_logout 在用户注销登陆的时候被读取

centos7启动异常:

image.png

服务器卡住导致无法启动:

修改以下语句之后恢复
echo "TimeoutStopSec=5">>/usr/lib/systemd/system/rc-local.service
这个默认值是0. systemd在关于这个服务时 会在超过 TimeoutStopSec 的时间后发 信号9 给剩下的进程. 不会一直等着. 这样就算能解决这个问题了.


对于CentOS 5来说,初始化程序init是SysV init,其配置文件为:/etc/inittab;

对于CentOS 6来说,初始化程序init是upstart,其配置文件为:/etc/inittab, /etc/init/*.conf,也就是upstart将配置文件拆分成多个,在/etc/init/目录下以conf结尾的都是upstart风格的配置文件,而/etc/inittab仅用于设置默认运行级别;

对于CentOS 7来说,初始化程序init是systemd,其配置文件为:/usr/lib/system/systemd/*, /etc/systemd/system/*;