Centos7系統啟動流程
1、uefi或BIOS初始化,開始post(power on self test)開機自檢
這個過程是開機后,BIOS或UEFI進行硬件檢查的階段。檢測:CPU, 內存,硬盤等硬件信息。
2、加載MBR到內存,這里以BIOS為例,BIOS將會直接找硬盤的第一個扇區,找到前446字節,將MBR加載到內存中,MBR將告訴程序下一階段去哪里找系統的grub引導。此階段屬於grub第一階段。grub還有1.5階段和2階段。
分區符MBR(512字節)
三部分組成:
引導程序: 446字節(bootloader)
分區表: 64字節
魔數: 2字節(55AA)
3、GRUB階段
grub第1.5和第2階段,信息默認存放在扇區中,如果使用grub-install生成的第2階段的文件是存放在/boot分區中的。
為了加載內核系統,不得不加載/boot分區,而加載/boot分區,要有/boot分區的驅動,/boot分區驅動是放在/boot分區中的啊,我們好像進入死循環了,Linux是怎么解決的呢?就是靠放在1.5階段中的數據,放在第一個扇區后的后續扇區中,第1.5階段和2階段總共27個扇區。
第1.5階段:mbr之后的扇區,識別stage2所在的分區上的文件系統。
第2階段:開機啟動的時候看到Grub選項、信息,還有修改GRUB背景等功能都是stage2提供的,stage2會去讀入/boot/grub/grub.conf或者menu.lst等配置文件。
4、加載內核和initramfs模塊
加載內核,核心開始解壓,啟動一些最核心的程序。
為了讓內核足夠的輕小,硬件驅動並沒放在內核文件里面。
5、內核開始初始化,使用systemd來代替centos6以前的init程序
(1)執行initrd.target
包括掛載/etc/fstab文件中的系統,此時掛載后,就可以切換到根目錄了
(2)從initramfs根文件系統切換到磁盤根目錄
(3)systemd執行默認target配置
centos7表面是有“運行級別”這個概念,實際上是為了兼容以前的系統,每個所謂的“運行級別”都有對應的軟連接指向,默認的啟動級別時/etc/systemd/system/default.target,根據它的指向可以找到系統要進入哪個模式
模式:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
(4)systemd執行sysinit.target
有沒有很眼熟?是的,在CentOS6上是被叫做rc.sysint程序,初始化系統及basic.target准備操作系統
(5)systemd啟動multi-user.target下的本機與服務器服務
(6)systemd執行multi-user.target下的/etc/rc.d/rc.local
6、Systemd執行multi-user.target下的getty.target及登錄服務
getty.target我們也眼熟,它是啟動終端的systemd對象。如果到此步驟,系統沒有被指定啟動圖形桌面,到此就可以結束了,如果要啟動圖形界面,需要在此基礎上啟動桌面程序
7、systemd執行graphical需要的服務
CentOS6,7啟動區別
系統啟動和服務器守護進程管理器,它不同於centos5的Sysv init,centos6的Upstart(Ubuntu制作出來),systemd是由Redhat的一個員工首先提出來的,它在內核啟動后,服務什么的全都被systemd接管,kernel只是用來管理硬件資源,相當於內核被架空了,因此linus很不滿意Redhat這種做法。