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