關於LiLo--原理篇(轉)
關於LiLo--原理篇(轉)[@more@]1一般的開機引導過程。在PC機上,最初的啟動由BIOS完成。當開機自檢結束時(Power-On Self Test,POST),BIOS嘗試讀入軟盤的第一個扇區,把它看作引導扇區。若沒有軟盤,則嘗試讀入硬碟的第一個扇區。新的BIOS可以改變這種次序,先從硬碟啟動。甚至從光碟啟動。由於大多數BIOS不提供SCSI支援,若要從SCSI磁碟啟動,SCSI介面卡要提供他自己的BIOS.如果什麼都找不到,老的BIOS會啟動內建的ROM BASIC,或直接列印"NOROM-BASIC".作業系統的啟動分幾步完成。由於引導扇區比較小,通常它主要任務是讀入第二個loader,第二個loader再讀入第三個loader,直到整個作業系統被完全讀入。DOS 引導區:OFFSET0x000 JMP xx Near jump into the program code0x003 Disk parameters0x03E Program code loading the DOS kernel0x1FE 0xAA55 Magic number for BIOS可見,引導區的結構相對比較簡單。它的長度總是512位元組。以上,磁碟引數只對DOS有意義。重要的是引導區從0開始,以BIOS的magic number 結束。從軟盤啟動比較簡單,因為只有一個引導扇區:第一個扇區。硬碟則困難一些,它被分成很多分割槽。但是,BIOS根本不管分割槽資訊,它象對待軟盤一樣對待硬碟,仍讀入第一個分割槽,叫作:master boot record.(MBR).所以MBR也應該和上面介紹的結構一樣:從0開始,以BIOS的magic number 結束在MBR的最後部分,有分割槽表。如下圖:OFFSET Length0x000 0x1BE code loading and starting the boot sector of the activepartitian0x1BE 0x010 partition10x1CE 0x010 partition20x1DE 0x010 partition30x1EE 0x010 partition40x1FE 0x0012 0xAA55 Disk parameters每個分割槽資訊佔16位元組,結構如下:1 BOOT Boot flag: 0=not active ,0x80 active1 HD Begin:head number2 SEC CYL Begin:sector and cylinder number of boot sector1 SYS System Code:0x83 linux , 0x82 linux swap etc.1 HD End:head number2 SEC CYL End: sector and cylinder number of boot sector4 low byte high byte Relative sector number of start sector4 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 為我們提供了lilo2 LILO:the linux loaderLILO引導扇區包括一個分割槽表的空間,所以,LILO即可以安裝在MBR中,也可以安裝在某個分割槽的引導扇區。LILO擁有DOS引導扇區的所有功能,而且,它還可以引導邏輯扇區和第二硬碟分割槽。LILO還可以和另外的引導者合作(例如:NT loader),這樣,使用者就可以有很多選擇。(注:以下幾個標題,為防止引起歧義,用原文)2.1 LILO started by MS-DOS MBR如果系統至少有一個linux主分割槽,(非交換區,且在第一硬碟上),那麼LILO就可以安裝在這些分割槽中的一個。當 LILO對應分割槽被啟用後,引導過程如下:BIOS 讀入 MBRMBR 讀入 活躍主分割槽: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.bdisktab=disktab使用指定的disktab,預設使用/boot/disktab.disktab儲存了硬碟物理結構資訊。map=map file說明對映檔案的路徑。message=file 指定一個檔案,該檔案的內容將會在LILO引導是被顯示。假如沒有說明該檔案,那麼就只會出現"LILO"。verbose=level說明LILO的除錯級別。從0(不顯示任何資訊)到5(所有的狀態資訊)。backup = backup file以前引導扇區內容的備份檔案。預設使用/boot/boot.device numberforce-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,odd)bits為7或者8。預設為serial=0,2400n8.Ignore-table讓LILO忽略被破壞的分割槽表。fix-table允許LILO將每個分割槽的(sector/head/cylinder)地址轉化為線性地址。通常,分割槽地址從cylinder boudary開始。某些作業系統,會改變這一點。由於LILO只能將它的啟動扇區寫於兩種地址都一致的分割槽上,不正確的3D地址可以用fix-table來糾正。但是,這種糾正不能被保證是永遠的,所以重分割槽以保證對齊cylinderboudary 是最好的選擇。password=password為引導配置設定passwordrestricted放鬆對password的限制。只有使用者想傳附加的啟動引數給核心時才需要passwordoptional允許配置的幾個核心有錯誤的,或者不存在,如果不說明optional,LILO遇到這種情況就會列印一些錯誤資訊然後退出。每個從LILO引導的配置從image行開始。Image = kernelLabel = nameImage包含要引導的核心。Label是給使用者選擇用的。Image行通常指向一個裝置,例如/dev/fd0,可以找到核心的範圍用range來註明。range = rangerange可以用start sector -end sector 或者 start sector + length 表示。例如:image = /dev/fd0label = floppyrange = 1+512以下變數賦值有可能出現:append=string將string作為引導引數傳給核心。例如,硬體引數。literal=string和append查不多。但是,他會沖掉原來的設定。所以不能被全域性說明。ramdisk=size設定RAM disk的大小。read-onlyread-write設定根檔案系統的訪問方式。root=device設定根檔案系統存在的裝置。vga=mode螢幕設定。可能模式為:normal,extended 和ask. 。以下設定是針對別的作業系統的:loader=loader說名用來引導作業系統的檔案。預設為 /boot/chain.b . 另外,LILO包含以下的loader:os2_d.b 可以從第二硬碟上引導os/2any_d.b 在引導作業系統之前試圖將兩個硬碟的次序顛倒,從而可以引導第二硬碟上的os.table=device說明一個裝置,該裝置的某個分割槽上存放要引導的os.假如沒有說明table,LILO就不會將該資訊傳給要引導的osunsafe關掉對要引導的os的檢查。只有要從軟盤引導時,才使用該設定。沒有該設定,每次map installer開始執行時,引導盤都要插入軟碟機。The disktab filedisktab檔案包含LILO要引導的裝置的物理結構資訊。通常,這些資訊可以從裝置驅動程式獲取。所以,只有這種方法不行時才會用到disktab 檔案。在此情況下,如果檔案不能用,LILO報告錯誤資訊:geo_query_dev HDIO_GETGEO(dev …)或者HDIO_REQ not supported for your SISI controllerPlease 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,203sector 數目(每個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的第二部分被讀到不正確的地址。原因同LILIL-: descriptor tables有錯。這可能是不正確的物理結構資訊或重灌了map file而沒有執行LILO重新安裝
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945158/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- lilo--實踐篇(FAQ) (轉)
- 關於MSHTML (轉)HTML
- [轉]關於oracle with as用法Oracle
- 關於埠轉發
- 關於網頁字型(轉)網頁
- 玩轉 PHP 網路程式設計之原理篇PHP程式設計
- 機器學習——原理篇機器學習
- (轉)關於 awk 的 pattern(模式)模式
- 轉載關於JOIN總結
- 【轉】關於MySQL許可權MySql
- 關於預編譯頭 (轉)編譯
- 關於多執行緒(轉)執行緒
- (轉貼)關於程式和執行緒 (轉)執行緒
- 轉載:深入淺出oracle鎖 釋放鎖---原理篇Oracle
- 關於轉儲Oracle索引資訊的相關命令Oracle索引
- 關於long型別的轉換型別
- 關於OnEraseBkgnd和OnPaint的轉載AI
- 關於sqlite的特殊字元轉義SQLite字元
- 關於VC的編譯模式 (轉)編譯模式
- 關於螢幕程式設計(轉)程式設計
- 救命,關於類轉換問題
- 關於java 的 Classpath全解 (轉)Java
- 關於JDBC用法的練習 (轉)JDBC
- 關於SFV的小知識(轉)
- 關於JAVA的可移植性(轉)Java
- 關於多維程式的思考 (轉)
- 關於 a 標籤跳轉問題
- [轉]轉一個關於優化sql的文章優化SQL
- 實現WEB中的@虛擬域名系統(原理篇) (轉)Web
- 關於基於Form的多檔案上載 (轉)ORM
- 跳錶(SkipList)原理篇
- webpack系列之-原理篇Web
- 面試 (五) : 原理篇-1面試
- (轉)git中關於fetch的使用Git
- 關於遊戲打擊感的帖子[轉]遊戲
- 關於linux oracle自啟動 [轉]LinuxOracle
- 關於SHOW_SPACE()工具的用法(轉)
- 關於日期計算的問題 (轉)