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.www58058.com/85786

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

相關推薦

  • Linux簡單的磁盤分區、格式化和掛載

     一.分區: 1.查看分區fdisk -l 通過fdisk -l 查看機器所掛硬盤個數及分區情況   2.通過上面的信息,我們知道此機器中掛載兩個硬盤分別是:/dev/sda和/dev/sdb, 其中sda有兩個主分區/dev/sda1和sda2; 其中sdb有1個擴展類型/dev/sdb3和3個邏輯分區sd…

    Linux干貨 2016-02-28
  • shell編程2

    組合測試條件  第一種方式:        COMMAND1 && COMMAND2 并且        COMMAND1 || COMMAND2 或者        ! COMMAND 非   &nbs…

    Linux干貨 2016-08-21
  • WORD文檔格式要求與linux學習規劃

    WORD文檔格式要求 一、封面               1、活動名稱(隸書,小初號字,加粗)               2、主辦單位、策劃日期(宋體、3號字) 二、目錄    &nbs…

    Linux干貨 2013-06-20
  • 第二周練習作業

    第二周作業 1、2、4、5 題博客中已經總結 3、請使用命令行展開功能來完成以下練習: (1)、創建/tmp目錄下的:ac, ad, bc, bd (2)、創建/tmp/mylinux目錄下的: mylinux/     ├── bin     ├── boo…

    Linux干貨 2016-11-06
  • Linux 性能監控、測試、優化工具

    Linux 平臺上的性能工具有很多,眼花繚亂,長期的摸索和經驗發現最好用的還是那些久經考驗的、簡單的小工具。系統性能專家 BrendanD. Gregg 在最近的 LinuxCon NA 2014 大會上更新了他那個有名的關于 Linux 性能方面的 talk (Linux Performance Tools) 和幻燈片。    和 Br…

    Linux干貨 2015-03-03
  • 文本編輯工具vim

                             vim +#: 打開文件直接處在#行 +/PATTERN:打開文件直接處在第一次匹配到行 vim + file :打開文件直接處在最后行 vim –b file :以二進制打開文件…

    Linux干貨 2016-08-12
欧美性久久久久