CentOS6啟動流程(含詳細流程圖)


參考:Linux啟動流程和grub詳解(作者:好筆記運維)

  為什么把這位的參考放在前面,主要是這位大佬的流程圖太詳細了。雖說不一定要了解這么詳細,但還是很佩服啊。不多說,上圖(在新標簽中打開圖片

  下面開始簡單的了解一下CentOS6的啟動流程吧。

 第一步、硬件啟動階段

  簡單說一下這一步的流程:打開電源;POST自檢;BIOS逐一排查設備啟動順序;如果是硬盤啟動,讀取硬盤的MBRBootLoader。(這里默認MBR分區,暫不考慮GPT分區)

  這里主要有三個需要了解的地方BIOS啟動順序、MBR和BootLoader。BIOS啟動順序大部分人應該都知道,我就不贅述了。

(1).MBR

  MBR(Main Boot Record),是硬盤的0柱面,0磁道、1扇區(第一個扇區),稱為主引導扇區,也稱為主引導記錄。它由三部分組成:主引導程序(BootLoader)、硬盤分區表DPT(Disk Partition table)和硬盤有效標志(55AA)。

  注:硬盤默認一個扇區大小為512字節。

  第一部分,主引導程序(BootLoader)占446個字節,負責從活動分區中裝載,並運行系統引導程序

  第二部分,硬盤分區表DPT占64個字節,有4個分區表項,每個分區表項占16個字節,硬盤中分區有多少以及每一個分區的大小都記錄在其中。

  第三部分,硬盤有效標志,占2個字節,固定為55AA。如果這個標志位0xAA55,就認為這個是MBR。

(2).BootLoader

  不同的系統有不同的主引導程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系統)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。

  CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一個來自GNU項目的多操作系統啟動程序。

第二步、GRUB引導階段

 

  簡單說一下這一步的流程:GRUB程序加載執行並引導kernel(內核)程序,其中有三個階段。

  grub引導階段的文件都在/boot/grub/目錄下

(1).Stage1階段

  這一階段其實執行的就是系統安裝時預先寫入到MBR的Bootloader程序。它的任務僅是讀取(加載)硬盤的0柱面,0磁道,2扇區的內容(/boot/grub/stage1)並執行。

[root@CentOS6 ~]# ll /boot/grub/stage1 
-rw-r--r--. 1 root root 512 Mar 13  2018 /boot/grub/stage1

  這一階段,使硬件初始化,為Stage2准備RAM空間(內存空間),讀取Stage2到RAM空間(應該涉及到了Stage1.5階段)。就是Stage1.5階段或Stage2階段的入口,引導進入Stage1.5階段或Stage2階段。

  另外,這一階段並沒有識別文件系統的能力。  

(2).Stage1.5階段

  這一階段是Stage1階段和Stage2階段的橋梁,具有識別分區文件系統的能力,此后grub程序便有能力去訪問/boot/grub/stage2,並將其讀取到內存執行。

[root@CentOS6 ~]# ll -h /boot/grub/stage2  //大於512字節了
-rw-r--r--. 1 root root 124K Mar 21  2018 /boot/grub/stage2
[root@CentOS6 ~]# ls /boot/grub/*stage1_5  //有各種文件系統格式
/boot/grub/e2fs_stage1_5     /boot/grub/minix_stage1_5
/boot/grub/fat_stage1_5      /boot/grub/reiserfs_stage1_5
/boot/grub/ffs_stage1_5      /boot/grub/ufs2_stage1_5
/boot/grub/iso9660_stage1_5  /boot/grub/vstafs_stage1_5
/boot/grub/jfs_stage1_5      /boot/grub/xfs_stage1_5

(3).Stage2階段

  這一階段會(初始化本階段需要用到的硬件,檢測系統的內存映像,)解析grub的配置文件/boot/grub/grub.cnf,根據配置文件加載內核鏡像到內存中,通過initrd程序建立虛擬根文件系統,最后調用(轉交)內核

