啓動流程、grub配置及修復、initramfs修復
目錄:
centos啓動流程
grup配置及修復
2.1 grub配置
2.2 grub命令啓動
2.3 grub修復
initramfs修復
boot破壞修復
1.centos啓動流程
在centos5和6中啓動流程如下:
(1).POST加電自檢
硬件加電自檢程序(安裝在CMOS中的BIOS程序)BIOS負責檢測硬件設備是否正常運行,如cpu、內存、硬盤、外接設備等是否正常,在生產中服務器內存較大,由多條內存組成較大內存的服務器,因此對內存的安裝順序等要嚴格的控制,不同品牌服務器要根據各自廠家的設計及要求進行安裝。
BIOS初始化硬件後會關聯硬盤分區格式, 如:新購PC機自帶Windows10(GPT分區)系統修改爲Windows7(MBR)系統時,將BOIS中boot菜單的boot mode默認格式UEFI修改爲Legacy Support。因爲不同的硬盤分區格式,需要不同的硬件啓動程序支持。
(2).MBR主引導分區
在BIOS初始化硬件後,調動INT13硬件讀取MBR信息,其中MBR在硬盤的第一個扇區,一個扇區大小爲512byte,前446byte存儲bootloader,64byte存儲硬盤分區表,2byte存儲硬盤標誌位。但446byte不足以啓動系統,因此會在MBR後面的扇區存儲1.5階段的引導啓動程序,其中1.5階段主要負責讀取boot分區(存儲內核、虛擬文件系統和grup的配置文件),真正的分區一般從第63個扇區開始進行分區。
系統引導分爲三個階段:
第1階段:在MBR分區中,主要作用加載boot loader,進入1.5階段;
第1.5階段:主要作用加載/boot分區的文件系統驅動,進入文件系統;
第2階段:主要作用通過/boot/grub/grub.conf配置文件進行加載內核等,其中在/boot/grub/*下只有grub.conf配置文件生效,其他都是第1階段和1.5階段的備份文件。
(3).Kernel、initrd/initramfs
在系統通過Boot loader引導進入boot分區後,先是通過grub.conf中的參數root (hd0,0)從第一塊磁盤中的第一個分區進行讀取數據,參數kernel/vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2讀取內核數據及真正加載根的爲,參數initrd /initramfs-2.6.32-696.el6.x86_64.img讀取初始化虛擬根系統(注意:一定要先讀取內核,然後再讀取虛根系統,因爲只有加載內核後才能),然後加載啓動過程中所定義的內核模塊,最後釋放虛根,切換爲真實的根文件系統。
(4).init
當系統切換爲真正的根後,系統從內核空間轉到用戶空間,執行第一個初始化程序/sbin/init,通過init初始化程序將用戶空間預定義的啓動級別進行執行/etc/rc.d/rc#.d/S*.sh腳本啓動相關服務。
2.grub配置及修復
grub配置文件存儲位置爲/boot/grub/*,其中在此目錄下能夠看到關於啓動第1階段、第1.5階段、第2階段的備份文件和grub的配置文件grub.conf
2.1 grub配置文件
grub配置文件通過參數的配置控制默認啓動的菜單、菜單超時時間、單用戶模式登錄的密碼、菜單的背景圖片設置、引導boot的磁盤如hd0,0(第一塊磁盤的第一分區),kernel的指定、initrd的指定等相關
[root@centos6 grub]# grub-crypt #對密碼進行256位加密算法計算 [root@centos6 grub]# vim /boot/grub/grub.conf default=0 #默認 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz password --encrypted $6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0 #經過加密後的密碼,此密碼是進入防止單用戶的密碼 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=/dev/sda2 rhgb quiet #rhgb是開機轉圈的動作 initrd /initramfs-2.6.32-696.el6.x86_64.img #quiet內核啓動隱藏顯示 title CentOS 6 (4.6.32-696.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=/dev/sda2 quiet initrd /initramfs-2.6.32-696.el6.x86_64.img password root0987 #此密碼是引導加載內核的密碼也就是系統啓動密碼 |
2.2 grub命令啓動
在開機啓動進入菜單後,按c命令進入grub提示符,在grub命令提示符下即可輸入相關啓動命令,啓動系統只需4條指令root、kernel、initrd、boot,分別加載boot分區位置、內核位置、虛根位置,最後重新啓動虛擬機即可完成通過命令加載系統,進入系統之後再選擇編輯/boot/grub/grub.conf的文件
第一步:輸入"root (hd" 然後按兩次 TAB 鍵出現磁盤塊,選中需啓動的磁盤,再按兩次TAB鍵出現磁盤分區編號,選中boot分區所在的磁盤分區;
第二步:輸入"kernel /vm"然後按兩次TAB鍵出現內核,再選中要選擇啓動的正根root=/dev/sda2
第三步:輸入"initrd /init"然後按兩次TAB鍵出現虛根系統
第四步:輸入boot啓動系統,完成加載系統
GUN GRUB version 0.97 (635K lower /1046400K upper memory) grub>kernel /boot/vmlinuz-2.6.15-26-386 ro
dev=/dev/hda3 #啓動內核參數 grub>initrd
/boot/initrd.img-2.6.15-26-386 #啓動虛根參數 grub>root (hd0,0) #啓動boot的位置 grub>boot (具體也可參考http://man.linuxde.net/grub) |
2.3 grub修復
grub修改有兩種方法:
第一種方法:重構grub引導程序
在誤刪grub的第一階段(446byte字節)、第1.5階段或第三階段的數據導致系統無法正常啓動時,通過萬能的方法重新構建新的grub引導程序,但是如若分區表64tyte刪除則無法恢復,具體恢復如下令:
#!/bin/bash sh-4.1# grub-install /dev/sda #安裝grub程序到/dev/sda這塊磁盤 sh-4.1#reboot #################################重啓後指定引導配置文件進入系統#################################### GUN GRUB version 0.97 (635K lower /1046400K upper memory) grub>kernel /boot/vmlinuz-2.6.15-26-386 ro
dev=/dev/hda3 #啓動內核參數 grub>initrd
/boot/initrd.img-2.6.15-26-386 #啓動虛根參數 grub>root (hd0,0) #啓動boot的位置 grub>boot ##################################登錄系統重構配置文件############################################## [root@centos6 grub]# vim /boot/grub/grub.conf default=0 #默認 timeout=5 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=/dev/sda2 rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img |
第二種方法:利用備份文件恢復
利用/boot/grub/*第1階段的備份文件和第1.5的備份文件進行恢復,此種方法有效率相對較高無需進入救援模式
GUN GRUB version 0.97 (635K lower /1046400K upper memory) grub>setup (hd0) #利用備份文件恢復 grub>kernel /boot/vmlinuz-2.6.15-26-386 ro
dev=/dev/hda3 #啓動內核參數 grub>initrd
/boot/initrd.img-2.6.15-26-386 #啓動虛根參數 grub>root (hd0,0) #啓動boot的位置 grub>boot |
3.initramfs修復
initramfs虛根系統是安裝系統時,系統利用自身的命令生成相關的文件系統,如若此文件系統可以利用mkinitrd
##################################生成虛擬文件系統################################################## [root@centos6 bak]#mkinitrd /boot/initramfs-$(name -r).img $(name -r) |