1. 程式人生 > 實用技巧 >GRUB原理及修復

GRUB原理及修復


此處以C5 C6為例,GRUB的主要作用是提供一個選單,允許使用者選擇要啟動系統或不同的核心版本,把使用者選定的核心裝載到記憶體的特定空間中,解壓展開,並把系統控制權移交給核心,一臺主機上可能裝有不止一個作業系統,使用者可以根據GRUB提供的啟動選單選定作業系統,隨即載入指定核心

GRUB分為三個階段,

stage 1 這段程式碼的其中一段程式碼是MBR中的 bootloader(446位元組)這一步在GRUB 中是不可或缺的,主要負責當BIOS 交接給GRUB 時,載入存在於各分割槽中的開機檔案,也就是所謂的開機管理程式。其大小大約512位元組

stage1_5 這段程式碼是在緊接著MBR的,輔助

GRUB識別stage2所在的檔案系統所在的磁碟stage1.5 被載入時,就已經賦予GRUB 訪問檔案系統目錄的能力(這段程式中有訪問stage2檔案系統的驅動),所以,自然可以在開始找不到stage2 的情況下,從檔案系統目錄中找出stage2 的所在位置,並激活Linux

其大小約32K

stage 2 boot目錄中,不一定在根分割槽上,即,可以獨立分割槽;

stage提供一個GRUB啟動選單,供使用者選擇不同的作業系統選擇不同的作業系統

提供選項,訪問配置檔案、連線下一個bootsector(主機上可能裝的不止一個系統,,可能,可以手動選擇啟動哪個系統,也可以修改其配置檔案以達到不同效果)

stage2主要就是根據配置檔案,或手動選擇、設定啟動需要的核心或系統!

在系統讀秒的過程中按任意鍵可進入GRUB選擇選單,如下圖,假如你的主機中不止一個作業系統,你可以根據需要選擇不同的作業系統;wKiom1YL6oSjAP79AAFNxPfq4dc499.jpg

仔細看選單下面的選項,鍵入e鍵,可在開機前進入編輯模式,如下圖,

方框內第一行代表boot目錄所在的位置,此處為第一個磁碟第一個分割槽,

方框內第二行就是你的核心位置及核心,

方框內第三行ramdiskramfs),這是一個虛擬檔案系統,可通過這個檔案系統可找到根分割槽位置 以方便核心找到根分割槽、init程式、以及必要的驅動程式、庫檔案

在這個介面,如果再次鍵入e鍵,可對你選擇的選項進行修改!

在這兩個介面中你也可以按

c進入GRUB的命令

wKioL1YL6qryPSoWAAG_XY-tJ88553.jpg

在以上兩個介面中你也可以按c進入GRUB的命令列模式

wKiom1YL6q3Q6xHMAAFI0aCupd8122.jpg

這樣手動指定核心及initrd也能啟動系統

grub 2主要是為載入核心提供選單,主要依靠配置檔案,它的位置在 /boot/grub/grub.conf

#boot=/dev/sda

10 default=0 #啟動項可以有多種,default=0表示預設第一項,1表示預設第二項

11 timeout=5 #grub選單處停留的時間,超時則自動進入預設項

12splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz#grub2 的背景圖片,可以修改

13 hiddenmenu #是否隱藏選單

14 title CentOS 6 (2.6.32-504.el6.x86_64) #核心或title不止一個,此處的內容將出現在選擇選單中

15 root (hd0,0) #核心的磁碟位置

16 kernel /vmlinuz-2.6.32-504.el6.x86_64ro root=/dev/mapper/VolGroup-lv_root

rd_NO_LUKS rd_NO_MDrd_LVM_LV=VolGroup/lv_swap crashkernel=auto.UTF-8 #核心的一些引數選項,名字,選項等。

rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM

rhgb quiet

17 initrd/initramfs-2.6.32-504.el6.x86_64.img # initrd的名字

看到它的配置檔案,便會明白grub2 的主要作用了

安裝grub會自動生成此檔案

[[email protected] ~]# ls /boot/grub/

device.mapgrub.confminix_stage1_5 stage2

e2fs_stage1_5iso9660_stage1_5reiserfs_stage1_5 ufs2_stage1_5

fat_stage1_5jfs_stage1_5splash.xpm.gz vstafs_stage1_5

ffs_stage1_5 menu.lst stage1 xfs_stage1_5



功用,


1)提供選單。並提供互動介面

e 編輯模式,用於編輯選單

c:命令模式 ,互動式介面

(2)載入使用者選擇的核心或作業系統

允許傳遞引數給核心

可隱藏此選單

3)為選單提供了保護機制

為標記選單進行認證

為啟用核心或作業系統進行認證

grub破壞後,有三種途徑可以修改之!

  1. 如果grub破壞後沒有重啟,則直接grub-install 如下,如果已經關機了,則可以把壞的系統磁碟分割槽掛載到好的系統之上,grub-install安裝。

[[email protected]~]# df -lh

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 16G 4.8G11G 33% /

tmpfs 1.9G 01.9G 0% /dev/shm

/dev/sda1 291M 48M228M 18% /boot

/dev/sr0 3.5G 3.5G0 100% /media/cdrom

[[email protected]~]# dd if=/dev/zero of=/dev/sda1 bs=200 count=1

1+0 records in

1+0 records out

200 bytes (200B) copied, 0.00160427 s, 125 kB/s

[[email protected]~]# man bs

No manual entryfor bs

[[email protected]~]# man dd

[[email protected]~]# grub-install --root-directory=/ /dev/sda1

ll /boot/grub –d

drwxr-xr-x. 2root root 1024 9 29 08:35 grub

2、如果只是grub2 壞了,則可以手動配置grub的配置選項,或者在grub命令列重新安裝grubgrub命令列的操作類似於在系統中進入grubwKioL1YL6s-Bmu2KAAKNVeXGXfw806.jpg

3、再不濟,開機進入到系統救援模式下,安裝配置grub

1)首先插入光碟,進入bios,將光碟調整為第一啟動,略…,啟動後如下。。。

未提示步驟選擇預設!

wKioL1YL6uGgNqNFAAGCx5HEljw725.jpg

此處設定不用聯網,選no

wKiom1YL6u2RZvQCAACsrsoOEJ0053.jpg

此處提示,要chroot 切換跟

wKioL1YL6wqhD0TkAADDlzB_zxQ872.jpg

wKioL1YL6xeiV561AAII8zq-pTI542.jpg

wKiom1YL6yLB4GmyAAB63ORMw28021.jpg

切換至bash下,進行grub安裝,安裝後退出重啟

wKioL1YL62XQdP_UAAHBAoXdPdU083.jpg

重新修改bios就可以重新啟動了!


轉載於:https://blog.51cto.com/fallcamel/1699690