想要玩轉linux,首先明白其啟動流程,這里簡單說明一下:
CentOS 6啟動流程:
POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–> 系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端
Boot Loader:
bootloader是系統的啟動加載器。通常情況下,引導程序都安裝在bootloader中。以我們常見的grup為例,grub分為stage1,stage1.5,stage2。其中stage1的代碼是直接存放在mbr中的。當BIOS將控制權傳遞給MBR后,stage1的代碼就開始運行,它主要負責將stage1.5或者stage2的內容加載在內存中。stage2被加載到內存中后,就會讀取grub的配置文件grub.conf。
想要玩轉,我們就要先玩破壞,然后再修復,才可以。
①
首先stage1階段:
stage1的代碼是直接存放在mbr中的,
MBR引導扇區共512bytes,其中:
主引導程序(boot loader):446bytes, 可以安裝引導加載程序
主分區表(partition table):64bytes,記錄整塊硬盤分區的狀態(16bytes: 標識一個分區)
結束標識: 2 bytes, 55AA ,MBR區域的有效性標識;55AA為有效
我們可以使用命令來查看一下MBR的內容:
[root@CentOS-6 ~]# hexdump -C -n 512 /dev/sda
然后我們要破壞stage1,主要是破壞MBR中前446個字節,可以使用命令
[root@CentOS-6 ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
這樣MBR前446個字節就全為0了,這時bootloader就已經被破壞,下面來重啟試試看:)
重啟系統后,stage1階段沒有正常啟動,直接跳至光盤引導。。。
下面我們就要進入救援模式,來進行修復:
之后會有一些語言和鍵盤及網卡的選項,根據需要自主選擇,再之后會出現Rescue選擇界面,我們選擇Continue繼續。
再之后會有一些提示信息,ok繼續,直至出現下圖界面,我們選擇start shell,ok繼續
這樣我們就會進入一些救援模式的shell,現在我們所在的位置,并不是我們系統的根,而是當前救援shell的根,所以我們首先要切換根目錄,使用“chroot”命令:
在系統重啟后,系統會修復,需要等待一段時間,切勿強制退出
②
OK,這樣stage1的破壞與修復我們就學會了,是不是很簡單,下面我們將stage1.5給破壞了,看看怎么修復。stage1.5是為stage2提供驅動的(在0柱面1扇區后面的63個扇區中存儲)
首先我們看看stage1.5的位置
[root@localhost6 ~]# hexdump -C -n 1024 /dev/sda
我們摧毀stage1.5,而不摧毀stage1就需要跳過前512個字節
[root@localhost6 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1
然后重啟來試試看:
顯示結果就是:黑屏。。。
這是因為stage1是正常的,他認為系統是存在的,但是到1.5階段,找不到驅動,所以就卡在那里了。
所以我們修復的話還是需要進入的救援模式下,進行修復,步驟和修復stage1是完全一樣的,這是因為
安裝grub命令:
(1) grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤上,并復制GRUB相關文件到DIR/boot目錄下
命令格式:grub-install –root-directory=DIR /dev/DISK
注:這里的"–root-directory=DIR"是指定/boot目錄的父目錄,因為grub-install還可以復制GRUB相關文件到DIR/boot目錄下。如果/boot的父目錄為根目錄,則可以省略。
(2) grub 交互式修復
grub> root (hd#,#)
grub> setup (hd#)
注:這條命令,依賴于“/boot/grub”目錄下的文件,如果文件丟失,請使用第一種方法。
因為“grub-install”命令不僅能修復stage1 還可以修復stage1.5,所以1.5的修復步驟和1的完全一樣,但這里我們就來使用第二種方法來修復一下1.5階段,(進入救援模式的步驟參考前文)
完工,還是這么簡單。。。:)
③
修復就是這么簡單,下面我們來玩一個稍微復雜一點的,將stage1,stage1.5,stage2及/boot/grub目錄全部破壞,然后來修復。
進入救援模式:然后執行以下操作:
然后保存退出,重啟系統即可。
④
再接再勵越玩越大
實驗:刪除/boot 和/etc/fstab,恢復之
進入救援模式,首先解決掛載問題,然后重啟讓系統重新讀取fstab文件,重新掛載
reboot 重啟,讓系統重新掛載,重新進入救援模式:
重啟系統,系統需要修復文件,需要稍等片刻。。。
進入系統后,即可重新更改/etc/fstab/ 重新設置系統掛載條件。
原創文章,作者:Groot,如若轉載,請注明出處:http://www.www58058.com/48694