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

相关推荐

  • Linux基础小模块

    1.基础知识小块:shell 由shell程序的自带命令:即为内置命令(builtin) 独立的可执行程序文件、文件名 :即为外部命令  [root@localhost~]#ls      ~用户当前所在目录  #:命令提示符(管理员帐号root)  $:普通用户   &nbsp…

    Linux干货 2016-08-05
  • 第十三周作业

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;  3)添加sa…

    Linux干货 2017-04-04
  • LVS

    LVS概述 1.LVS:Linux Virtual Server全称叫做linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。四层路由器(交换),根据请求报文的目标IP和目标协议及端口将其调度转发至后端主机集群中的某台RealServer(真实服务器),根据调度算法来挑选RS; 主要有…

    Linux干货 2016-11-07
  • nginx初步

    一、知识整理 1、查看进程使用的cpu;ni查看nice值 [root@localhost html]# ps axo pid,comm,psr,ni  43769 nginx          &n…

    Linux干货 2016-10-31
  • Linux find命令使用详则

    find命令 find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录欲文件。并且将查找到的子目录和文件全部进行显示。 语法 find(选项)(参数) 选项 -amin<分钟>:查找在指定时间曾被存取过的文件或者目录,单位以分钟计算; -ane…

    2017-08-03
  • HAProxy七种调度方法的简单示意图

    看了三个月,中间因出差和其他事没有看估计也有十几天,刚把35天的视频看完。很多内容都记不住,待第一次看完后再回头看吧。 现在想,对内容进行简单的画图,把基本的体现出来,对记忆和回顾应该有帮助。

    Linux干货 2016-07-26