想要玩轉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/ 重新設置系統掛載條件。