一 centos6启动流程
centos6启动流程_第1张图片
1.加载BIOS的硬件信息,获取第一个启动设备

  1. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
  2. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备
  3. 核心执行init程序,并获取默认的运行信息
  4. init程序执行/etc/rc.d/rc.sysinit文件
  5. 启动核心的外挂模块
  6. init执行运行的各个批处理文件(scripts)
  7. init执行/etc/rc.d/rc.local
  8. 执行/bin/login程序,等待用户登录
    10.登录之后开始以Shell控制主机
    1 POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部 分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接 口、键盘、CD-ROM光驱等硬件情况的检测。ROM:BIOS,Basic Input and Output System,保存着有关计 算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和 系统启动自举程序等。
    RAM:CMOS互补金属氧化物半导体,保存各项参数的设定 按次序查找引导设备,第一个有引导程序的设备为本次启动设备  bootloader: 引导加载器,引导程序
    windows: ntloader,仅是启动OS
    Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内 核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把 系统控制权移交给内核 LILO:LInux LOader GRUB: GRand Unified Bootloader GRUB 0.X: GRUB Legacy, GRUB2
    2、 MBR(Master Boot Record)主引导分区:
    BIOS初始化硬件后会通过硬件的INT13中断功能实现读取MBR,读取MBR中的Boot Loader,Boot Loader是一个软件,它具有提供菜单功能,直接加载内核信息及相关控制权转换,MBR只有512bytes,其中前446bytes存储的是Boot Loader,46bytes存储分区表信息,2bytes为分区标志位。446bytes不足以安装Boot Loader,事实上MBR前446bytes只是安装了Boot Loader的最小主程序,即stage1,因为Boot Loader 分为stage1、stage1.5、stage2三个阶段来执行的,stage1.5存放在MBR随后的扇区中,主要用于和stage2所在分区的文件系统交互,stage2加载硬盘分区/boot目录下所有文件、配置文件与环境参数信息。
    3.GRUB引导
    grub第1.5和2阶段,信息默认存放在扇区中,如果使用grub-install生成的2阶段的文件是存放在/boot分区中的。
    为了加载内核系统,不得不加载/boot分区,而加载/boot分区,需要有/boot分区的驱动,/boot分区驱动是放在/boot分区中的,啊,我们好像进入了死循环了,Linux是怎么解决的呢?就是靠放在1.5阶段中的数据,是放在第一个扇区后的后续扇区中,具体占用多少字节,不太清楚,只知道1.5阶段和2阶段总共27个扇区。
    stage1.5:
    mbr之后的扇区,识别stage2所在的分区上的文件系统
    stage2:
    开机启动的时候看到的Grub选项、信息,还有修改GRUB背景等功能都是stage2提供的,stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件
    4.读取grub.conf文件
    读取grub.conf文件以确定内核启动的参数,准备启动内核
  9. Kernel、initrd/initramfs:
    /boot目录下包含vmlinuz,initramfs等内核相关的文件,Boot Loader读取/boot目录下所有文件、配置文件与环境参数信息后,会把内核解压加载到内存中,根据内核提供的功能开始检测,加载各个设备,此次检测与BIOS自检不同,执行到此,后续工作都由内核来完成(因为Boot Loader已把vmlinuz,initramfs加载到内存中),此时内核还没有加载磁盘,因为还没有磁盘驱动程序,内核通过/boot目录下的虚拟文件系统,也就是initramfs,模拟一个rootfs(根文件系统),加载启动过程中所需要的核心模块,加载后释放rootfs(根文件系统),且以只读方式挂载真实的根文件系统,开始正常的启动过程。
    加载内核,核心开始解压缩,启动一些最核心的程序。
    因为为了让内核足够轻小,硬件驱动并没有放在内核文件里面,我们可以看到内核很小,才4M左右,我们可以想象Windows中的驱动,安装系统时候还需要使用驱动软件下载好长时间呢
    因此需要使用/initramfs-2.6.32-696.el6.x86_64.img来驱动硬件
    [root@CentOS6 ~]# ll -h /boot/vmlinuz-2.6.32-696.el6.x86_64
    -r-xr-xr-x. 1 root root 4.1M Jul 8 21:06 /boot/vmlinuz-2.6.32-696.el6.x86_64
    6.加载伪文件系统(ramdisk),
    内核已将启动起来了,再调用ramdisk文件,尝试驱动所有的硬件设备,到这一步,内核起来了,所有驱动也装上了,因此后面的启动就可以交给程序了
    7.Init:
    用户空间第一个执行程序,在内核,硬件及驱动加载完成后,内核会执行用户空间的第一个执行程序/sbin/init,init 程序主要功能为准备软件运行环境,包括系统主机名称,网络配置,文件系统格式等其他服务配置。
    Init的配置文件:
    CentOS 6:采用Upstart的方式,其特点是守护进程间的通信依赖于D-Bus进行,因此,可基本实现类似并行启动,配置文件:/etc/inittab、/etc/init/*.conf