歡迎您光臨本站 註冊首頁

LILO使用指南

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

LILO使用指南
2001-05-01 10:30

發布者:netbull 閱讀次數:252


hubertzou

hubertzou@linuxaid.com.cn

計算機的最初啟動是由BIOS控制的,在對一些硬體(如:內存、鍵盤等)初始化之後,它會試圖載入硬碟的主引導記錄(MBR)或軟盤的引導扇區.MBR可通過兩種方式運行,其一是定位到活動分區並載入相應的引導扇區,然後由引導扇區完成該分區內操作系統的基本組件的載入;其二是直接從一指定分區中載入信息,並通過它裝入任一分區的操作系統,諸如 LILO、gurb,OS/2 boot loader及PartitionMagic等引導載入程序都可以配置成這種方式.軟盤的引導扇區相當於硬碟活動分區的引導扇區,它通常用於裝入軟盤上的操作系統.


只要把LILO之類的多重引導器安裝在MBR、活動分區或者引導軟盤上,就能接管計算機的控制權,然後由多重引導器完成後繼的引導過程.


LILO中建有一個引導表地址編碼,藉此它的引導程序就能定位到Linux的內核文件,這種地址編碼既可以按照柱面/磁頭/扇區(CHS)模式,又可以採用LBA的線性塊號模式,因此,即使對某些SCSI控制程序LILO也能運轉良好.

一,MBR還是Linux 的根分區

首先遇到LILO,估計應該在你安裝Linux 的時候,你會被要求選擇LILO的安裝處,是MBR 還是Linux 的根分區.如果你有其他的啟動管理程序例如Boot Magic 或者 System Commander 等,並且想使用他們,那麼你應該把LILO 安裝到Linux 的根分區.如果你選擇使用LILO 作為啟動管理程序,就可以選擇MBR.如果你想在啟動時傳遞參數給內核,也應該使用MBR.

使用LILO 作為啟動程序后,機器啟動后就會有LILO:的提示符,按下TAB 鍵,可以看到可以選擇的操作系統列表.輸入其中的操作系統標籤名就可以啟動到對應的操作系統,或者直接輸入回車啟動到預設的操作系統.在 LILO.CONF中提及的映象可多達16個.




二,lilo.conf用法詳解

我們來看一個LILO 啟動的配置文件(/etc/lilo.conf)實例:

boot=/dev/hda3
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
default=new

image=/boot/vmlinuz-2.4.3
label=new
read-only
root=/dev/hda3

image=/boot/vmlinuz-2.2.19
label=linux
read-only
root=/dev/hda3

other=/dev/hda2
label=dos

本配置文件指定 LILO使用在/dev/hda路徑上的主引導記錄.啟動時,引導裝入程序會等待 5 秒的時間
讓你按SHIFT鍵.如果未按,則上述提及的第一核心映象(vmlinuz-2.4.3),將被啟動.如果按下了SHIFT鍵則引導裝入程序就會問你要啟動哪一個映象. 萬一你忘了該選擇啟動哪個映象, 按[TAB]就會有個菜單給你選擇.你在這時可以選定或者啟動這個全新的內核,或者啟動一個原來可靠的內核(vmlinuz-2.2.19),或者啟動一個不同的操作系統.

由上可見,一個配置文件以一系列的全局選項開始),隨之是不同映象選項的描述.在映象描述中的選項
將會覆蓋全局選項所設定的內容.

全局選項部分


boot=boot-device

設定包含引導扇區的設備的名稱(如一個硬碟的分區).如果未指定該關鍵字引導扇區將從當前作為根文件系統安裝的設備中讀取(或者可能也會寫入).

compact

試圖將相鄰扇區的多次讀取請求合併成一次讀取請求.這樣就大幅度地減少了讀取時間,並使系統描述(MAP)更小.在從軟碟機進行讀取時尤其要使用 compact 選項.

default=name

使用特別指定的映象作為默認的啟動映象.如果未設置 defaul 選項,則將使用在該配置文件中最早出現的那個映象作為啟動映象.


disc=device-name

定義特定硬碟的非標準參數.其對於定義 BIOS= 參數尤其有用.若你的硬碟的 BIOS 數據是 0x80 ,0x81(十六進位)等等,將無法判斷哪一塊 Linux 磁碟與哪一塊 BIOS 磁碟相對應(這決定於 BIOS 的設置


和 BIOS 的類型).因此若你採用的是非一般的安裝,那你就需要說明 LINUX 磁碟和 BIOS 磁碟間的對應關
系.比如:


