歡迎您光臨本站 註冊首頁

lilo--原理篇

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
1一般的開機引導過程.
在PC機上,最初的啟動由BIOS完成.當開機自檢結束時(Power-On Self Test,POST),
BIOS嘗試讀入軟盤的第一個扇區,把它看作引導扇區.若沒有軟盤,則嘗試讀入硬碟
的第一個扇區.新的BIOS可以改變這種次序,先從硬碟啟動.甚至從光碟啟動.由於
大多數BIOS不提供SCSI支持,若要從SCSI磁碟啟動,SCSI適配器要提供他自己的
BIOS.如果什麼都找不到,老的BIOS會啟動內置的ROM BASIC,或直接列印"NO
ROM-BASIC".
操作系統的啟動分幾步完成.由於引導扇區比較小,通常它主要任務是讀入第二
個loader,第二個loader再讀入第三個loader,直到整個操作系統被完全讀入.

DOS 引導區:
OFFSET
0x000 JMP xx Near jump into the program code
0x003 Disk parameters
0x03E Program code loading the DOS kernel
0x1FE 0xAA55 Magic number for BIOS
可見,引導區的結構相對比較簡單.它的長度總是512位元組.以上,磁碟參數
只對DOS有意義.重要的是引導區從0開始,以BIOS的magic number 結束.
從軟盤啟動比較簡單,只有一個引導扇區:第一個扇區.硬碟則困難一些,
它被分成很多分區.但是,BIOS根本不管分區信息,它象對待軟盤一樣對待硬碟,
仍讀入第一個分區,叫作:master boot record.(MBR).
MBR也應該和上面介紹的結構一樣:從0開始,以BIOS的magic number 結束
在MBR的部分,有分區表.如下圖:



OFFSET Length
0x000 0x1BE code loading and starting the boot sector of the active
partitian
0x1BE 0x010 partition1
0x1CE 0x010 partition2
0x1DE 0x010 partition3
0x1EE 0x010 partition4
0x1FE 0x0012 0xAA55 Disk parameters

每個分區信息佔16位元組,結構如下:
1 BOOT Boot flag: 0=not active ,0x80 active
1 HD Begin:head number
2 SEC CYL Begin:sector and cylinder number of boot sector
1 SYS System Code:0x83 linux , 0x82 linux swap etc.
1 HD End:head number
2 SEC CYL End: sector and cylinder number of boot sector
4 low byte high byte Relative sector number of start sector
4 low byte high byte Number of sectors in the partition
硬碟可以有4個分區.這四個分區叫做主分區:primary prititions.假如它
們不夠用,可以設置所謂的擴展分區. 擴展分區包含至少一個邏輯分區.擴展
分區的第一個扇區結構類似MBR,它的分區表的第一表項對應第一個邏輯分區.如果
存在第二個邏輯分區,那麼分區表的第二個表項就包含了一個指針.這個指針指向
第一個邏輯分區後面的一個地址.這個地址包含一個分區表.該分區表的第一表項
對應第二個邏輯分區.這樣就組成一個鏈表,從而擴展分區可以有任意多的邏輯分
區.
每一個主分區和擴展區都包含一個引導扇區.系統只能從這幾個地方之一啟動.


BOOT標誌決定哪個區被引導.
原來,只有主分區,因此,MS-DOS的fdisk和大多數同類工具只能激活主分區..
MBR的代碼要作以下的操作:
1:確定活動分區.
2:使用BIOS,將活躍分區的啟動扇區讀入.
3:跳到啟動扇區的0位置.
MBR的空間足夠完成這些工作.如上所述,每個分區理論上包含一個引導扇區,
,存在的第二個硬碟也包含和第一個類似的結構.MBR完全可以容納一個複雜
的引導程序.即所謂的boot manager,動態的決定活動分區.Linux 為我們提供了lilo

2 LILO:the linux loader
LILO引導扇區包括一個分區表的空間,,LILO即可以安裝在MBR中,也可以安
裝在某個分區的引導扇區.LILO擁有DOS引導扇區的所有功能,,它還可以引導
邏輯扇區和第二硬碟分區.LILO還可以和另外的引導者合作(例如:NT loader),這樣,
用戶就可以有很多選擇.
(注:以下幾個標題,為防止引起歧義,用原文)
2.1 LILO started by MS-DOS MBR
如果系統至少有一個linux主分區,(非交換區,且在第一硬碟上),那麼LILO就可
以安裝在這些分區中的一個.當 LILO對應分區被激活后,引導過程如下:
BIOS 讀入 MBR
MBR 讀入 活躍主分區:LILO所在的分區.
LILO 引導Linux或另外的操作系統.
要引導其它OS且不用LILO很簡單,激活那個分區.Linux分區沒有任何變化,非常安全.



