GRUB啟動全程細節窺探

來源:互聯網
上載者:User

理解Linux的啟動過程,對於解決Linux系統啟動問題還是非常有協助的,知道Linux系統在每個階段做了哪些事,將會協助你更快的找到問題出處,並解決這些問題。

提示:在進行重要檔案編輯之前,最好是先對檔案進行備份。

首先,我們來看機器啟動的第一步–自檢(Power-On Self Test)

在啟動過程中的第一步,就是自檢,自檢是由電腦的BIOS(基本輸出入系統 (BIOS))完成的,是對機器系統組件進行檢查,不同的電腦架構可能有不同的檢查方式,但它們是最終目的都是相同的。在自檢過程中,如果發生錯誤,警報就會產生,機器就會產生一系列有規則的“滴”的聲音,來標識特定的錯誤;如果自檢通過,則BIOS就會讀取硬碟上的主引導記錄,然後載入在記憶體中找到的引導程式。

主引導記錄MBR):

主引導記錄(MBR)是通過BIOS讀取開機磁碟機的第一個512位元組到記憶體這裡假設我們使用x86架構)在這512位元組中,前面446位元組一般包含一個底層啟動代碼,由它指向硬碟中的引導程式,後面64個位元組包含了這個硬碟的分區表由4個16位元組組成),最後剩下的2個位元組是Magic Number,它是用來進行錯誤偵測。

引導程式Boot Loader)

引導程式的目的是用來載入作業系統,在Linux系統中,有許多引導程式可以使用,但在Linux中最主要的引導程式是LILO和GRUB;Windows也有自己的引導程式,叫NTLDR(New Technology Loader),你可能曾經也在windows啟動的時候看到,這樣子的資訊”NTLDR is missing”;這就是windows引導程式出錯後顯示的提示資訊。

GRUB

在當今Linux發行版本中最為流行的引導程式就是GRUB(GRand Unified Bootloader ),GRUB是一個寫入到主引導記錄和硬碟上的開機磁碟分割(/boot)中,並且用於載入作業系統的程式。GRUB是基於模組化設計,由不同的工作階段組成。其中GRUB的啟動階段分為 Stage1和Stage1_5和Stage2這三部分組成。

Stage1

stage1代碼被寫入到主引導記錄的512位元組中去,但由於MBR大小方面的限制;GRUB stage1 通常指向GRUB的下一階段stage1_5或stage2,GRUB是否需要載入stage1_5這取決於當前檔案系統的類型。可以查看GRUB stage1,只要在系統的/boot/grub目錄下運行以下命令:

[root@localhost grub]# file stage1
stage1: x86 boot sector, code offset 0×48

Stage1_5

Stage1_5是位於Stage1和Stage2之間的中間階段
如果你查看過/boot/grub目錄,你應該會看到各種不同檔案系統類型名稱的stage1_5檔案,這些檔案會讓stage1_5階段準確的識別檔案系統類型
以下是儲存在/boot/grub目錄下的stage1_5檔案:

e2fs_stage1_5
fat_stage1_5
ffs_stage1_5
iso9660_stage1_5
jfs_stage1_5
minix_stage1_5
reiserfs_stage1_5
ufs2_stage1_5
vstafs_stage1_5
xfs_stage1_5

Stage2

這是grub的主要階段,它通常在/boot分區中的/boot/grub/stage2位置,它讀取/boot/grub/grub.conf檔案中的配置資訊來確認如何載入核心,它擁有互動介面,允許你通過它來解決啟動問題,重新或修改GRUB,如何讓系統工作,stage2給使用者顯示出一個圖形啟動菜單,如果沒有使用相關的按鍵進行操作,如e,i鍵等,那麼在規定時間內,沒有進行選擇,GRUB就會從預設功能表項目啟動。

/boot/grub/grub.conf

該檔案指定特定核心和initrd檔案所有模組,並載入到你的Linux系統中去。

以下是RedHat中典型的grub.conf檔案

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/hdb9
#          initrd /initrd-version.img
#boot=/dev/hdb
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server   (2.6.18-53.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-53.el5.img

以下是經常出現的啟動錯誤介面:

GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

[Minimal BASH-like line editing is supported.  For the first word, TAB
lists possible command completions.  Anywhere else, TAB lists the possible
completions of a device/filename.]

grub>

什麼都沒有,只有GRUB的提示符,我們該怎麼辦?通過GRUB中的TAB鍵來手動啟動,以下是操作步驟:

grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0×83

grub> kernel /<TAB>
Possible files are: lost+found grub initrd-2.6.18-8.el5.img System.map-2.6.18-
8.el5 config-2.6.18-8.el5 symvers-2.6.18-8.el5.gz vmlinuz-2.6.18-8.el5

grub> kernel /vmlinuz-2.6.18-8.el5  ro root=LABEL=/
[Linux-bzImage, setup=0x1e00, size=0x1ad054]

grub> initrd /<TAB>
Possible files are: lost+found grub initrd-2.6.18-8.el5.img System.map-2.6.18-
8.el5 config-2.6.18-8.el5 symvers-2.6.18-8.el5.gz vmlinuz-2.6.18-8.el5

grub> initrd /initrd-2.6.18-8.el5.img
[Linux-initrd @ 0xfe8a000, 0x15547c bytes]

grub> boot

其中,root (hd0,0)專指第一塊硬碟中的第一個分區;在kernel行中,你可以輸入”/”,<TAB>就可以查看顯示核心列表,在輸入所要啟動核心名稱的幾個關鍵字符之後,按<TAB>鍵讓GRUB自動幫你補全;另外”ro root=LABEL=/”選項,來自我對RedHat系統使用的經驗,你可能會有所不同;所以你需要在你的grub.conf檔案中檢查這些內容。

在initrd行,也可以使用同樣的操作,顯示相關內容列表。最後,輸入boot,斷行符號,Linux系統就可以啟動。

感謝來自OwnLinux:GRUB 啟動窺探的稿件。

  1. Linux啟動全線提速法
  2. Linux啟動添加核心參數簡介
  3. Linux:從LiveCD到自啟動隨身碟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.