这个过程是开机后,BIOS或UEFI进行硬件检查的阶段linux
自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接去找硬盘的第一个扇区,找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统grub引导。此阶段属于grub的第一阶段。grub还有1.5阶段和2阶段。c#
grub第1.5和2阶段,信息默认存放在扇区中,若是使用grub-install生成的2阶段的文件是存放在/boot分区中的。
为了加载内核系统,不得不加载/boot分区,而加载/boot分区,须要有/boot分区的驱动,/boot分区驱动是放在/boot分区中的,啊,咱们好像进入了死循环了,Linux是怎么解决的呢?就是靠放在1.5阶段中的数据,是放在第一个扇区后的后续扇区中,具体占用多少字节,不太清楚,只知道1.5阶段和2阶段总共27个扇区。centos
mbr以后的扇区,识别stage2所在的分区上的文件系统bash
开机启动的时候看到的Grub选项、信息,还有修改GRUB背景等功能都是stage2提供的,stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件服务器
读取grub.conf文件以肯定内核启动的参数,准备启动内核post
加载内核,核心开始解压缩,启动一些最核心的程序。
由于为了让内核足够轻小,硬件驱动并无放在内核文件里面,咱们能够看到内核很小,才4M左右,咱们能够想象Windows中的驱动,安装系统时候还须要使用驱动软件下载好长时间呢
所以须要使用/initramfs-2.6.32-696.el6.x86_64.img来驱动硬件centos7
内核已将启动起来了,再调用ramdisk文件,尝试驱动全部的硬件设备,到这一步,内核起来了,全部驱动也装上了,所以后面的启动就能够交给程序了操作系统
grub中默认指定init=/sbin/init程序,能够在grub.conf中kernel行自定义执行程序init=/bin/bash,此时能够绕过下面步骤直接进入bash界面。
内核源代码文件中显示996行左右,规定了init启动的顺序,/sbin/init->/etc/init->/bin/init->/bin/sh,/bin/bash没有写,应该是和/bin/sh同样code
inittab文件里面定义了系统默认运行级别,这一步作了一些工做以下:对象
a)初始运行级别(RUN LEVEL) b)系统初始化脚本 c)对应运行级别的脚本目录 d)定义UPS电源终端/恢复脚本 e)在虚拟控制台生成getty,以生成终端 f)在运行级别5初始化X
系统初始化一些脚本,主要完成如下工做
a)设置主机名 b)设置欢迎信息 c)激活udev和selinux能够在grub.conf中,kernel行添加selinux=0以关闭selinux d)挂载/etc/fstab文件中定义的文件系统 e)检测根文件系统,并以读写方式从新挂载根文件系统 f)设置系统时钟 g)激活swap设备 h)根据/etc/sysctl.conf文件设置内核参数 i)激活lvm及software raid设备 j)加载额外设备的驱动程序 k)清理操做
里面定义的是各类服务的启动脚本,能够ls查看,S开头表明开机启动的服务,K开头的是关机要执行的任务。#表明数字,一个数字表明一个运行级别,共7个运行级别
这里面能够自定义开机启动的命令。
执行/bin/login程序,等待用户登陆
包括挂载/etc/fstab文件中的系统,此时挂载后,就能够切换到根目录了
centos7表面是有“运行级别”这个概念,其实是为了兼容之前的系统,每一个所谓的“运行级别”都有对应的软链接指向,默认的启动级别时/etc/systemd/system/default.target,根据它的指向能够找到系统要进入哪一个模式
模式:
在CentOS6上是被叫作rc.sysint程序,初始化系统及basic.target准备操做系统
getty.target咱们也眼熟,它是启动终端的systemd对象。若是到此步骤,系统没有被指定启动图形桌面,到此就能够结束了,若是要启动图形界面,须要在此基础上启动桌面程序