[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/mapper/vg_centos6-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0  //設置默認啟動項為第一個內核
timeout=5  //菜單項等待選項時間為5秒
splashimage=(hd0,0)/grub/splash.xpm.gz  //菜單背景圖片
hiddenmenu  //隱藏菜單
//這里有時候會有passwrod參數,意思是進入急救模式(單用戶模式)的密碼是多少,可以是明文密碼,可以是加密密碼
//例如password --md5 $1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/,這代表進入急救模式的password經過MD5加密,加密密碼為$1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/
title CentOS 6 (2.6.32-642.el6.x86_64)  //菜單項名稱
        root (hd0,0)  //grub查找stage2文件及kernel文件所在設備分區,grub的根。第一塊硬盤的第一個分區
        //啟動的內核
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-642.el6.x86_64.img  //內核匹配的ramfs文件,img是鏡像文件

第三步、內核引導階段

  簡單說一下這一步的流程:通過內存中的虛擬根文件系統,加載驅動,然后切換到真正的根文件系統,並執行/sbin/init程序。

第四步、init初始化階段(又叫系統初始化階段)

  簡單說一下這一步的流程:/sbin/init程序會讀取/etc/inittab文件確認運行級別,然后執行/etc/rc.d/rc腳本,根據確認的運行級別啟動對應/etc/rc.d/rc#.d/目錄下的服務(#為0~6),與此同時執行系統初始化腳本/etc/rc.sysinit(軟鏈接,指向/etc/rc.d/rc.sysinit),還會加載/etc/rc.local(軟鏈接,指向/etc/rc.d/rc.local文件)用戶自定義服務(腳本)。

  這里有個有意思的地方,/etc/rc.d/目錄下的文件幾乎在上一次都有相應的軟鏈接(也就是/etc/目錄下),唯一沒有的/etc/rc.d/init.d/目錄又似乎與/etc/init.d/目錄完全相同

[root@CentOS6 ~]# ls -ld /etc/rc*
lrwxrwxrwx.  1 root root    7 Mar 13  2018 /etc/rc -> rc.d/rc
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc1.d -> rc.d/rc1.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc3.d -> rc.d/rc3.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc5.d -> rc.d/rc5.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc6.d -> rc.d/rc6.d
drwxr-xr-x. 10 root root 4096 Feb 18 02:17 /etc/rc.d
lrwxrwxrwx.  1 root root   13 Mar 13  2018 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx.  1 root root   15 Mar 13  2018 /etc/rc.sysinit -> rc.d/rc.sysinit
[root@CentOS6 ~]# ls /etc/rc.d/
init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
rc      rc1.d  rc3.d  rc5.d  rc.local
[root@CentOS6 ~]# diff -ruNa /etc/rc.d/init.d/ /etc/init.d/

(1)./etc/inittab文件

[root@CentOS6 ~]# 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)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:

  這個文件直接看最后一行的那個數字就好了,我這里是5,就代表啟動級別是5。

  另外,還需要了解下系統的啟動級別:

    0  關機

    1  單用戶模式、維護模式、急救模式,都可以

    2  多用戶模式,但沒有網絡

    3  完整的多用戶模式

    4  預留級別,暫時沒用,不用考慮

    5  圖形界面,XWindows

    6  重啟

(2)./etc/rc.d/rc#.d/目錄

  在啟動時執行的/etc/rc.d/rc腳本,會調用/etc/rc.d/rc#.d/目錄下的文件

[root@CentOS6 ~]# ls /etc/rc.d/rc5.d/
K01smartd        K50dnsmasq     K73winbind         K88sssd          S01sysstat       S12rsyslog         S24nfslock           S26udev-post       S82abrt-ccpp
K02oddjobd       K50xinetd      K74ntpd            K89netconsole    S02lvm2-monitor  S13cpuspeed        S24rpcgssd           S28autofs          S82abrtd
K05wdaemon       K60nfs         K75ntpdate         K89rdisc         S08ip6tables     S13irqbalance      S25blk-availability  S50bluetooth       S90crond
K10psacct        K61nfs-rdma    K75quota_nld       K92pppoe-server  S08iptables      S13rpcbind         S25cups              S50kdump           S95atd
K10saslauthd     K69rpcsvcgssd  K76ypbind          K95firstboot     S10network       S15mdmonitor       S25netfs             S55sshd            S99certmonger
K15htcacheclean  K71cgred       K84wpa_supplicant  K95rdma          S11auditd        S22messagebus      S26acpid             S70spice-vdagentd  S99local
K15httpd         K72cgconfig    K87restorecond     K99rngd          S11portreserve   S23NetworkManager  S26haldaemon         S80postfix

  K開頭的文件:要停止的服務(腳本),從01開始關閉,數字越小越優先關閉

  S開頭的文件:要啟動的服務(腳本),從01開始啟動,數字越小越優先啟動

  這些文件其實都是軟鏈接,指向的都是/etc/rc.d/init.d/目錄下的文件

[root@CentOS6 ~]# ll /etc/rc.d/rc5.d/K01smartd 
lrwxrwxrwx. 1 root root 16 Mar 13  2018 /etc/rc.d/rc5.d/K01smartd -> ../init.d/smartd

第五步、啟動終端

  最后一步就是用戶登錄了,沒什么說的。

其他參考:https://www.cnblogs.com/gbk66/p/5900964.html

    https://blog.csdn.net/qq_27754983/article/details/75212666

    https://blog.csdn.net/free050463/article/details/82532091

    https://www.linuxidc.com/Linux/2018-08/153455.htm

    https://blog.51cto.com/xsllqs/1762422


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM