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

相关推荐

  • Redis基于Sentinel哨兵高可用方案

    下载最新redis版本,当前最新版本为  2.8.19  2014-12-30 安装redis 首页地址:http://redis.io/ 最新稳定版下载地址: http://download.redis.io/releases/redis-2.8.19.tar.gz # tar -xvf redis-2.8.19.tar.gz # cd…

    2015-03-03
  • linux之/home目录转移分区。

    linux之/home目录转移分区。     I,基本思路,将/home目录的数据转移到新的分区,再将/home目录挂载到新的分区。     II,添加硬盘,进行分区,添加新硬盘不重启机器识别命令echo “- – -”  /sys/class/scsi_host/host#/scan,然后进行 …

    Linux干货 2017-06-19
  • 硬盘分区MBR和GPT选哪个好?有什么区别?

    当前主流的硬盘分区方式有两种:MBR和GPT。 一、MBR与GPT简介与结构 什么是MBR?         MBR,全称为Master Boot Record,即硬盘的主引导记录。是对IBM兼容机的硬盘或者可移动磁盘分区时,在驱动器最前端的一段引导扇区。 MBR的组成部分       &…

    Linux干货 2016-08-29
  • Linux基础之安全加密及CA、证书实战应用

    一、建立私有CA并让客户端申请请求,需要两台虚拟机完成 1、建立私有CA,生成私钥 2、CA公司给自己,生成自签证书 3、为CA提供所需要的目录及文件(如果事先存在,此步骤可以跳过) 二、CA公司已建立,需要一台客户机配合CA签署证书 1、客户端用到证书,因此生成私钥 2、客户端生成证书签署请求 3、将请求通过可靠方式发送给CA主机,这里作为测试,因此使用s…

    Linux干货 2016-10-04
  • LAMP+logzilla+sphinx+syslog-ng实现集中日志管理(第一版)[原创]

    一、前言        目前查看系统日志比较被动,遇到系统不正常或故障时才会主动去检查服务器系统日志,这样一来不能及时了解系统的运行情况,因此部署Logzilla+sphine+syslog-ng来弥补这不足。以下为安装、部署平台详细步骤。(Logzilla是什么新东西?其实前身就是php-syslog-ng,引用作者…

    Linux干货 2015-03-27
  • 高级文件系统管理

    高级文件系统管理 一、如何创建新的swap分区  答:1.在/dev/sdc上创建新的分区。并使得ID为82的linux swap;类型。   2.创建文件系统 mkswap  -L  SWAP_SDC1  /dev/sdc1     3.在/etc/fstab中进行修改   4…

    Linux干货 2016-08-30