----Linux的引導可以采用多種方式,其加載器LILO(LinuxLoader) 是一個靈活的引導加載程序,對其深入的理解,將有助於我 們方便地處理多重系統、網絡引導、大硬盤及大內存等諸多 問題。 一、LILO的引導機制 ----眾所周知,計算機的最初啟動是由BIOS控制的,在
---- Linux 的 引 導 可 以 采 用 多 種 方 式, 其 加 載 器LILO(Linux Loader)
是 一 個 靈 活 的 引 導 加 載 程 序, 對 其 深 入 的 理 解, 將 有 助 於 我
們 方 便 地 處 理 多 重 系 統、 網 絡 引 導、 大 硬 盤 及 大 內 存 等 諸 多
問 題。
一、 LILO 的 引 導 機 制
---- 眾 所 周 知, 計 算 機 的 最 初 啟 動 是 由BIOS 控 制 的, 在 對 一 些
硬 件( 如 內 存、 鍵 盤 等) 初 始 化 之 後, 它 會 試 圖 加 載 硬 盤 的 主
引 導 記 錄(MBR) 或 軟 盤 的 引 導 扇 區。
---- MBR 可 通 過 兩 種 方 式 運 行: 其 一 是 定 位 到 活 動 分 區 並 加 載
相 應 的 引 導 扇 區, 然 後 由 引 導 扇 區 完 成 該 分 區 內 操 作 系 統 的
基 本 組 件 的 加 載; 其 二 是 直 接 從 一 指 定 分 區 中 加 載 信 息, 並
通 過 它 裝 入 任 一 分 區 中 的 操 作 系 統, 諸 如LILO、OS/2 Boot Loader
以 及Partition Magic 等 引 導 加 載 程 序 都 可 以 配 置 成 這 種 方 式。 軟
盤 的 引 導 扇 區 相 當 於 硬 盤 活 動 分 區 的 引 導 扇 區, 它 用 於 裝 入
軟 盤 上 的 操 作 系 統。
---- 由 此 可 見, 只 要 把LILO 安 裝 在MBR、 活 動 分 區 或 者 引 導 軟 盤
上, 就 能 接 管 計 算 機 的 控 制 權, 然 後 由LILO 完 成 後 繼 的 引 導 過
程。LILO 中 建 有 一 個 引 導 表 地 址 編 碼, 借 此, 它 的 引 導 程 序 就
能 定 位 到Linux 的 內 核 文 件, 這 種 地 址 編 碼 既 可 以 按 照 柱 面/ 磁
頭/ 扇 區(CHS) 模 式, 又 可 以 采 用LBA 的 線 性 塊 號 模 式, 因 此, 即
使 是 對 某 些SCSI 控 制 程 序,LILO 也 能 良 好 運 行。
---- 當LILO 定 位 到 配 置 文 件 後, 經 過 預 引 導 過 程, 就 顯 示 提 示
符"LILO boot:", 此 時, 系 統 允 許 選 擇 引 導 不 同 的 操 作 系 統 或 者
不 同 的 內 核 配 置, 按Tab 鍵 顯 示 可 選 項 列 表, 然 後 輸 入 可 選 項
或 者 直 接 回 車 選 擇 缺 省 配 置, 如 果 選 擇 了 引 導Linux, 還 可 以
直 接 傳 遞 參 數 到 系 統 內 核。
---- 和 其 他 系 統 的 引 導 加 載 程 序 相 比,LILO 具 有 更 高 的 靈 活
性, 其 引 導 方 式 也 更 豐 富:
---- ① 當LILO 被 安 裝 在 硬 盤 的MBR、 活 動 分 區 或 引 導 軟 盤 上 時,
作 為 原 引 導 程 序 的 替 身, 它 能 引 導 任 一 硬 盤 任 一 分 區 上 的
Linux 和 其 他 操 作 系 統。
---- ② 除 了 引 導 扇 區, 它 沒 有 任 何 隱 含 文 件, 也 不 需 要 使 用
特 定 的 分 區, 它 的 配 置 文 件 可 以 在 任 何 分 區, 甚 至 是 存 放 在
與Linux 毫 不 相 干 的DOS 分 區 的 某 個 子 目 錄 下。
---- ③ 它 能 引 導 幾 個 不 同 的 內 核 配 置, 甚 至 是 幾 個 不 同 的 內
核。
---- ④ 它 能 引 導 同 一 機 器 上 的 多 個Linux 版 本。
---- ⑤ 它 能 從 網 絡 上 引 導Linux。
---- 正 是 由 於LILO 的 靈 活 性, 使 得 其 配 置 變 得 相 當 復 雜, 當 有
多 個 系 統 共 存 時, 建 議 先 安 裝 其 他 操 作 系 統, 最 後 再 安 裝
Linux, 這 樣, 設 置LILO 對 其 他 系 統 的 引 導 會 相 對 簡 單 一 些。
二、LILO 引 導 的 幾 個 參 數
---- 在 此 只 介 紹 本 文 涉 及 到 的 幾 個 參 數。
---- 'boot=': 此 參 數 指 明 包 含 引 導 扇 區 的 設 備 名( 如/dev/had),
若 此 項 忽 略, 則 從 當 前 的 根 分 區 中 讀 取 引 導 扇 區。
---- 'root=': 此 參 數 告 訴 內 核 啟 動 時 以 哪 個 設 備 作 為 根 文 件
系 統 使 用, 其 設 定 值 為 構 造 內 核 時 根 文 件 系 統 的 設 備 名, 可
用 的 設 備 名 有:
---- ①/dev/hdaN~/dev/hddN:ST-506 兼 容 硬 盤,a 到d 上 的N 個 分 區。
---- ②/dev/sdaN~/dev/sdeN:SCSI 兼 容 硬 盤,a 到e 上 的N 個 分 區。
---- ③/dev/xdaN~/dev/xdbN:XT 兼 容 硬 盤,a 到b 上 的N 個 分 區。
---- ④/dev/fdN: 軟 盤,A:(N=0) 或B:(N=1)。
---- ⑤/dev/nfs: 由 網 絡 取 得 根 文 件 系 統 的 標 志。
---- 'image=': 指 定Linux 的 內 核 文 件。
---- 'delay=': 設 定 引 導 第 一 個 映 像 前 的 等 待 時 間。
---- 'disk=': 此 參 數 為 某 一 特 殊 的 硬 盤 定 義 非 標 准 參 數。
---- 'append=': 為 內 核 傳 遞 一 個 可 選 的 參 數 行, 其 典 型 的 應 用
是 為 不 能 完 全 由 系 統 自 動 識 別 的 硬 盤 指 定 參 數, 如
append="hd=64,32,202"。
---- 'label=': 此 參 數 為 每 個 映 像 指 定 一 個 名 字, 以 供 引 導 時
選 擇。
---- 'install=': 安 裝 一 個 指 定 文 件 作 為 新 的 引 導 扇 區, 缺 省 為
/boot/boot.b。
---- 'table=': 說 明 包 含 分 區 表 的 設 備 名, 如 果 此 參 數 忽 略, 引
導 加 載 程 序 將 不 能 傳 遞 分 區 信 息 到 已 引 導 的 操 作 系 統。
三、LILO 典 型 配 置 方 法
---- 通 常 情 況 下,Linux 的 安 裝 程 序 自 身 就 可 以 完 成LILO 的 安 裝
配 置, 從 而 較 好 地 解 決 多 重 系 統 的 引 導 問 題, 如 果 系 統 不 能
自 動 完 成 這 種 配 置, 那 麼 可 以 通 過 手 工 修 改 配 置 文 件
/etc/lilo.conf 來 實 現 不 同 條 件 下 的 引 導。
---- 1 . 當 系 統 能 自 動 完 成 配 置 時
---- 對 於 這 種 情 況, 只 有 一 個 建 議: 將LILO 安 裝 到Linux 分 區 的
根 上, 而 不 是MBR。 假 設 當 前hda1 中 裝 有DOS/
Windows,hda2 中 安 裝
Linux, 則/etc/lilo.conf 的 內 容 大 致 如 下:
boot=/dev/hda2 #指定引導位置
compact
delay=5 #延時5秒
root=current #根在當前分區
image=/boot/vm
linux #指定Linux的內核文件
label=linux #用Linux為代表名稱
other=/dev/hda1 #其他操作系統所在的分區
table=/dev/hda #指定包含分區表的硬盤
label=dos #用dos為代表名稱
---- 2 . 當 系 統 無 法 自 動 完 成 配 置 時
---- 不 外 乎 兩 種 情 況: 其 一 是BIOS 不 能 直 接 看 到Linux 的 根 分 區
; 其 二 是BIOS 只 能 讀 寫 標 准IDE 硬 盤 的 前504MB。 這 時, 必 須 遵 循
一 個 最 基 本 的 原 則: 建 立 一 個BIOS 能 存 取 的 較 小 的Linux 分 區,
其 中 包 含 內 核 文 件、 映 射 文 件 以 及 鏈 加 載 程 序 等 必 要 的 內
容, 而 根 則 可 以 是 另 外 一 個 獨 立 的 分 區。 至 於 配 置 上 的 其 他
細 節, 從 以 下 實 例 來 說 明。
---- 例1: 主 硬 盤 為IDE 接 口, 第 二 硬 盤 為SCSI 接 口, 根 文 件 在SCSI
上。
---- 對 策: 在IDE 硬 盤 上 劃 分 一 個 較 小 的Linux 分 區(/dev/hda2), 其
中 包 含 基 本 文 件, 掛 接 到/u2 下, 其 配 置 文 件/etc/lilo.conf 的 主
要 內 容 為:
boot=/dev/hda #LILO裝在主IDE的MBR
install=/u2/etc/lilo/boot.b
#從boot.b安裝LILO引導記錄
map=/u2/etc/lilo/map
#安裝程序建立此映射文件,
告訴引導載入程序內核塊的位置
compact
timeout=50
image=/u2/vmlinux
#內核文件應事先拷貝到/u2下
label=linux
root=/dev/sda1
#告訴內核根系統在SCSI硬盤上
read-only
other=/dev/hda1
loader=/u2/etc/lilo/chain.b #指明加載程序
label=dos
---- 例2: 一 個 標 准 的IDE 大 硬 盤 需 安 裝Linux 和DOS/Windows。
---- BIOS 的int 13 調 用 是 采 用3 個 位 元 組 的 CHS 編 碼,10 位 為 柱 面
號,8 位 為 磁 頭 號,6 位 為 扇 區 號。 可 能 的 柱 面 號 碼 是0 ~1023, 可
能 的 磁 頭 號 碼 是0 ~255, 而 磁 道 上 可 能 的 扇 區 號 碼 是1 ~63, 以
這24 位 最 多 可 以 定 址7.875GB。 但 不 幸 的 是, 標 准 的IDE 界 面 容 許
256 個 扇 區 / 磁 道、 65536 個 柱 面 以 及16 個 磁 頭。 它 自 己 本 身 可
以 存 取128GB, 但 是 除 去BIOS 方 面63 個 扇 區 與1024 個 柱 面 後 只 剩
504MB 可 以 定 址。
---- 對 策: 在 硬 盤 的 前500MB 中 劃 分350MB(/dev/hda1) 給DOS,
150MB(/dev/hda2) 給Linux, 在 相 應 的 配 置 文 件 中 應 說 明 硬 盤 的 參
數:
boot=/dev/hda
...
disk=/dev/hda
b
ios=0x80
sectors=63
heads=16
cylinders=2100
image=/vmlinux
append="hd=2100,16,23"
root=/dev/hda2
label=linux
四、 LILO 的 卸 裝
---- 當LILO 覆 蓋 了 引 導 扇 區 時, 它 會 保 留 一 個 引 導 扇 區 的 備 份
在/boot/boot.xxyy 中, 其 中xxyy 是 十 六 進 制 的 設 備 主 / 次 號 碼
(major/minor numbers), 利 用 命 令"ls -l /dev/device" 就 可 獲 得 硬 盤 或
分 區 的 主 / 次 號 碼。 若 要 卸 裝LILO, 只 需 恢 復 初 始 的 引 導 扇
區。 例 如:LILO 安 裝 在/dev/had, 對 應 的 備 份 文 件 為
/boot/boot.0300, 使 用 下 面 的 命 令 即 可:
---- dd if=/boot/boot.0300 of=/dev/_had bs=446 count=1
---- ( 作 者 地 址: 巨 化 集 團 公 司 計 算 中 心,324004; 收 稿 日 期:1999年6 月)