CentOS6啟動流程和故障修複實驗
一、啟動流程概述
1、上電POST自檢,加載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、執行/bin/login程式,等待一會登入
簡單流程:
POST (Power ON Self Test,加電自檢)---->Boot Sequesce(BIOS,找到第一啟動裝置)---->Boot Loader(加載引導程式到記憶體中)---->Kernel (ramdisk,加載核心和虛拟磁盤映像檔案)---->rootfs(挂載臨時根)---->switchroot(切換臨時根為系統根目錄)---->/sbin/init(開機後第一個讀取的檔案)---->配置檔案(/etc/inittab,/etc/init/*.conf)---->設定預設運作
級别---->系統初始化腳本rc.sysinit---->關閉或啟動對應級别的服務---->啟動終端
二、删除centos6系統的grub.conf⽂件,⼿動啟動系統
目的:掌握centos6系統中的啟動時grub.conf檔案的作用是提供啟動菜單,删除該檔案後,需要
手動指定啟動核心等參數。
實驗步驟
1、删除grub.conf⽂件前,要知道該⽂件中kernel⾏root指定位置
root=/dev/mapper/vg_CentOS-lv_root
2、删除了/boot/grub/grub.conf啟動菜單⽂件
[[email protected] ~]# rm /boot/grub/grub.conf -f
3、reboot重新開機
[[email protected] ~]# reboot
4、進⼊grub界⾯,⼿動指定核心等參數

重新開機後出現的grub>提⽰符界⾯,⼿動指定核心及參數才能啟動系統。
(1)先指定根路徑:
grub> root (hd0,0)
注意:此時可使⽤Tab鍵補全可選的指令。
(2)再指定核心及參數
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro
root=/dev/mapper/vg_CentOS-lv_root
(3)指定虛拟磁盤映像⽂件
grub> initrd /
(4)boot啟動
grub> boot
最後啟動成功輸⼊⽤戶名和密碼登入系統:
(5)⼿動編寫恢複grub.conf⽂件
重新開機後通過⼿動建立的grub.conf成功進⼊系統:
三、破壞grub1階段并修複
實驗步驟
1、删除/boot/grub⽬錄下的各的stage⽂件啟動不受影響
在/boot/grub/⽬錄下,除保留grub.conf引導菜單⽂件以外,其它⽂件都删除,不影響系統啟動。
[[email protected] grub]# mv grub.conf …/
[[email protected] grub]# rm -rf *
[[email protected] grub]# ls
[[email protected] grub]# mv …/grub.conf .
[[email protected] grub]# ls grub.conf
[[email protected] grub]#reboot
進⼊此grub菜單界⾯,就說明grub的stage1第⼀階段和stage1.5階段已經通過了,正在讀取stage2階段。
2、破壞grub的stage1第⼀階段并恢複系統啟動
前提系統安裝CD光牒已經放在光驅⾥。
[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
[[email protected] ~]# reboot
重新開機後,系統⽆法進⼊正常的原來系統,啟動時按F2鍵,進⼊BIOS設定第⼀啟動裝置為CD-ROOM裝置。或直接在關機狀 态使⽤虛拟機開機進⼊固件的功能:
CD光牒啟動界⾯:
選擇救援模式即第3⾏,回車确定:
選擇語⾔,選擇ok,回車确定:
選擇鍵盤類型,選擇ok,回車确定:
選擇不啟⽤⽹絡即選擇No,回車确定:
嘗試挂載損壞引導的系統中的根,選擇Continue,回車确定:
已經挂載損壞系統上的根,回車确定
确認把損壞引導系統的根挂載在/mnt/sysimage⽬錄下,回車确定
進⼊shell,選擇第1⾏後,選擇Ok,回車确定:
檢視磁盤分區:
bash-4.1# df
切換損壞引導的系統上的真正的根:
bash-4.1#chroot/mnt/sysimage
驗證切換真正的根後,檢視磁盤分區:
sh-4.1# df
下⾯在真正的根下安裝grub,安裝前檢視第⼀啟動磁盤分區的第⼀個扇區即MBR的前446位元組:
hexdump -C -n 446 -v /dev/sda
此時觀察MBR目前446位元組是⽆内容的。
安裝grub:
sh-4.1# grub-install /dev/sda
再次檢視MBR的前446位元組
看/boot/grub目錄下,生成了此前删除的各檔案:
grub所需的⽂件,能正常啟動,編輯/boot/grub/grub.conf:
sh-4.1# vim /boot/grub/grub.conf
在kernel所在的⾏,尾部添加selinux=0即可。
或者編輯/etc/selinux/config,修改為SELINUX=disabled也能實作同樣的功能,還有⼀種⽅法是在啟動時,中⽌啟動進 ⼊gurb菜單,在kernel⾏的核心參數最後寫上selinux=0完全可實作相同的功能。
退出chroot環境:
sh-4.1# exit
重新開機系統:
bash-4.1# reboot
重新開機後,系統成功修改grub引導⽂件。
四、破壞grub1.5階段并恢複
實驗步驟
1、删除grub1.5階段
檢視包含grub1.5階段的内容:
[[email protected] ~]# hexdump -C -n 10240 -v /dev/sda
删除grub1.5階段即MBR的512位元組之後的部分:
[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512
再次檢視包含grub1.5階段的内容:
[[email protected] ~]# hexdump -C -n 10240 -v /dev/sda
重新開機:
[[email protected] ~]# reboot
設定CD光牒開機啟動項,顯⽰如下界⾯,迅速按F2鍵進⼊BIOS設定界⾯:
選擇Boot菜單,設定CD-ROM第⼀啟動:
選擇CD-ROM Drive,⽤組合鍵Shift+加号(+)把該項移動到第⼀項即可,按F10儲存退出,重新啟動。
選擇救援模式即第3⾏,回車确定:
選擇語⾔,選擇ok,回車确定:
選擇鍵盤類型,選擇ok,回車确定:
選擇不啟⽤⽹絡即選擇No,回車确定:
嘗試挂載損壞引導的系統中的根,選擇Continue,回車确定:
已經挂載損壞系統上的根,回車确定:
确認把損壞引導系統的根挂載在/mnt/sysimage⽬錄下,回車确定:
進⼊shell,選擇第1⾏後,選擇Ok,回車确定:
檢視磁盤分區:
bash-4.1# df
切換根:
bash-4.1# chroot /mnt/sysimage/
進⼊grub指令⾏:
bash-4.1# grub
重新寫⼊/boot/grub/⽬錄下grub所需的⽂件⾥:
grub> root (hd0,0)
grub> setup (hd0)
退出grub界⾯、退出切換根:
grub> quit sh-4.1# exit
重新開機系統:
bash-4.1# reboot
把第⼀啟動項,修改為硬碟啟動即可,成功恢複grub1.5階段,正常啟動系統。
注意:此例模拟破壞grub1.5問題解決⽅法,有⼀個前提,就是必須保證/boot/grub/⽬錄下,有stage1、stage1_5、 stage2等類似的⽂件,因為修複時,會把破壞的内容寫到這些⽂件⾥,是以,如果這些⽂件不存在,是⽆法寫⼊⽂件的, 也就是⽆法修複成功。
五、破壞grub2階段即删除/boot/⽬錄下所有⽂件
實驗步驟
1、删除/boot/⽬錄下所有⽂件
[[email protected] ~]# rm -rf /boot/* [[email protected] ~]# reboot
2、使⽤CD光牒啟動,進⼊救援模式
在啟動剛開始界⾯,迅速按⽅向鍵上下鍵,進⼊BIOS設定界⾯。
進⼊BIOS,設定CD光牒啟動:
按F10,儲存退出即可。
啟動後,直接選擇進⼊救援模式即可。
3、切根後安裝grub
選擇語⾔,選擇ok,回車确定:
選擇鍵盤類型,選擇ok,回車确定:
選擇不啟⽤⽹絡即選擇No,回車确定:
嘗試挂載損壞引導的系統中的根,選擇Continue,回車确定:
已經挂載損壞系統上的根,回車确定:
确認把損壞引導系統的根挂載在/mnt/sysimage⽬錄下,回車确定:
進⼊shell,選擇第1⾏後,選擇Ok,回車确定:
檢視磁盤分區:
bash-4.1# df
切換根:
bash-4.1# chroot /mnt/sysimage/
安裝grub:
sh-4.1# cd /boot/ sh-4.1# grub-install /dev/sda
4、複制vmlinuz核心⽂件
挂載磁盤并拷貝vmlinuz核心⽂件:
sh-4.1# mount /dev/cdrom /media sh-4.1# cp /media/isolinux/vmlinuz /boot/
注意:拷貝核心⽂件vmlinuz時,除了 /media/isolinux/vmlinuz所在的路徑是核心⽂件,還有⼀個存放位置 是/mnt/Packages/kernel-2.6.32-696.el6.x86_64.rpm,隻需把該⽂件解壓即可,最後再介紹如何解壓這個rpm核心 ⽂件。
5、建立虛拟磁盤映像⽂件
sh-4.1# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
6、建立grub.conf⽂件
檢視根⽬錄在grub.conf應該寫⼊的位置:
sh-4.1# df
或:
sh-4.1# blkid
在這裡插入圖檔描述
這⾥查到root指定位置為/dev/mapper/vg_CentOS-lv_root,當然也可⽤UUID代替其寫為root=UUID=938fa34fd04a-41d5-a6a9-888eeccd26b2。
sh-4.1# vim /boot/grub/grub.conf
内容為:
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz ro root=/dev/mapper/vg_CentOS-lv_root rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img
7、重新開機reboot
sh-4.1# exit bash-4.1# reboot
系統啟動恢複正常。