2.2 LILO started by a boot manager
假如用戶不想刪除老的boot manager,或者某個OS LILO不能引導,可以考慮該途徑.
1. 假如boot manager可以引導擴展區,那兒是LILO的好去處.
2. 假如 boot manager 可以引導第二硬碟分區,linux可以裝在第二硬碟上.
3 有些 boot manager 甚至可以引導邏輯分區,那LILO就可以裝在邏輯分區上.
當然,也要注意以下情況:
1 某些操作系統直接改寫MBR,這會將原來的boot manager破壞.
2 重新分區會破壞擴展分區的引導扇區,這是LILO可能要重裝.
當安裝新的系統時,是否要重新安裝(linux)依靠新的boot manager,要麼LILO引
導扇區被註銷,要麼boot manager 為它提供一個引導項.重新分區或分區格式化會將
LILO和linux全部刪除.

2.3 LILO佔據MBR
假如整個linux系統都在第二硬碟上,且第一硬碟沒有擴展分區,那麼,LILO只有裝
在MBR上.這樣,會將老的MBR衝去,,在安裝LILO前,要將老的MBR(包括分區
表)做一個備份.DOS下有很多工具可以完成這個任務.在linux下,這樣備份:

# dd if=/dev/hda of=/backup/MBR bs=512 count=1

寫會使用命令:
# dd if=/backup/MBR of=/dev/hda bs=446 count=1
這樣,原來的MBR就被寫會但不包括分區表.如果分區表也要恢復,那麼bs=512.
注意,這樣,新的分區表會被破壞!

2.4 LILO 文件


與LILO有關的文件通常放在/boot/下,配置文件lilo.conf在/etc/下.包含實際
引導系統信息的映射文件有/sbin/lilo安裝.對於任何LILO安裝,配置文件應該被定
置以適合個人需要.
The configuration file:配置文件
基本上,配置文件是一些變數賦值.每一行包含一個標誌變數或一個變數賦值.
配置文件被特殊的變數賦值分成幾個區,每個區引導一個linux或其它OS.
下面解釋常見的行:

boot = device
說明那一個設備或哪一個分區包含引導扇區.假如沒有給boot賦值,取當前預設值.

compact
激活一種模式,在此模式下,LILO一次向BIOS請求讀入相鄰的幾個分區.這極大的
縮短了裝載時間,特別是從軟盤啟動.

delay=tenths
以10秒為單位,規定LILO在引導第一個引導配置前應等待用戶的時間.若沒有定義,則
直接引導.

Linear
使LILO生成線性地址,而不使用通常的Sector/Head/Cylinder機制.Linux地址機制
可以不依賴磁碟的物理結構.

install = boot sector
使用指定的boot sector寫入引導扇區,預設用/boot/boot.b

disktab=disktab
使用指定的disktab,預設使用/boot/disktab.disktab保存了硬碟物理結構信息.

map=map file
說明映射文件的路徑.



message=file 指
定一個文件,該文件的內容將會在LILO引導是被顯示.假如沒有說明該文件,那麼就
只會出現"LILO".

verbose=level
說明LILO的調試級別.從0(不顯示任何信息)到5(所有的狀態信息).

backup = backup file
以前引導扇區內容的備份文件.預設使用/boot/boot.device number

force-backup=backup file
和backup 相同,當時假如備份文件存在,被覆蓋.

prompt
指定要用戶通過鍵盤選擇要引導的內核.不會預設選擇.

timeout=tenths
設置一個超時值,在此時間內必須有鍵盤輸入,否則用第一個配置.類似,假如超
時,就不能再輸入密碼.一般情況下,該取預設值,無窮大.
註:delay 與 timeout的區別(joe 認為),delay 是"LILO"出現後用戶必須有
輸入的最長時間.timeout 是用戶在按了任意鍵后,系統等待選擇,用戶
兩次擊鍵的最大間隔時間.

serial=port, bps parity bits
設置串口參數.如果LILO會從該文件獲取串口參數的話.如果其中之一無效,
那所有三個參數都無效.Port從四個標準串口選擇一個:0對應COM1 或者
/dev/ttyS0..支持的波特率範圍為:100-9600.所有校驗設置都支持
(n:none,e:even,o:odd)
bits為7或者8.預設為serial=0,2400n8.



Ignore-table
讓LILO忽略被破壞的分區表.