map=map-file

定位磁碟描述(MAP)文件.若未指定 map 選項,就會使用 /boot/map 文件.

message=message-file

指定一個含有在運行啟動提示符前顯示的信息的文件.在顯示出 LILO 后等待按鍵的時間裡不會有信息
顯示.在信息中,用FF字元([Ctrl L])清空本地顯示器.信息文件的大小限制在65535位元組以內.如果信息文件被改動或取消則必須重建磁碟描述(Map)文件.


prompt

不等待任何的按鍵事件發生就直接進入啟動提示符模式.如設定了 promp選項而沒設定 imeout 選項,則不能自行啟動.


timeout=tsecs

為鍵盤輸入設定一個超時選項(以10分之一秒為單位).若在指定的時間內沒有按鍵則第一個映象就會被自動啟動.同樣,如過用戶停頓過長則密碼輸入就會被取消.默認的超時值是無限.



另外,內核配置參數 append,ramdisk,read-only,read-write,root以及vga都可在全局選項中被設定.如果在相應的核心映象的配置欄中沒對其加以指定,該設定值其就會被用做默認的預設值.

單一映象部分

一個單一映象或者以一行
image=pathname
開始(以提示含有一個LINUX內核的啟動映象的文件或設備),或以一行
other=pathname
開始以提示啟動其他獨立的系統.


label=name

引導裝入程序使用每個映像說明的主文件名(不包含路徑)來標識該映像.通過設定變數label可使用不同的名稱.

alias=name

通過指定一個別名可對同一個目錄使用第二名稱.

password=password

用密碼保護映像.

restricted

若是在命令行被指定各參數則只在啟動映像使需要輸入密碼.



內核選項部分

如果被啟動的映像是一個LINUX內核,則可以將命令行參數傳送到該內核.

append=string

將指定的各選項增加到傳送於內核的參數行.其典型的運用於指定不能完全自檢或徹查對其有危害的硬碟
的參數.比如:

append="hd=64,32,202"


ramdisk=size

該選項指定了任選RAM磁碟的大小.0 表示不應創立任何RAM磁碟.若不指定該參數,則使用在根文件系統中建立的RAM磁碟大小.

read-only

採用read-only 選項時,系統會把根分區掛接為只讀方式,推薦採用這個選項, fsck 程序要求文件系統只讀.但不用擔心你的根分區會不能寫入了,相反,系統一旦啟動就會把根分區掛接為讀寫方式.

read-write

其指定根文件系統應以可讀寫方式裝載.

root=root-device

該參數指定應作為根文件系統裝載的設備.如果目前使用的是指定的名稱,則根驅動器就設在根文件系統目前所在的設備上.如果根設備被 -r 參數所修改,則使用相應的設備.若未指定 oot 參數,則使用包含核心映象的根設備設置(該設置是編譯內核時在內核的 Makefile 文件中用 ROOT_DEV 變數設定的,並稍後可用 rdev(8)程序修改)

vga=mode

其指定在啟動時應選擇的 VGA 文本模式. 下列數值可被識別 (忽略大小寫):

normal:選擇普通 80x25 文本模式.

extent(或ext):選擇 80x50 文本模式.

ask:停止並要求用戶的輸入(在啟動時)

:使用相應的文本模式.在啟動時用vga=ask選項或按[Enter]都可獲得一個可用模式的列表.

若未指定該參數,則使用在核心映像中獲得的 VGA 文本環境.(該設置是編譯內核時在內核的 makefile文件中用 SVGA_MODE 變數設定的)



LILO 也可以讓你手工在LILO 提示符下傳遞這些參數.例如:

LILO: linux single

就是告訴Linux 啟動Linux 進入單用戶模式.在引導區損壞時,可以從軟盤啟動,然後指定硬碟的根來修復硬碟引導扇區.

LILO: linux root=/dev/hda3


LILO 引導其他類型的操作系統和引導Linux 一樣配置,但是更加簡單:

other = /dev/hda3
label = dos
table = /dev/hda

other 指明操作系統所在的分區,同樣的和Linux 下的image 一樣也需要給定一個標籤(label),table 選項指向包含分區表的設備,這個選項必不可少,LILO 會從這個這個分區表尋找對應的分區信息,然後把他傳遞給要啟動的操作系統.

