玩轉linux之啓動篇

  

 想要玩轉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

wKiom1fXUBDCg0cdAAAVTASCKfQ490.png

這樣MBR前446個字節就全爲0了,這時bootloader就已經被破壞,下面來重啓試試看:)

重啓系統後,stage1階段沒有正常啓動,直接跳至光盤引導。。。

wKioL1fXVqehr0pOAASGAlXHzTo100.png

下面我們就要進入救援模式,來進行修復:

wKiom1fXVrfzNOj5AAQGfQRwzn4992.png

之後會有一些語言和鍵盤及網卡的選項,根據需要自主選擇,再之後會出現Rescue選擇界面,我們選擇Continue繼續。

wKiom1fXV-DBkOC3AAAlevc4WqQ596.png

再之後會有一些提示信息,ok繼續,直至出現下圖界面,我們選擇start shell,ok繼續

wKioL1fXWCXyFAfjAAAKD2mjF5I287.png

這樣我們就會進入一些救援模式的shell,現在我們所在的位置,並不是我們系統的根,而是當前救援shell的根,所以我們首先要切換根目錄,使用“chroot”命令:

wKioL1fXWuaB_inEAAAup-TWK9w903.png修復完成後,退出shell,選擇reboot重啓系統

wKiom1fXWx2gfyK8AAAZ85Z2dOw119.png

wKioL1fXWy3Tr-CZAAAKlOqxRvk475.png

在系統重啓後,系統會修復,需要等待一段時間,切勿強制退出

wKioL1fXW4zC0eyCAABMoo4s68k750.png



OK,這樣stage1的破壞與修復我們就學會了,是不是很簡單,下面我們將stage1.5給破壞了,看看怎麼修復。stage1.5是爲stage2提供驅動的(在0柱面1扇區後面的63個扇區中存儲)        

首先我們看看stage1.5的位置

[root@localhost6 ~]# hexdump -C -n 1024 /dev/sda

wKioL1fXYLzADg0oAAAg8dTSEow894.png

我們摧毀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階段,(進入救援模式的步驟參考前文)

wKioL1fXaD_y6ykWAAA5Grbjhi0227.pngreboot重啓!

完工,還是這麼簡單。。。:)


   修復就是這麼簡單,下面我們來玩一個稍微複雜一點的,將stage1,stage1.5,stage2及/boot/grub目錄全部破壞,然後來修復。

wKioL1fXb2eC6XjbAAA2lNe-BLc852.png

進入救援模式:然後執行以下操作:

wKioL1fXhUqAQNCnAAAsNlqhOHw850.pngwKiom1fXhMyAxb7bAAALC66aGB0671.png

然後保存退出,重啓系統即可。

 

 再接再勵越玩越大

實驗:刪除/boot 和/etc/fstab,恢復之

wKiom1fXpb2CDCknAAAVuUoGAGA741.png

進入救援模式,首先解決掛載問題,然後重啓讓系統重新讀取fstab文件,重新掛載

wKioL1fXs8Gzx0yBAAAyUPK-jGU618.png


wKiom1fXthDxzxzbAAALzvPftBo570.png


wKioL1fXv6-D0jyRAAAFOrqVQUg702.png

reboot 重啓,讓系統重新掛載,重新進入救援模式:

wKioL1fXvPyBfwgaAAA_YbYIh_0573.png

wKiom1fXhMyAxb7bAAALC66aGB0671.png

重啓系統,系統需要修復文件,需要稍等片刻。。。

進入系統後,即可重新更改/etc/fstab/ 重新設置系統掛載條件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章