Linux引导过程的6个阶段

Tags: linux

当您按下电脑上的电源按钮时,几分钟后你就看到了Linux登录提示符。你有没有想过从按下电源按钮直到Linux的登录提示出现时的这段时间里发生了什么?下面从6个阶段简要讲述下一个典型的Linux引导过程。

1.BIOS 

  • BIOS代表基本输入/输出系统 

  • 执行一些系统完整性检查 

  • 搜索,加载并执行引导装载程序。 

  • 它尝试从软盘、CD-ROM或硬盘驱动器装载引导程序。您可以在BIOS启动过程中按一个键(通常F12 F2的,但它取决于你的系统)来更改引导顺序。 

  • 一旦引导程序被检测到并加载到内存中,BIOS将控制权交给引导程序。 

  • 所以,简单的说BIOS是用来加载并执行MBR引导加载程序。

2. MBR

  • MBR表示主引导记录。 

  • 它在引导磁盘的第一个扇区。引导程序通常保存在/dev/hda或/dev/sda上

  • MBR的大小小于512字节。它由三个组成部分 1)开始的446字节包含主引导信息 2)后面的64字节包含分区表信息 3)最后2个字节是MBR的校验字节

  • 它包含GRUB(较老的系统使用LILO)的信息。 

  • 所以,简单的说MBR加载并执行GRUB引导程序。

3 GRUB 

  • GRUB代表一个多重操作系统启动管理器。 

  • 如果您在系统上已经安装了多个内核映像,您可以选择其中之一来执行。 

  • GRUB会显示一个启动画面,等待几秒钟,如果你不输入任何东西,它会加载grub配置文件中指定的默认内核映像。 

  • GRUB有自身的文件系统(较老的LILO没有)。 

  • GRUB的配置文件是/boot/grub/grub.conf文件(/etc/grub.conf是这个文件的文件链接)。以下是实例grub.conf文件(CentOS)。

#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5PAE)
          root (hd0,0)
          kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
          initrd /boot/initrd-2.6.18-194.el5PAE.img
  • 正如你从上面的信息看到,它包含内核和initrd镜像。 

  • 所以,简单来说GRUB只是载入并执行内核和initrd映像。

4.内核

  • grub.conf中通过"root="指定挂载的根文件系统

  • 内核执行/sbin目录/init程序 

  • 由于init是由Linux内核执行的第一个程序,它进程ID(PID)为1,可以用"ps -ef| grep init"来查看init的PID。 

  • initrd用来初始话RAM磁盘。 

  • 内核使用initrd作为为临时根文件系统,直到内核启动完成并且真正的根文件系统被挂载。initrd包含启动所需的驱动程序,这有助于initrd访问硬盘驱动器分区和其他硬件。

5.初始化 

  • 根据/etc/inittab文件的配置决定Linux的运行级别。 

  • 以下是可用的运行级别 

    • 0 - 停止 

    • 1 - 单用户模式 

    • 2 - 多用户,没有NFS 

    • 3 - 完全多用户模式 

    • 4 - 未使用 

    • 5 - X11 

    • 6 - 重新启动 

  • init读取/etc/inittab文件的默认initlevel,并使用initlevel来加载所有需要的程序。 

  • 您的系统上执行 'grep initdefault /etc/inittab' 查看默认运行级别 

  • 如果你想尝试一下,你可以将默认运行级别设置为0或6,当然你应该知道0和6代表什么,基本上你不会这样做。 

  • 通常情况下,你会设置默认运行级别为3或5。

6,runlevel相关程序

  • 当Linux系统启动时,您可能会看到各种服务已经被启动。例如:sendmail ... 这些都是runlevel需要启动的程序,他们根据您的runlevel的定义从runlevel目录执行。 

  • 根据您的缺省的init级别设置,系统会从以下目录中执行的程序。 

    • 运行级别0 - /etc/rc.d/rc0.d/ 

    • 运行级别1 - /etc/rc.d/rc1.d/ 

    • 运行级别2 - /etc/rc.d/rc2.d/ 

    • 运行级别3 - /etc/rc.d/rc3.d/ 

    • 运行级别4 - /etc/rc.d/rc4.d/ 

    • 运行级别5 - /etc/rc.d/rc5.d/ 

    • 运行级别6 - /etc/rc.d/rc6.d/ 

  • 请注意,在/etc中有这些目录的符号链接。如:/etc/rc0.d是链接到/etc/rc.d/rc0.d。 

  • 在/etc/rc.d/rc*.d/目录中,你会看到程序名字用S和K标识 

  • 程序名开始部分为S的代表在启动过程中被使用,S代表startup。 

  • 程序名开始部分用K的代表关机过程中使用。 K代表kill。 

  • S和K旁边的数字表示启动或关闭的顺序。

  • 例如,S12syslog是启动系统日志守护程序,启动顺序为12,S80sendmail是启动sendmail守护程序,启动顺序为80。因此,syslog将在sendmail之前启动。


就这些了,这就是Linux引导过程的6个阶段

本文链接:http://www.4byte.cn/learning/120031/linux-yin-dao-guo-cheng-de-6-ge-jie-duan.html