跳轉到內容

Ict-innovation/LPI/102.2

來自華夏公益教科書,開放的書籍,開放的世界

102.2 安裝引導管理器

[編輯 | 編輯原始碼]

考生應該能夠選擇、安裝和配置引導管理器。


關鍵知識領域

  • 提供備用引導位置和備份引導選項。
  • 安裝和配置引導載入程式,如 GRUB Legacy。
  • 執行 GRUB 2 的基本配置更改。
  • 與引導載入程式互動。

引導載入程式安裝在 MBR 中。當系統啟動時,它會將 MBR 中的內容載入到 RAM 中。在 Linux 中,主要有兩個引導載入程式

  • Lilo: LInux LOader。
  • Grub: GRand Unified Boot Loader。

引導載入程式允許您選擇要從中引導的映像。一個系統可以包含多個映像(作業系統)。

引導載入程式允許您互動式地執行命令並將引數傳遞給您將要引導的映像。initrd 是用於在 RAM 上構建檔案系統以掛載其他檔案系統和執行程式的驅動程式。

GRUB 是當今許多發行版的預設引導載入程式。在使用 Linux 安裝 Windows 時,請先安裝 Windows,再安裝 Linux,因為 Windows 會在未經詢問的情況下覆蓋 MBR。

如上面引導過程所述,引導載入程式有兩個階段。第一階段和第二階段。第一階段是引導扇區應用程式,負責載入階段 2。


Grub 引導載入程式

[編輯 | 編輯原始碼]

Grub 瞭解 Linux 檔案系統,而不是使用原始扇區來定位 Linux 核心,GRUB 可以從 ext2 或 ext3 檔案系統載入。GRUB 還能夠直接載入多個非 Linux 作業系統。GRUB 引導載入程式有三個階段。階段 1 具有主引導載入程式的通常工作,但它會載入階段 1.5,這是一個瞭解特定檔案系統(如 ext2/3、reiserfs 等)的引導載入程式,載入後它會載入第二個引導載入程式。1.5 階段引導載入程式位於硬碟的第一個 30 千位元組,緊隨 MBR 之後。

Grub 可以透過編輯位於 /boot/grub/grub.conf 或 /boot/grub/menu.lst 的 grub 配置檔案並執行 grub-install 來安裝,也可以透過呼叫 grub shell 來安裝。在引用硬碟和分割槽時,grub 使用約定 (hdx) 來表示硬碟,無論它們是 PATA 還是 SATA 磁碟,以及 (fdx) 來表示軟盤,其中 x 指的是 BIOS 所見的磁碟編號。當需要引用分割槽時,使用約定 (hdx,n) 或 (fdx,n),其中 n 是從 0 開始編號的分割槽。


下面給出了一個 grub 配置檔案示例

default=0

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

title Linux (2.4.18-14)

root (hd0,0)

kernel /vmlinuz-2.4.18-14 ro root=/dev/hda5

initrd /initrd-2.4.18-14.img

grub.conf/menu.lst 檔案的主要部分是


default

  • 預設引導的映像(第一個條目為 0)

timeout

  • 提示超時(秒)

title

  • 映像的名稱

root

  • 第二階段引導載入程式和核心的存放位置,例如 (hd0,0) 是 /dev/hda1

kernel

  • 核心的路徑,從上一個 root 開始,例如 /vmlinuz

ro

  • 只讀

root

  • 檔案系統根目錄

initrd

  • 初始根磁碟的路徑


要在 /dev/hda 上使用 grub-install 安裝第一階段 MBR 載入程式,您需要執行命令 grub-install (hd0) 或者,grub 可以透過 grub shell 安裝,但仍然需要 grub.conf/menu.lst 檔案。可以透過輸入 grub 來進入 grub shell。 要安裝引導載入程式,您需要在 shell 中執行以下命令


root (hd0,0)

setup (hd0)


第一行告訴 grub,/boot 分割槽(配置檔案所在的位置)位於第一個硬碟上的分割槽 1,第二條命令告訴 grub 將第一個引導載入程式安裝到第一個硬碟的 MBR。Grub 的一個優點是,每次使用新的映像更新 grub 配置檔案時,例如,grub 不需要像 LILO 一樣重新安裝。


GRUB 2

GRUB 2 是下一代,是對以前稱為 GRUB(即版本 0.9x)的重寫,而 GRUB 又變成了 GRUB Legacy。GRUB Legacy 已經停止開發。GRUB 2 與 GRUB Legacy 共享許多特徵,但也引入了許多新的更改,包括更好的可移植性、記憶體管理和模組化,支援非 ASCII 字元、模組的動態載入等等。有三個位置

主配置檔案有一個新名稱 /boot/grub/grub.cfg,與 menu.lst 不同,此檔案不能直接編輯,通常該檔案由 grub-mkconfig 命令或 update-grub 命令自動生成,它們都會讀取位於 /etc/grub.d/ 中的指令碼,以構建 grub.cfg 檔案。


