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

相关推荐

  • 有证说话硬–实现CA和证书申请

    centos下利用openssl来实现证书的颁发 直接进入正题,细节坑就不说了,自己解决起来更有挑战性不是 步骤流程: 我是拿的7.3版本做CA主机,6.8版本做客户端 1.创建CA 2.生成私钥 3.生成自签名证书 4.到客服端 5.生成私钥 6.生成证书申请文件 7.将请求发送给-CA主机 8.CA主机-验证签署 9.拷回给客户端使用 用法:openss…

    2017-04-11
  • 自制linux系统

    自制linux系统  需要为虚拟机新增一个硬盘,作为自制linux系统的载体。也可以用U盘、移动硬盘或其他设备作为载体实验步骤: (1)为虚拟机新增一个大小为20G的硬盘(2)给新增的磁盘分区,划分/boot、swap、/三个分区比如,将第一个分区当作boot,大小为500M;第二个分区当作swap分区,大小为2G;第三个分区用作/,大小为10G。…

    Linux干货 2016-09-13
  • 网络模型知识点概括

       网络模型分层 应用层 网络进程访问表示层 数据表示会话层 主机间通信传输层 端到端连接网络层 数据传输   数据链路层 访问介质物理层 物理线缆二进制封包与解封从下至上封包加包头通过上层协议传给对方机器,对方机器接受后需要从上至下拆解包头,这个过程叫解封三种通讯模式单播广播组播局域网:由服务器-》交换机-》pc …

    Linux干货 2017-05-02
  • 初学Linux文件目录结构

    /:根目录 /bin(binary):放置的是二进制文件。可执行的命令;非管理类的命令,通常是系统启动就需要的文件,供所有用户使用的基本命令;不能关联至独立分区, OS启动即会用到的程序。 /sbin:管理类的命令,通常只有管理员可以使用。 /lib:存放的是系统级别的库文件 /lib64:专用于x86_64系统上的辅助共享库文件存放位置  /ro…

    Linux干货 2017-07-13
  • LVS常见的类型实现方式

    前言  由于lvs的基础知识已经在第一篇lvs中讲解了,所以在这里只做实验,包括lvs-nat,lvs-dr,以及基于Freiwall标记和实现会话绑定实验。 一、lvs-nat:也是MASQERADING,简称为m(masquerading)    实验图:     地址规划:     …

    Linux干货 2015-06-29