CentOS 6 启动流程

CentOS6启动流程

1.加载BIOS的硬件信息,获取第一个启动设备   
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息   
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备   
4.核心执行init程序,并获取默认的运行信息   
5.init程序执行/etc/rc.d/rc.sysinit文件   
6.启动核心的外挂模块   
7.init执行运行的各个批处理文件(scripts)   
8.init执行/etc/rc.d/rc.local   
9.等待用户登录
下面将详细介绍启动流程的过程
1、BIOS会进行开机加电自检,检查一些硬件的设备的完整性
2、在加电自检完成后,就会通过放在MBR中前446个字节的引导装载程序(grub)来加载内核,其中grub能够提供菜单,用户可以选择不同的启动选项,以及加载内核文件grub就放在/boot下,在grub目录下存在一个/boot/grub/grub.conf的grub的配置文件里面包含了kernel和虚拟文件系统(initramfs)的路径以及根目录的位置,稍后在做详细解释   
3、当我们通过grub加载内核后,Linux会将内核解压缩到我们的内存中,此时内核会重新的检测硬件那么内核在什么地方呢?其实在我们之前的学习中讲过,启动程序放在/boot下,并且通常单独作为一个分区,内核就放在这里,并且取名为/boot/vmlinuz,

看一下/boot下的文件:

[root@Centos6 /boot]#ll
-rw-r--r--. 1 root root   108164 Mar 22 03:34           config-2.6.32-696.el6.x86_64
drwxr-xr-x. 3 root root     4096 Jul 14 11:19         efi
drwxr-xr-x. 2 root root     4096 Aug 31 10:48          grub
-rw-------. 1 root root 26669528 Jul 14 11:25          initramfs-2.6.32-696.el6.x86_64.img 虚拟文件系统
drwx------. 2 root root    16384 Jul 14 10:33           lost+found
-rw-r--r--. 1 root root   215634 Mar 22 03:35         symvers-2.6.32-696.el6.x86_64.gz
-rw-r--r--. 1 root root  2622364 Mar 22 03:34         System.map-2.6.32-696.el6.x86_64
-rwxr-xr-x. 1 root root  4274992 Mar 22 03:34         vmlinuz-2.6.32-696.el6.x86_64        内核文件

我们可以看到vmlinuz就是内核文件了,非常重要。其中还有一个叫initramfs的文件,它是虚拟文件系统用来在提供一个可执行的程序,通过它来加载启动过程中所需要的内核模块其实就是驱动程序。

4、在内核加载完成后就到系统启动的第一个进程,centos6里面为init进程

下面来了解一下init进程的配置文件/etc/inittab,先来看看

[root@Centos6 /boot/grub]#cat /etc/inittab 
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)      直接关机
#   1 - Single user mode                         单用户模式
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多用户,但无NFS
#   3 - Full multiuser mode                        正常模式
#   4 - unused                                    预留级别
#   5 - X11                                        图形界面
#   6 - reboot (Do NOT set initdefault to this) 重启模式
# 
id:5:initdefault:

其中我们可以看到有0-6 共7个运行等级,我们可以看到本系统为id:5:initdefault:运行在5模式,其他的选项都已在特定的文件下直接定义 我们看一下

[root@Centos6 /boot/grub]#cat /etc/init/rc.conf
# rc - System V runlevel compatibility
#
# This task runs the old sysv-rc runlevel scripts.  It
# is usually started by the telinit compatibility wrapper.
#
# Do not edit this file directly. If you want to change the behaviour,
# please create a file rc.override and put your changes there.
start on runlevel [0123456]
stop on runlevel [!$RUNLEVEL]
task
export RUNLEVEL
console output
exec /etc/rc.d/rc $RUNLEVEL

不同的运行等级脚本存放路径为/etc/rc.d/rc#.d,稍后再做详解

