Centos开机启动流程二

前言

上次文章中,我们了解到了开机启动流程中的BIOS部分,我们知道,我们的机器加电之后,会进行一系列的开机自检过程,所有的硬件都工作正常后,我们的BIOS会查看开机启动项,按顺序查找我们的设备,发现我们的boot loader,正常情况,我们的第一开机项是硬盘设备。我们也了解到,我们现在Linux系统用到的引导程序大多数都是GRUB,我们也了解到了我们的Linux是单内核设计。

Centos开机启动流程二

GRUB部分

那我们也知道,我们的MBR一般是512字节,非常的小。但我们的GRUB却特别的精美,还有启动菜单,图片,还可以进行参数的传递,按指令对我们的参数进行启动,为什么512字节可以装下那么多东西?

其实我们的GRUB真正存储在磁盘设备上,我们的GRUB程序设计者,将整个加载的过程分为Stage1,Stage1_5,Stage2,阶段,我们的整个引导的流程就可以按照我们的过程引导了,下面我们开始详细介绍这三个阶段。

Stage1:这个阶段是真正存储在我们的MBR中的前446字节的部分,因为这一部分非常的小,所以我们给他设置的功能便是去寻找真正的引导驱动部分和菜单部分,也就是第二阶段。使用命令查看:

[[email protected]~]# hexdump -C -n 512 /dev/sda

Centos开机启动流程二

这时候便有了一个疑问了,那我们的1_5阶段是干啥的?下面介绍下1_5

Stage1_5:其实这一阶段存储的便是我们的硬盘驱动部分,它存储在我们的512字节之后的部分,大约13000字节大小。前边说的1阶段去寻找我们的2阶段,但是我们的二阶段,一般是存储在磁盘上的,这样可以让我们有足够的空间去实现我们想要的功能,但存储在硬盘上最大的问题便是如和识别这个设备,在内核没加载之前,我们的文件系统是没法识别的,这样陷入了一个死循环阶段,没内核无法加载系统,没系统又没法加载内核,这是我们便需要一个第三方的介入去打破这个循环,我们安装系统的时候,会把这一部分安装在紧随在第一阶段之后的扇区部分,也就是512字节之后,是为了识别真的文件系统,加载第二部分。

使用如下命令查看:

[[email protected]~]# hexdump -C -n 10240 /dev/sda -v 

Centos开机启动流程二

Centos开机启动流程二

Stage2:第二阶段会加载/boot/grub下的grub.conf配置文件,按照配置文件加载我们的内核和映像文件,下面我们分析一下配置文件。

Centos开机启动流程二

这里比较难理解的便是root列,这一列是告诉GRUB内核文件的分区,一般计算机是从0开始编号的,第一个磁盘的第一个分区就是(hd0,0),接下来便是我们的真正的内核文件了。这时又存在问题了,我们的内核加载进去后,需要挂载真正的根文件系统,但是我们的驱动又在文件系统中存储,又是循环,我们有需要一个第三方的介入,去打破这个僵局,initrd选项便是装系统时生成的,用于和内核一起加载进内存,用于驱动真正的根文件系统。其实我们把这个文件解压开来看,就是一个和根文件系统一样的结构,这里边存储了我们的驱动,驱动完成后,我们释放伪根只读方式挂载真正的根,读取第一个配置文件,进行第一个启动程序的启动,基础配置。

Init程序

接下来是我们的开机第一启动进程init程序,我们简单介绍下init程序。这个程序是内核加载完成第一个启动的程序,用于接管内核的工作,主要管理进程的创建和销毁,是操作系统的大管家。我们以Centos5的配置文件来详细介绍接下来的启动流程,我们看一下/etc/inittab文件:

inittab文件格式

  • id:runlevels:action:process
  •       id: 标识符,一般为两位数字或字母
  •       runlevels: 运行级别,可以指定多个,若为空,则表示从0~6各个运行级别都执行
  •       action: 指定运行状态
  •       process: 制定运行的脚本或命令,最重要