對lilo.conf 的任何改變都要求重新運行 /sbin/lilo ,保證最新的改變能寫入分區.
另外,如果你升級內核或者重構了 initrd 映像,也需要重新運行 /sbin/lilo.

運行/sbin/lilo 后,可以看到如下信息:

Added linux *
Added dos
表示各種映像已經寫入分區,帶有 * 的分區是目前的預設引導分區.
可以用 -D 參數改變預設引導分區:

/sbin/lilo -D dos
Added linux
Added windows *
可以看到預設分區已經成為 windows了.

install=boot-file

將指定的文件作為新的引導扇區來安裝.若未設置 install 選項,則將boot/boot.b作為默認預設值使用.

linear

產生線性扇區地址而非「扇區/磁頭/柱面」地址.線性地址不依賴於磁碟的分區結構,且在運行時被翻譯.注意如果使了linear選項則可能使啟動盤不能被移植,這是BIOS中用於決定磁碟分區結構的服務對軟盤的作用不穩定.在對大硬碟使用linear選項時,由於3D扇區地址在啟動前是未知的,故 /sbin/lilo 可能會產生對不可訪問的磁碟區域的一個參考.



lock

允許自動記錄引導命令行,作為以後啟動的默認預設值.這樣,在手工取消之前lilo會鎖定一個選項.


loader=chain-loader


該參數指定了將使用的連鎖裝入程序.使用默認預設/boot/chain.b.如果是從其他設備而非第一硬碟或軟盤啟動則必須指定連鎖裝入程序.

三,關於lilo的問題


<一>、先裝了Windows,再裝Linux時,不能安裝LILO.這是大多數Linux新手的問題;


有些BIOS不能識別大於8.4G的硬碟,舊的LILO不能識別位置大於1024柱面的系統內核(kenerl).因此可能的問題是:LILO被裝入MBR,而為Linux準備的硬碟分區遠在1024柱面之外,因此Linux不能引導;LILO被裝入Linux的root分區(根分區),而它恰好在8.4G之外,又掛了!

解決方案:

也許你已經安裝了Linux,不要delete它,改改還能用!好,現在開始:

1. 用PartitionMagic5.0在第一個硬碟的開始分出個10M的ext2分區,格式化.最好把為Linux準備的分區也一同準備好,省得以後麻煩.