5、在开启第一个进程后init开始处理系统的初始化脚本,/etc/rc.d/rc.sysinit这里包含了网络环境与主机类型、SELinux是否启动等等,一般不作更改,这里不做赘述。   
6、启动核心的模块(驱动程序)   
7、init执行运行的各个批处理文件(scripts),例如我们在/etc/inittab里面知道本系统启动过程中运行在5模式,那么init会找到运行等级为5的脚本在/etc/rc5.d
  • [x] 在脚本中包含了两类文件名分别是:以K 和S 开始的文件名,而已K或S开头的文件实际为系统的服务程序,排序在前越先执行。 当系统在运行脚本时会找到/etc/rc5.d/K的文件,并将其停止 当系统在运行脚本时会找到/etc/rc5.d/S的文件,并将其开启

    我们来看一下/etc/rc5.d目录下的内容

[root@Centos6 /etc/rc.d/rc5.d]#ll
total 0
省略部分显示
lrwxrwxrwx. 1 root root 14 Jul 14 11:17 K99rngd -> ../init.d/rngd
lrwxrwxrwx. 1 root root 18 Jul 14 11:17 S13cpuspeed -> ../init.d/cpuspeed
lrwxrwxrwx. 1 root root 20 Jul 14 11:08 S13irqbalance -> ../init.d/irqbalance
lrwxrwxrwx. 1 root root 20 Jul 14 11:03 S99certmonger -> ../init.d/certmonger
lrwxrwxrwx. 1 root root 11 Jul 14 10:52 S99local -> ../rc.local
8、用户自定义开机启动程序/etc/rc.d/rc.local
从上个步骤中,我们知道/etc/rc.d/rc.local 是最后被执行的,我们可以添加一些选项在其中,可以在系统启动的时候就可以启动,很是方便。

Bootloader : grub

bootloader 的两个阶段stage bootloader具有菜单功能、直接加载内核文件以及控制权移交的功能,系统必须要有loader才能够加 载操作系统内核,但是MBR是第一扇区的一个block 大小为446字节,不能够将loader全部放进去,所以Linux将其bootloader的程序代码执行与设置值分成两个阶段来执行:
stage1 :执行bootloader的主程序,目的最终加载stage2阶段
stage1.5 :最为中间媒介,传递作用,stage2太大需要stage1.5作为中间步骤
stage2 :bootloader的核心映像

9、接下来就是用户登录开启shell
接下来着重介绍一下/boot下的grub以及其配置文件grub.conf

/boot/grub下的列表文件

[root@Centos6 ~]#ll /boot/grub
total 280
-rw-r--r--. 1 root root     63 Jul 14 11:27 device.map                 grub的设备对应文件
-rw-r--r--. 1 root root  13428 Jul 14 11:27 e2fs_stage1_5              ext2/ext3文件系统的文件
-rw-r--r--. 1 root root  12636 Jul 14 11:27 fat_stage1_5               FAT文件系统的定义文件
-rw-r--r--. 1 root root  11780 Jul 14 11:27 ffs_stage1_5               FFS文件系统文件
-rw-------. 1 root root    872 Aug 31 10:48 grub.conf                  grub在Red Hat中的配置文件
-rw-r--r--. 1 root root  11772 Jul 14 11:27 iso9660_stage1_5           光驱文件系统文件
-rw-r--r--. 1 root root  13284 Jul 14 11:27 jfs_stage1_5               ifs文件系统定义文件
lrwxrwxrwx. 1 root root     11 Jul 14 11:27 menu.lst -> ./grub.conf    grub配置文件
-rw-r--r--. 1 root root  11972 Jul 14 11:27 minix_stage1_5             minix文件系统文件
-rw-r--r--. 1 root root  14428 Jul 14 11:27 reiserfs_stage1_5          reiserfs文件系统文件
-rw-r--r--. 1 root root   1341 Nov 15  2010 splash.xpm.gz              启动时在grub下面的后台图标
-rw-r--r--. 1 root root    512 Jul 14 11:27 stage1                     1阶段说明文件
-rw-r--r--. 1 root root 126148 Jul 14 11:27 stage2                     2阶段说明文件
-rw-r--r--. 1 root root  12040 Jul 14 11:27 ufs2_stage1_5              UFS文件系统文件
-rw-r--r--. 1 root root  11380 Jul 14 11:27 vstafs_stage1_5            vstafs文件系统文件
-rw-r--r--. 1 root root  13980 Jul 14 11:27 xfs_stage1_5               xfs文件系统文件