fix-table
允許LILO將每個分區的(sector/head/cylinder)地址轉化為線性地址.通常,
分區地址從cylinder boudary開始.某些操作系統,會改變這一點.由於LILO只能
將它的啟動扇區寫於兩種地址都一致的分區上,不正確的3D地址可以用fix-table
來糾正.但是,這種糾正不能被保證是永遠的,重分區以保證對齊cylinder
boudary 是最好的選擇.

password=password
為引導配置設置password

restricted
放鬆對password的限制.只有用戶想傳附加的啟動參數給內核時才需要password

optional
允許配置的幾個內核有錯誤的,或者不存在,如果不說明optional,LILO遇到這種
情況就會列印一些錯誤信息然後退出.

每個從LILO引導的配置從image行開始.
Image = kernel
Label = name
Image包含要引導的內核.Label是給用戶選擇用的.Image行通常指向一個設備,
例如/dev/fd0,可以找到內核的範圍用range來註明.
range = range
range可以用start sector -end sector 或者 start sector length 表示.例如:
image = /dev/fd0
label = floppy
range = 1 512
以下變數賦值有可能出現:


append=string
將string作為引導參數傳給內核.例如,硬體參數.
literal=string
和append查不多.但是,他會衝掉原來的設置.不能被全局說明.
ramdisk=size
設置RAM disk的大小.
read-only
read-write
設置根文件系統的訪問方式.
root=device
設置根文件系統存在的設備.
vga=mode
屏幕設置.可能模式為:normal,extended 和ask. .
以下設置是針對別的操作系統的:
loader=loader
說名用來引導操作系統的文件.預設為 /boot/chain.b . 另外,LILO包含以
下的loader:
os2_d.b 可以從第二硬碟上引導os/2
any_d.b 在引導操作系統之前試圖將兩個硬碟的次序顛倒,從而可以引導第二硬碟
上的os.
table=device
說明一個設備,該設備的某個分區上存放要引導的os.假如沒有說明table,
LILO就不會將該信息傳給要引導的osunsafe
關掉對要引導的os的檢查.只有要從軟盤引導時,才使用該設置.沒有該設置,
每次map installer開始運行時,引導盤都要插入軟碟機.
The disktab file
disktab文件包含LILO要引導的設備的物理結構信息.通常,這些信息可以從設備驅
動程序獲取.,只有這種方法不行時才會用到disktab 文件.在此情況下,如
果文件不能用,LILO報告錯誤信息:


geo_query_dev HDIO_GETGEO(dev …)
或者
HDIO_REQ not supported for your SISI controller
Please use /boot/disktab
然後,物理結構信息就必須手工地輸入.
# /boot/distab-LILO parameter table
#
#This table contains the geometry parameters for SCSI and
# IDE disks,which can not be recognized automatically
# Entries in this table overwrite recognized parameters!
#
# Dev. BIOS Secs/ Heads/ Cylin - Par.
# num. Code track cyLin. Ders. Offset
(optional)
#0x800 0x80 32 64 202 0 # /dev/sda
各個域含義如下:
0x800
設備號.由主副設備號組成.
設備號.由主副設備號組成.
0x80
設備的BIOS 碼.0x80代碼系統的第一個硬碟.0x81第二個,....
所有同一硬碟上的分區該值相同.
32,64,203
sector 數目(每個track)
heads 數目
cylinders 數目
0
分區的開始.也可以從分區表中讀,可以不說明.

2.5 LILO 啟動信息
在啟動過程中,LILO會顯示'LILO',如果LILO出錯退出,可以根據顯示來判斷系統的
出錯原因.
沒有信息:LILO根本就沒有被讀入,沒安裝LILO,或LILO駐留的分區沒被激活.
Lnumber : LILO的第一部分被讀入並開始執行.但第二部分不能被讀入.後面


的數字錶明出錯原因.這可能是由於硬碟的物理錯誤或不正確的物理結構信息.
LI: LILO的第一部分可以讀入第二部分,第二部分執行時出錯.這可能是不正
確的物理結構信息或重裝了boot.b而沒有運行LILO重新安裝.
LIL:LILO的第二部分啟動起來了,但是不能從map文件讀入descriptor tables.
這說明不正確的物理結構信息或物理錯誤.
LIL?: LILO的第二部分被讀到不正確的地址.原因同LI
LIL-: descriptor tables有錯.這可能是不正確的物理結構信息或重裝了
map file而沒有運行LILO重新安裝.


[火星人 ] lilo--原理篇已經有368次圍觀

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