centos6啟動流程是什么?
下面開始簡單的了解一下CentOS6的啟動流程吧。
?第一步、硬件啟動階段
簡單說一下這一步的流程:打開電源;POST自檢;BIOS逐一排查設備啟動順序;如果是硬盤啟動,讀取硬盤的MBR的BootLoader。(這里默認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 # #?Inpidual?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/目錄下的文件
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???????????S80postfix 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
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
第五步、啟動終端
最后一步就是用戶登錄了,沒什么說的。
推薦教程: 《CentOS教程》