/etc/inittab正文

语句1:

  • id:5:initdefault:
  • initdefault: 系统指定缺省启动的运行级别,系统默认启动的指令
  • 5: 可以将其改为3默认启动字符界面,而不用启动图形界面

语句2:

si::sysinit:/etc/rc.d/rc.sysinit

Centos开机启动流程二

 /etc/rc.d/rc.sysinit作用:完成系统服务程序的启动,如:系统环境变量设置,系统时钟设置,加载字体,检查加载文件系统,生成系统启动信息日志等.

 sysinit:系统启动执行process中的指令,无论哪个运行级别,只要系统启动,这个服务就会启动

如果你有一个服务,无论任何运行级别,都希望它在一开机就能自动运行,则可以将之写入/etc/rc.d/rc.sysinit文件中.

语句3:

l3:3:wait:/etc/rc.d/rc 3

      /etc/rc.d/rc 

Centos开机启动流程二

作用:根据前文,判断默认运行级别调用/etc/rc.d/rc脚本,执行下面相应运行级别的目录中的服务程序,完成相应运行级别的初始化设置。

Linux服务保存目录:/etc/rc.d/rc[0123456].d 

Centos开机启动流程二

分别存放对应于运行级别的服务程序脚本的符号软链接,链接到init.d目录中的相应脚本

S-start: 系统启动时依次加载这些服务

K-kill : 系统关机时依次关闭这些服务【如果将文件名更改,则不会启动】

数字: 表示启动顺序,数字越小,优先启动

附-如果不想启动此服务只需将其改名即可,如:

mv S03-vmware-tools s03-vmware-tools#不会自动启动

  1. ###表示当前缺省运行级别为5(initdefault);  
  2.   id:5:initdefault:  
  3.   
  4. ###启动时自动执行/etc/rc.d/rc.sysinit脚本(sysinit)  
  5. # System initialization.  
  6.   si::sysinit:/etc/rc.d/rc.sysinit  
  7.   
  8. l0:0:wait:/etc/rc.d/rc 0  
  9. l1:1:wait:/etc/rc.d/rc 1  
  10. l2:2:wait:/etc/rc.d/rc 2  
  11. l3:3:wait:/etc/rc.d/rc 3  
  12. l4:4:wait:/etc/rc.d/rc 4  
  13. ###当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,其他的会忽略,init将等待其返回(wait)  
  14. l5:5:wait:/etc/rc.d/rc 5  
  15.   l6:6:wait:/etc/rc.d/rc 6  
  16.   
  17. ###在启动过程中允许按CTRL-ALT-DELETE重启系统  
  18. # Trap CTRL-ALT-DELETE  
  19. ca::ctrlaltdel:/sbin/shutdown -t3 -r now  
  20.   
  21.   # When our UPS tells us power has failed, assume we have a few minutes  
  22. # of power left. Schedule a shutdown for 2 minutes from now.  
  23. # This does, of course, assume you have powerd installed and your  
  24. # UPS connected and working correctly.  
  25. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"  
  26.   
  27.   # If power was restored before the shutdown kicked in, cancel it.  
  28. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"  
  29.   
  30.   ###在2、3、4、5级别上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,如果进程退出则再次运行mingetty程序(respawn)  
  31. # Run gettys in standard runlevels  
  32. 1:2345:respawn:/sbin/mingetty tty1  
  33. 2:2345:respawn:/sbin/mingetty tty2  
  34. 3:2345:respawn:/sbin/mingetty tty3  
  35. 4:2345:respawn:/sbin/mingetty tty4  
  36. 5:2345:respawn:/sbin/mingetty tty5  
  37.   6:2345:respawn:/sbin/mingetty tty6  
  38.   
  39. ###在5级别上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行(respawn)  
  40. # Run xdm in runlevel 5  
  41. x:5:respawn:/etc/X11/prefdm -nodaemon  

按照配置文件启动完相应的服务后,我们便基本完成了开机的启动过程。