grub引导装载程序可以支持许多文件系统,来查看一下grub的配置文件

[root@Centos6 ~]#cat /boot/grub/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
#default kernel list! 
default=0
#delay time and make the default kernel after timeout!
timeout=5
#setting  boot picture
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=ef20e35d-b3b0-4bb0-a7f0-b6da5f9478ea rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-696.el6.x86_64.img

介绍grub.conf文件中每个选项的作用

1、default=0
默认内核列表,与下面的title相关联,有几个title在启动的时候就会出现几个菜单可以选择
2、timeout=5
启动后进行读秒,在5秒内没有任何按键,则会启动默认的title选项,timeout=0表示不读秒直接进行启动,timeout=-1,表示直接进入菜单。
3、splashimage=(hd0,0)/grub/splash.xpm.gz
启动时grub后台的图片,可以自己定制,但文件后缀格式一定要与给定的相同
此外,(hd0,0)表示内核的位置,hd0表示第一块硬盘,0表示第一个分区,相当于/dev/sda1就是/boot所在的分区
4、hiddenmenu
隐藏菜单
5、title CentOS 6 (2.6.32-696.el6.x86_64)

菜单名称
    root (hd0,0)                说明内核所在的那个分区
    kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID<此处省略部分> rhgb quiet 指定内核,以及操作系统的根目录在什么地方,这里root=UUID也可直接写上/root所在的分区,例如;root=/dev/sda2,后面的参数是启动时候的一些选项,这里不做赘述。
    initrd /initramfs-2.6.32-696.el6.x86_64.img 指定虚拟的文件系统

其中这几项一定要有,缺少的话会导致系统找不到文件不能正常启动。

本文只是根据实际情况进行了介绍,可能不全面,在此指出。

附上启动流程流程框图:

CentOS 6 启动流程

原创文章,作者:M25_ymd,如若转载,请注明出处:http://www.178linux.com/85786

(0)
M25_ymdM25_ymd
上一篇 2017-09-01
下一篇 2017-09-01

相关推荐

  • 马哥教育网络班22期第一周课程练习

    1.描述计算机的组成及其功能     计算机的组成部分分为硬件部分与软件部分         硬件部分: I/O设备 + 运算器 + 存储器 + 控制器       &n…

    Linux干货 2016-08-15
  • java基础篇—内存分析

    Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现 同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。 1、多线程通信 1.1 内存模型 Java线程之间的通信由Java内存…

    Linux干货 2015-03-16
  • linux密码的破解与保护

    找回root口令:   遇到密码丢失的情况,如果只是普通用户的密码丢失,那么可以让管理员重新设定密码。但是如果管理员用户的密码丢失,那该如何解决?   在 Linux环境中root 密码忘记还是可以救回来的!只要能够进入并且挂载 / , 然后重新设定一下root的密码,就救回来啦!这是因为开机流程中,若强制进入runlevel 1 时, …

    Linux干货 2016-09-22
  • N25 – Week 5 blog

    1. 显示当前系统上root, fedora或user1用户的默认shell [root@dhcp-10-129-6-166 ~]# grep -E "root|fedora|user1" /etc/passwd | grep -o "[^…

    Linux干货 2016-12-27
  • 第10周作业(上)

    第10周作业 1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)。CentOS系统启动详细的过程如下(以CentOS7为例): 加电自检(POST)按下电源开关,BIOS系统随即开始加电自检,检查CPU、内存、主板及各接口、硬盘、键盘、光驱等,检测它们的好坏。 读取启动顺序检查完成后,BIOS会根据预先设定好的启动顺序去挨个寻找可引导…

    Linux干货 2017-01-03
  • 权限

    用户组和管理权限

    2017-11-30