2. 用Loadlin或Linux的boot和rescue盤引導系統.mount那個10M的分區--/dev/hda1,假設我使用boot和rescue盤,mount到/mnt/tmp.把/boot/*和內核映象文件拷貝到/dev/hda1相同的目錄下,編輯/etc/lilo.conf,在所有的目錄前加上/dev/hda1的mount路徑,並且將LILO安裝到/dev/hda1.

把lilo.conf中的
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg
map= /boot/map
image = /boot/vmlinuz-2.2.13

修改為
boot = /dev/hda1
install= /mnt/tmp/boot/boot.b
message = /mnt/tmp/boot/bootmsg
map = /mnt/tmp/boot/map
image = /mnt/tmp/boot/vmlinuz-2.2.13

調用lilo命令,重新安裝LILO.重起系統,就完了.
記住,要卸載Linux,可以用DOS下的fdisk /mbr清除MBR中的LILO.


<二>、多重引導NT、9x和Linux,並且想要比LILO更有好的界面,Linux NT-Loader-mini-HOWTO中有詳細的介紹;




主要的問題是如何將Linux的引導記錄寫入bootsect.???文件,這裡假設你已經成功地安裝好Windows9x與NT了.

(這裡假設Linux安裝於第一個邏輯分區,在Linux下為/dev/hda5,Windows9x安裝於第一個主分區,在Linux下為/dev/hda1,WindowsNT安裝於第二個主分區,在Linux下為/dev/hda2.)

解決方案:

用Loadlin或Linux的boot和rescue盤(指BluePoint光碟的啟動選項,RedHat里好像沒有)引導Linux系統.(loadlin比較好,rescue盤上可能沒有mtools,只能mount cp umount)用一下幾句命令創建該文件:
dd if=/dev/hda5 of=/root/bootsect.lix bs=512 count=1
插入軟盤,
mcopy /root/bootsect.lix a:
重新引導系統,進入DOS會快一些看到你的成果,進入ntldr所在硬碟分區的根目錄,或者說安裝WindowsNT前可引導的硬碟分區的根目錄(這裡是Windows9x).拷貝軟盤上的bootsect.lix文件.去除boot.ini的只讀、隱藏屬性.在添加c:ootsect.lix="Go to Linux".存檔退出,添加boot.ini的只讀、隱藏屬性.重新引導系統,再試試看!注意在對Linux內核的作任何修改後,都必須重作以上步驟,才能正確引導Linux系統.

<三>、安裝多餘一個的Linux系統;
主要的問題還是如果多個Linux的LILO或根分區不能被BIOS找到,系統就會掛起!這裡假設BluePoint Linux安裝於第一個邏輯分區,在Linux下為/dev/hda5,RedHat Linux安裝於第二個邏輯分區,在Linux下為/dev/hda6.)

解決方案:

我們就同樣的建個10M的分區.將兩個Linux的引導文件多拷貝到此分區,通常是/boot下的一切,有可能還有/vmlinuz--內核文件,依Linux的發行版本而不同.建議將其分裝入兩個目錄.假設為/bootBlurPoint和/bootRedHat.
編輯lilo.conf文件:

原始
boot = /dev/hda
install= /boot/boot.b
message = /boot/bootmsg


map = /boot/map

image = /boot/vmlinuz-2.2.13
label = linux
root = /dev/hda1



修改為
boot = /dev/hda1
install= /mnt/tmp/bootBluePoint/boot.b
message = /mnt/tmp/bootmsg
map = /mnt/tmp/bootBluePoint/map

image = /mnt/tmp/bootBluePoint/vmlinuz-2.2.13
label = BluePoint
root = /dev/hda5

image = /mnt/tmp/bootRedHat/vmlinuz
label = RedHat
root = /dev/hda6

<四>,從主引導記錄中移走LILO並重存原先的windows MBR

1. c:> fdisk /mbr
2. #/sbin/lilo -u /dev/hda
3. #dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
4. #cat /boot/boot.0300 > /dev/hda

注意:只有你原先安裝windows 95后再安裝Linux時,/boot/boot.0300才是你原先的windows 95 MBR.

<五>,重存LILO到MBR

1. 用安裝軟盤或光碟啟動到boot:

boot: vmlinuz root=/dev/hdXY (如: hda1 )
啟動完成後運行 #/sbin/lilo

2. 用兩張軟盤啟動后:
#mount -t ext2 /dev/hda1 /mnt
#ln -s /mnt/boot boot
#ln -s /mnt/etc/lilo.conf /etc/lilo.conf
#/mnt/sbin/lilo

<六>,拷貝LILO到軟盤

1. /sbin/lilo -b /dev/fd0
2.用Redhat 安裝盤引導到 boot:
boot: vmlinuz root=/dev/hdXY (hdXY 為你的根分區)
update /etc/lilo.conf
root=/dev/fd0
boot=/dev/fd0
再運行:#/sbin/lilo -v

<七>,製作一張Redhat Linux 引導盤

#mkbootdisk --device /dev/fd0 2.2.19

<八>,拷貝內核至軟盤,讓軟盤單獨引導Linux並掛上硬碟上的根文件系統.

#fdformat /dev/fd0H1440
#dd if=/boot/vmlinuz of=/dev/fd0
#rdev /dev/fd0 /dev/hda1

四,lilo的啟動錯誤顯示分析

<1>當LILO裝入它自己的時候,顯示單詞"LILO": 每完成一個特定的過程顯示一個字母.如果LILO在某個地方失敗了,屏幕上就停留幾個字母,以指示錯誤發生的地方.在技術文檔中有更詳細的描述. (注:LILO不是一個程序,而是一組程序) 注意,如果磁碟發生瞬間故障,可能會在第一個字母"L"后插入一些十六進位數字.除非LILO停在那裡並不停地產生錯誤碼流,否則並不說明有嚴重問題.



<2> (<啟動后什麼也不顯示>) LILO一點也沒裝入.LILO可能沒有安裝,或分區沒有被激活.

<3> L <錯誤碼> ... LILO的第一部分已經被裝入並運行了,但它不能裝入第二部分的引導程序.兩位數字的錯誤碼指示問題的類型(請看後面"磁碟錯誤碼"). 這種情況通常是在介質訪問失敗或硬碟幾何參數(CHS, chs)不匹配.
LI LILO的第一階段已經裝入了LILO的第二部分,但是執行它失敗.錯誤的原因是硬碟幾何參數不匹配或
/boot/boot.b被移 動后沒有重 新運行映射(map)安裝程序.

LIL 第二階段已經啟動,但它不能從映射(map)文件讀出描述符表(descriptor table)典型原因是介質
出錯或硬碟幾何參數不匹配.

LIL? LILO的第二部分被裝入到錯誤的地址.典型原因是硬碟幾何參數微妙的不匹配或/boot/boot.b被
移動而沒有運行映射安裝程序.

LIL- 描述符表被破壞了.這可能是/boot/map被移動后沒有運行映射安裝程序或幾何參數不匹配.

LILO LILO的所有部分都被成功地裝入.

1010101010 分區情況已經改變卻沒有重新安裝LILO,據說超頻也會出這種情況.

磁碟錯誤碼:

0x00 "內部錯誤".由LILO扇區讀子程序產生.可能是被破壞的文件,重建map文件試試看.另一個原
因也許是,當使用linear參數時去訪問超出1024的柱面.

0x01 "非法命令".它不該發生,如果它出現了,意味著LILO去訪問BIOS不支持的硬碟.整理這份文檔的時
候,我的一個朋友就遇到了L010101...的錯誤,他把Linux裝在第二個IDE口上(/dev/hdc),加上Disk參數就好了.

0x02 "沒找到地址標記".通常是介質問題,多試幾遍看看.

0x03 "防寫錯".僅在寫操作時出現.

0x04 "扇區未找到".典型的原因是硬碟參數不匹配.



0x06 "激活順序改變".這應該是短暫的錯誤,再試一次.

0x07 "無效的初始化".BIOS沒有適當地初始化硬碟,熱啟動一次或許有幫助.

0x08 "DMA超出限度".這不應當發生,重新啟動.

0x09 "DMA試圖越過64k邊界".這不應當發生,建議忽略COMPACT參數.

0x0C "無效的介質".這不應當發生,重新啟動看看.

0x10 "CRC錯誤".檢測到介質錯誤.建議多啟動幾次,運行map安裝程序,把map文件從壞塊寫到正常的介
質上.
0x11 "ECC矯正成功".讀錯誤發生然後被矯正,但是LILO並不知道這個情況,終止了啟動過程.

0x20 "控制器錯誤".不應該發生.

ox40 "定位失敗".這可能是介質問題,重新啟動試試.

0x80 "磁碟超時".磁碟或驅動器沒有準備好.介質壞了或磁碟沒有轉,如果從軟盤啟動則可能是沒有關門.

0xBB "BIOS錯誤".這不應該發生,如果反覆發生,則考慮移去COMPACT參數或加上/取消LINEAR參數.如果在寫操作過程中發生錯誤,則在錯誤碼前有個前綴"w".儘管寫錯誤並不影響啟動過程,但它們指示一些錯誤,它們暗示系統中存在錯誤,一個好的建議是重新配置LILO成只讀(read-only).


五,忘記密碼?

系統啟動結束后您將看到一個基於控制台的登錄畫面或者基於 XDM 的登錄畫面.以 root 身份登錄,使用您安裝時設定的密碼.如果您忘記了這個密碼,

您可以使用single或者emergency boot選項. 在LILO boot:提示符下敲入linux single以boot進入單用戶模式.在單用戶模式下,您的本地文件系統將被安裝而網路服務將不會被激活.在緊急事務模式下,系統幾乎沒有做任何設置工作,僅僅root根文件系統被安裝,是只讀方式.

進入單用戶模式后,您可以使用passwd改變root的口令.




六,如果lilo 被損壞或者不能啟動時,如何緊急啟動系統?


您可以用光碟或安裝軟盤啟動,出現 boot: 提示符后鍵入:

vmlinuz root=/dev/linuxrootpartition noinitrd

其中,root= 後面填入您的linux root分區的分區號,例如:

vmlinuz root=/dev/hda3 noinitrd

回車之後,即可進入您的linux系統,您可以編輯/etc/lilo.conf 編輯之後,運行 /sbin/lilo 即可完成.


[火星人 ] LILO使用指南已經有604次圍觀

http://coctec.com/docs/linux/show-post-57852.html