grub.cfg 檔案示例
#
# 不要編輯此檔案
#
# 它由 grub-mkconfig 使用模板自動生成
# 來自 /etc/grub.d 和來自 /etc/default/grub 的設定
#
      1. BEGIN /etc/grub.d/00_header ###
        if [ -s $prefix/grubenv ]; then
        set have_grubenv=true
        load_env
        fi
        set default="2"
        if [ "${prev_saved_entry}" ]; then
        set saved_entry="${prev_saved_entry}"
        save_env saved_entry
        set prev_saved_entry=
        save_env prev_saved_entry
        set boot_once=true
        fi
        ### END /etc/grub.d/05_debian_theme ###
      1. BEGIN /etc/grub.d/30_os-prober ###
        menuentry 'Linux Mint 12 64-bit, 3.0.0-23-virtual (/dev/sda7)' --class linuxmint --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos7)'
        search --no-floppy --fs-uuid --set=root f97658d1-ca33-44fe-81fc-6239f8278a23
        linux/boot/vmlinuz-3.0.0-23-virtual root=UUID=f97658d1-ca33-44fe-81fc-6239f8278a23 ro quiet splash vt.handoff=7
        initrd/boot/initrd.img-3.0.0-23-virtual
        }
        menuentry "Failsafe -- openSUSE 12.1 - 3.1.0-1.2 (on /dev/sda3)" --class gnu-linux --class gnu --class os {
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root ee7d61f1-bb6b-4b95-adba-602acb6684ca
        linux /vmlinuz-3.1.0-1.2-desktop root=/dev/disk/by-id/ata-Hitachi_HTS725050A9A364_110227PCK404GLGZS20J-part3 showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe vga=0x317
        initrd /initrd-3.1.0-1.2-desktop
        }
        ### END /etc/grub.d/30_os-prober
      1. BEGIN /etc/grub.d/40_custom ###
        # 此檔案提供了一種簡單的方法來新增自定義選單條目。只需在
        # 此註釋後鍵入要新增的選單條目。注意不要更改
        # 上面的 'exec tail' 行。
        ### END /etc/grub.d/40_custom ######




Sample /etc/grub.d/ 目錄
# ls -l /etc/grub.d/
-rwxr-xr-x 1 root root 6698 2011-10-01 14:40 00_header
-rwxr-xr-x 1 root root 5522 2011-10-01 14:19 05_debian_theme
-rwxr-xr-x 1 root root 1183 2011-10-23 18:05 06_mint_theme
-rwxr-xr-x 1 root root 7370 2011-10-22 21:01 10_linux
-rwxr-xr-x 1 root root 6518 2011-09-20 12:36 10_lupin
-rwxr-xr-x 1 root root 6344 2011-10-01 14:40 20_linux_xen
-rwxr-xr-x 1 root root 1588 2011-05-03 01:07 20_memtest86+
-rwxr-xr-x 1 root root 7545 2011-10-01 14:40 30_os-prober
-rwxr-xr-x 1 root root 214 2011-10-01 14:40 40_custom
-rwxr-xr-x 1 root root 95 2011-10-01 14:40 41_custom
-rw-r--r-- 1 root root 483 2011-10-01 14:40 README

這裡指令碼名稱中的編號定義了命令 grub-update 或 grub-mkconfig 執行時的優先順序順序。

讓我們回顧一下指令碼

  • 00_header – 是從 /etc/default/grub 載入 GRUB 設定的指令碼,包括超時和預設引導條目。
  • 05_debian_theme – 定義背景、顏色和主題。
  • 10_linux – 載入已安裝作業系統的選單條目。
  • 20_memtest86+ 載入 memtest 實用程式。
  • 30_os-prober – 是一個指令碼,它將探測硬碟以查詢其他作業系統並將它們新增到引導選單中。
  • 40_custom 是一個模板,您可以使用它來建立要新增到引導選單中的其他條目。


# 如果你更改了此檔案,請在之後執行 'update-grub' 來更新
# /boot/grub/grub.cfg。
# 有關此檔案中的選項的完整文件,請參閱
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=2
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

  1. 取消註釋以啟用 BadRAM 過濾,修改以適合您的需要
    # 這適用於 Linux(不需要補丁)以及從 GRUB 獲取的任何核心
    # 記憶體對映資訊(GNU Mach,FreeBSD 核心 ...)
    #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
  1. 取消註釋以停用圖形終端(僅限 grub-pc)
    #GRUB_TERMINAL=console
  1. 圖形終端使用的解析度
    # 請注意,您只能使用圖形卡透過 VBE 支援的模式
    # 您可以在真實的 GRUB 中使用命令 'vbeinfo' 檢視它們
    #GRUB_GFXMODE=640x480
  1. 如果不想讓 GRUB 將 "root=UUID=xxx" 引數傳遞給 Linux,請取消註釋
    #GRUB_DISABLE_LINUX_UUID=true
  1. 取消註釋以停用恢復模式選單條目的生成
    #GRUB_DISABLE_RECOVERY="true"
  1. 取消註釋以在 grub 啟動時發出蜂鳴聲
    #GRUB_INIT_TUNE="480 440 1"

/etc/default/grub 包含選單設定自定義項,例如預設選單條目和引導預設超時。

新的更改和功能可以概括如下。

  • grub.cfg 是主配置檔案
  • 位於 /etc/grub.d/ 中的指令碼檔案用於生成 grub.cfg
  • GRUB 裝置名稱中的分割槽編號現在從 1 開始,而不是從 0 開始。
  • 可以從 LVM 和 RAID 裝置直接讀取檔案。
  • 許多功能作為模組動態載入,允許靈活構建核心映象。
  • 啟動階段不再存在,映象檔案已重新組織。
  • 支援更多檔案系統,包括 ext4、NTFS 和 HFS+。
  • 新增或編輯指令碼後,必須執行 update-grub 命令以使用更新重建 grub.cfg。


使用的檔案、術語和實用程式

  • /boot/grub/menu.lst、grub.cfg 和其他變體。
  • grub-install
  • MBR
  • 超級塊


上一章 | 下一章

華夏公益教科書