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 為引導配置設置