只要把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)??截愜洷P上的bootsect.lix文件。去除boot.ini的只讀、隱藏屬性。在最后添加cootsect.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 即可完成。