Loading... <p><span style="font-size: 18px">Linux启动流程</span></p> <p>POST–>Boot Sequence–>MBR–>Grub–>Kernel(initramfs)–>rootfs–chroot(根切换)–>/sbin/init–>RunLevel–>rc.sysinit—>rc 3(rc.local)–>启动终端</p> <p>1、Post加电自检</p> <p>2、运行BIOS程序,选择启动源(硬盘,网络,CD/DVD,USB)</p> <p>3、MBR 512Byte,(Bootloader,FAT,55AA)</p> <p> Bootloader:占446Byte,是Grub的第1阶段,有安装系统时写入到磁盘</p> <p> FAT:占64Byte,分区表,一个分区表占16Byte,所以主分区最多4个</p> <p> 55AA:占2Byte,表示Bootloader是否有效</p> <p>4、Grub</p> <p> Grub第1阶段:MBR中Bootloader程序,加载至内存中运行,可找到Grub第1.5阶段所在位置</p> <p> Grub第1.5阶段:透过Grub第1阶段,找到Grub第1.5阶段,使能够挂载Grub第2阶段所在分区(boot分区)</p> <p> Grub第2阶段:向内核传递参数,并加载内核运行</p> <p>5、Kernel(initramfs)</p> <p> 运行中的内核挂载initramfs文件系统(精简内核将部分文件系统驱动做到此微系统中),使得内核能挂载硬盘真的根文件系统</p> <p>6、rootfs</p> <p> 内核挂载硬盘的根文件系统</p> <p>7、chroot</p> <p> 根文件系统切换,从initramfs切换至我们安装linux的根分区</p> <p>8、/sbin/init</p> <p> 运行init程序</p> <p>9、Runlevel</p> <p> CentOS5:运行起来的init程序会去读取/etc/inittab文件,根据配置文件启动相应运行级别</p> <pre class="brush:bash;toolbar:false"> id:3:initdefault: #确定默认运行级别3 si::sysinit:/etc/rc.d/rc.sysinit #运行系统初始化脚本,完成系统初始化 l3:3:wait:/etc/rc.d/rc 3 #以运行级别为3,运行/etc/rc.d/rc脚本</pre> <p> CentOS6:读取/etc/inittab,执行/etc/init/目录下以.conf结尾的脚本,</p> <pre class="brush:bash;toolbar:false">[root@neolinux init]# ls control-alt-delete.conf plymouth-shutdown.conf rc.conf rcS-sulogin.conf start-ttys.conf init-system-dbus.conf prefdm.conf rcS.conf serial.conf tty.conf kexec-disable.conf quit-plymouth.conf rcS-emergency.conf splash-manager.conf [root@neolinux init]# cat rc.conf # rc - System V runlevel compatibility # # This task runs the old sysv-rc runlevel scripts. It # is usually started by the telinit compatibility wrapper. # # Do not edit this file directly. If you want to change the behaviour, # please create a file rc.override and put your changes there. start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] task export RUNLEVEL console output exec /etc/rc.d/rc $RUNLEVEL #运行/etc/rc.d/rc此脚本 [root@neolinux init]# cat rcS.conf #*********** #** exec /etc/rc.d/rc.sysinit #运行/etc/rc.d/sysinit脚本 #**</pre> <p>10、rc.sysinit</p> <p> sysinit脚本运行功能:</p> <pre class="brush:bash;toolbar:false"> a、设置主机名 b、激活udev,selinux c、挂载/etc/fstab中设定的文件系统 d、根据/etc/sysctl.conf文件设置内核参数 e、加载额外驱动 f、....等等,还有很多</pre> <p>11、rc 3(rc.local)–>Service</p> <p> 运行rc脚本传递运行级别,rc脚本会跟据对应的运行级别去运行/etc/rc.d/目录下以rc.#开头的目录下各种脚本</p> <p> K##开头的脚本表示关机时运行,##数字越大越优先关闭</p> <p> S##开头的脚本表示开机时运行,##数字越小越优先开启</p> <p> 以运行级别为3,/etc/rc.d/rc3.d/目录下,以S99开头的链接文件,此脚本链接到/etc/rc.d/rc.local,用户自己有需要开机运行的脚本可以放在此处</p> <p>12、终端启动</p> <p> 用户输入用户名密码,认证通过加载配置文件进入bash环境</p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信