您的位置:首页 > 运维架构 > Linux

linux系统启动流程概览

2016-09-14 16:42 246 查看
作为一名Linux运维人员,我们需要对Linux的启动流程有一定的了解,在工作过程中,如果遇到了启动故障,我们就可以更加得心应手的进行故障排查。

我们先大概描述一下整个启动过程,如下图:


上述过程为整个启动流程的大体流程,每个步骤具体做了什么,我们可以参考如下总结: 1、POST

加电自检 power-on self test ( POST) ,加电后,固化在固件中的指令被加载到内存中,cpu
从内存读取这些指令,这些指令会对各个硬件进行检查,查看这些硬件是否能够正常运转。 2、BIOS(Boot Sequence) 还记得我们在bios中设置的启动项吗,bios会找到启动项中第一个可以启动的设备一般情况下都是设置从硬盘启动,bios会去扫描这些硬盘,从中发现可以启动的硬盘,发现存在mbr
的硬盘。 3、MBR(bootloader,446byte) 读取第一个启动硬盘的MBR,mbr的前446个字节,就是grub引导程序的第一阶段,但是单单的446个字节是无法完成所有引导工作的,这446个字节的唯一作用,就是找到grub引导程序的下一阶段的代码,通过第1阶段,找到grub的第1.5阶段的代码,grub的第1.5阶段存放在启动硬盘的0柱面上,启动硬盘的0柱面上不仅有grub的第1.5阶段,还有boot分区文件系统对应的驱动,为什么需要boot分区文件系统的驱动?因为grub很大,grub还有第2阶段的代码,grub的第2阶段代码就存放在/boot所在分区中,所以,如果我们如果想要得到完全的grub,则必须能够进入boot分区中,想要挂载boot分区,就需要有boot分区对应的文件系统的驱动。上述过程可以这样理解,我们通过grub stage 1 找到 grub stage 1.5, 再通过grub stage1.5找到boot分区的驱动,挂载boot分区后,找到grubstage 2。 4、 Kernel boot分区被挂载,grub也完整了,grub继续工作,读取grub.conf文件,grub.conf文件中指定了要加载的内核,加载boot分区中的内核文件到内存,并且在内存中解压,我们知道,linux最核心的内核文件存放在/boot中,那么系统启动时肯定要读取/boot所在分区中的内核文件,但是,boot分区是有文件系统的(此处我们假设boot是一个单独分区),如果想要能够使用boot分区,则必须获取boot
分区的文件系统对应的驱动,那么,我们是在什么时候获取了boot分区文件系统的驱动呢?就是在上一步,grub的1.5阶段中,获取到了boot分区的驱动,我们在安装操作系统的时候,boot分区对应的文件系统必须是标准的文件系统,比如ext文件系统,当我们确定了boot分区的文件系统以后,那么文件系统的驱动的大小则同时被确定了,所以,grub stage1.5在哪里可以找到boot分区的驱动,也就可以确定了。 5、 ramdisk或ramfs:[b]initrd/initramfs (伪根)[/b] 在上一步中内核已经被加载到内存中,这个时候,内核应该去挂载根分区,但是这个时候内核遇到了问题,根分区是存在文件系统的,如果想要使用根分区,内核必须获取根分区对应的文件系统的驱动,那么,内核去哪里获取根分区对应的文件系统驱动呢,答案是从boot分区的initramfs*.img这个文件中去获得,initramfs*.img这个文件是我们安装操作系统的时候生成的,我们在安装操作系统的时候,指定了根分区使用哪种文件系统,所以initramfs*.img知道根分区对应的文件系统是什么,从而initramfs*.img也保存了根文件系统对应的驱动,当initramfs*.img这个文件被加载到内存中,它会伪装成一个根文件系统,内核需要获取到真正的根文件系统的驱动的时候,就会去这个伪根中查找,从而获取到真正的根分区的文件系统对应的驱动,得到了真正的根分区的文件系统以后,就可以挂载并使用rootfs了。 6、(ROOTFS)init(/etc/inittab)(用户空间主导进程) bootloader将kernel和initrd/initramfs装载至内存,kernel和initrd位于boot分区,boot分区要是一个基本的磁盘设备,以便bootloader访问并加载至内存,kernel在内存中解压,kernel获得控制权,
kernel访问initrd,kernel借助initrd中的驱动或者模块,最终访问到rootfs,在rootfs中找到/sbin/init,用户空间中的程序的初始化由init完成。init读取配置文件/etc/inittab,执行/etc/rc.d/rc.sysinit初始化脚本,初始化系统的指定进程。 欢迎访问博主的个人博客http://www.zsythink.net/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  启动 grub 引导