深入理解LILO(轉)
深入理解LILO(轉)[@more@]Linux的引導可以採用多種方式,其載入器LILO(Linux Loader)是一個靈活的引導載入程式,與其他常用的引導載入程式相比,LILO引導方式顯得更具有藝術性,對其深入的理解,將有助於我們方便地處理多重系統、網路引導、大硬碟及大記憶體等諸多棘手的問題。 一、LILO的引導機制 眾所周知,計算機的最初啟動是由BIOS控制的,在對一些硬體(如:記憶體、鍵盤等)初始化之後,它會試圖載入硬碟的主開機記錄(MBR)或軟盤的引導扇區。 MBR可透過兩種方式執行,其一是定位到活動分割槽並載入相應的引導扇區,然後由引導扇區完成該分割槽內作業系統的基本元件的載入;其二是直接從一指定分割槽中載入資訊,並透過它裝入任一分割槽的作業系統,諸如LILO、OS/2 boot loader及Partition Magic等引導載入程式都可以配置成這種方式。 軟盤的引導扇區相當於硬碟活動分割槽的引導扇區,它通常用於裝入軟盤上的作業系統。 由此可見,只要把LILO安裝在MBR、活動分割槽或者引導軟盤上,就能接管計算機的控制權,然後由LILO完成後繼的引導過程。LILO中建有一個引導表地址編碼,藉此它的載入程式就能定位到Linux的核心檔案,這種地址編碼既可以按照柱面/磁頭/扇區(CHS)模式,又可以採用LBA的線性塊號模式,因此,即使對某些SCSI控制程式LILO也能運轉良好。 當LILO定位到配置檔案後,經過預引導過程,就顯示提示符: LILO boot: 此時,系統允許選擇引導不同的作業系統或者不同的核心配置,按Tab鍵顯示可選項列表,然後輸入可選項或者直接回車選擇預設配置,如果選擇了引導Linux,還可以直接傳遞引數到系統核心。 和其他系統的引導載入程式相比,LILO具有更大的靈活性,其引導方式也更豐富多彩。 ●當LILO被安裝在硬碟的MBR、活動分割槽或引導軟盤上時,作為原載入程式的替身,它能引導任一硬碟任一分割槽上的Linux和其他作業系統; ●除了引導扇區,它沒有任何隱含檔案,也不需要使用特定的分割槽,它的配置檔案可以在任何分割槽、甚至是存放在與Linux毫不相干的DOS分割槽的某個子目錄下; ●它能引導幾個不同的核心配置,甚至是幾個不同的核心; ●它能引導同一機程式上的多個Linux版本; ●它能從網路上引導Linux。 LILO的靈活性使得其配置變得相當複雜,當有多個系統共存時,建議先安裝其他作業系統,最後再裝Linux,這樣,設定LILO對其他系統的引導會相對簡單一些。 二、幾個重要的LILO引導引數 LILO的引導引數有很多,在此只對一些比較重要的引數作一介紹。 1.“boot=” 此引數指明包含引導扇區的裝置名(如:/dev/had),若此項忽略,則從當前的根分割槽中讀取引導扇區。 2.“root=” 此引數告訴核心啟動時以哪個裝置作為根檔案系統使用,其設定值為構造核心時根檔案系統的裝置名,可用的裝置名有: (1)/dev/hdaN~/dev/hddN:ST-506相容硬碟,a到d上的N個分割槽 (2)/dev/sdaN~/dev/sdeN:SCSI相容硬碟,a到e上的N個分割槽 (3)/dev/xdaN~/dev/xdbN:XT相容硬碟,a到b上的N個分割槽 (4)/dev/fdN:軟盤,A:(N=0)或B:(N=1) (5)/dev/nfs:由網路取得根檔案系統的標誌 3.“nfsroot=” 若需透過NFS提供根檔案系統來引導無盤工作站,此引數為核心指定了網路根檔案系統所在的機程式、目錄及NFS,其格式為:nfsroot= (〈server_ip〉:)〈root_dir〉(,nfserials_options〉) 4.“nfsaddrs=” 設定網路通訊所需的各種網路介面地址,如無此引數,則核心會試圖用反向地址解析協定(RARP)或啟動協定(BOOTP)找出這些引數,其格式為: nfsaddrs=〈客戶端IP〉:〈服務端IP〉:〈閘道器IP〉:〈子網遮蔽〉:〈客戶端名稱〉:〈網路裝置名 〉:〈auto〉 5.“image=” 指定Linux的核心檔案。 6.“delay=” 設定引導第一個映像前的等待時間。 7.“disk=” 此引數為某一特殊的硬碟定義非標準引數。 8.“append=” 為核心傳遞一個可選的引數行,其典型的應用是為不能完全由系統自動識別的硬碟指定引數,如:append = "hd=64,32,202" 9.“label=” 此引數為每個映像指定一個名字,以供引導時選擇。 10.“read-only” 設定以只讀方式掛入根檔案系統,用於檔案系統一致性檢查(fsck)。 11.“install=” 安裝一個指定檔案作為新的引導扇區,預設為/boot/boot.b。 12.“loader=” 說明所使用的鏈載入程式(chain loader),預設為/boot/chain.b,如果不是從首硬碟或軟盤啟動,那麼,此選項必須說明。 13.“table=” 說明包含分割槽表的裝置名,如果此引數忽略,引導載入程式將不能傳遞分割槽資訊到已引導的作業系統。當此引數指向的分割槽表被修改時,必須重新執行/sbin/lilo。 14.“init=” 核心初始化時執行的程式,通常過程為init、getty、rc和sh,版本1.3.43以來的Linux核心能夠執行/sbin/init說明的命令列,若在引導過程中出現問題,則可設定init=/bin/sh直接跳到Shell。 15.“ramdisk_start=” 由於核心不能放在壓縮的記憶體檔案系統映像內,為使核心映像能夠和壓縮的記憶體映像放在一張軟盤內,加入“ramdisk_start=〈offset〉”,這樣核心才能開始執行。 16.“mem=” 此引數的目的之一是為Linux指定使用的記憶體數量:如mem=96MB,目的之二是指定mem=nopentium告訴核心不要使用4MB分頁表。 17.“vga=” 設定顯示模式,如80×50、132×44等。 三、LILO典型配置方法 通常情況下,Linux的安裝程式自身就可以完成LILO的安裝配置,從而較好地解決多重系統的引導問題,如果系統不能自動完成這種配置,則可以透過手工修改配置檔案/etc/lilo.conf來實現不同條件下的引導。 1.當系統能自動完成配置時 對於這種情況只有一個建議:將LILO安裝到Linux分割槽的根上,而不是MBR這個多事地帶。假設當前hda1中裝有DOS/Windows,hda2中安裝了Linux,則/etc/lilo.conf的內容大致如下: boot=/dev/hda2#指定引導位置compact delay=50#延時5秒root=current#根在當前分割槽image=/boot/vmlinuz#指定linux的核心檔案 label=linux#用linux為代表名稱 other=/dev/hda1#其他作業系統所在的分割槽table=/dev/hda#指定包含分割槽表的硬碟label=dos#用dos為代表名稱 2.當系統無法自動完成配置時 系統無法自動完成配置的情況不外乎兩種: (1)BIOS不能直接看到Linux的根分割槽; (2)BIOS只能讀寫標準IDE硬碟的前504MB。 這時,必須遵循一個最基本的原則:建立一個BIOS能存取的較小的Linux分割槽,其中包含核心檔案、對映檔案及鏈載入程式等必要內容,而根則可以是另外一個獨立的分割槽。至於配置上的其他細節,我們透過以下例項來進行說明。 例1:主硬碟為IDE介面,第二硬碟為SCSI介面,根檔案在SCSI上。 對策:在IDE硬碟上劃分一個較小的Linux分割槽(/dev/hda2),其中包含基本檔案,掛接到/u2下,其配置檔案/etc/lilo.conf的主要內容為: boot=/dev/hda#lilo裝在主ide的mbr install=/u2/etc/lilo/boot.b#從boot.b安裝lilo引導記錄map=/u2/etc/lilo/map#安裝程式建立此對映檔案,告訴引導載入程式核心塊的位置compact timeout=50 image=/u2/vmlinuz#核心檔案應事先複製到/u2下label=linux root=/dev/sda1#告訴核心根系統在scsi硬碟上read-only other=/dev/hda1 loader=/u2/etc/lilo/chain.b#指明載入程式label=dos 例2:一個標準的IDE大硬碟需安裝Linux和DOS/Windows。 對於大硬碟問題,很多人只知道低於1024個柱面的限制,而不知為什麼標準的IDE硬碟只能認前504MB。 其實,BIOS的int13呼叫是採用三個位元組的CHS編碼,10位為柱面號,8位為磁頭號,6位為扇區號。可能的柱面號碼是0~1023,可能的磁頭號碼是0~255,而磁軌上可能的扇區號碼是1~63,以這24位最多可以定址8455716864個位元組(7.875GB)。 但不幸的是,標準的IDE介面容許256個扇區/磁軌、65536個柱面及16個磁頭。它自己本身可以存取237= 137438953472(128 GB),但是加上BIOS方面63個扇區與1024個柱面的限制後只剩528482304(504MB)可以定址得到。 對策:在硬碟的前500MB中劃分350MB(/dev/hda1)給DOS,150MB(/dev/hda2)給Linux,在相應的配置檔案中應說明硬碟的引數。 boot=/dev/hda ... ... disk=/dev/hda bios=0x80 sectors=63 heads=16 cylinders=2100 image=/vmlunuz append="hd=2100,16,23" root=/dev/hda2 label=linux 四、LILO的解除安裝 當LILO覆蓋了引導扇區時,它會保留一個引導扇區的備份在/boot/boot.xxyy中,其中xxyy是16進位制的裝置主/次號碼(major/minor numbers),利用命令“ls -l /dev/device”就可獲得硬碟或分割槽的主/次號碼。如果這些備份檔案已經存在,那麼,當你重新安裝LILO或重構核心時,它將不再生成此檔案,這就保證了此備份檔案是最原始的引導扇區。 若要解除安裝LILO,你只需恢復初始的引導扇區就可以了。例如:LILO安裝在/dev/had,對應的備份檔案為/boot/boot.0300,簡單地使用下面的命令即可: dd if=/boot/boot.0300 of=/dev/had bs=446 count=1 當然,若想完全卸掉Linux,必須用Linux的fdisk對Linux分割槽進行破壞,因為DOS的fdisk無法移去非DOS分割槽。 關於LILO值得探討的問題還有很多,但只要懂得了其內部機制,對更復雜的實際情況也能較圓滿地解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945138/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LILO配置指南(轉)
- Lilo使用技術(轉)
- LILO使用指南(下)(轉)
- LILO使用指南(中)(轉)
- LILO使用指南(上)(轉)
- LILO配置指南(整理版) (轉)
- 深入理解HTTP協議(轉)HTTP協議
- LILO的全域性引數(轉)
- lilo--實踐篇(FAQ) (轉)
- 深入理解JavaScirpt中的this(轉)Java
- 關於LiLo--原理篇(轉)
- LILO啟動問題詳解 (轉)
- Slackware LILO 安裝幫助文件(轉)
- 紅旗Linux中LILO的配置(轉)Linux
- LINUX LILO若干問題探討 (轉)Linux
- 深入理解Oracle的並行操作(轉載)Oracle並行
- 深入理解硬碟的 Linux 分割槽(轉)硬碟Linux
- 深入理解IoC(控制反轉)、DI(依賴注入)依賴注入
- 【轉】深入理解JVM--JVM垃圾回收機制JVM
- 深入理解java的抽象類和介面(轉載)Java抽象
- 深入VCL 理解BCB的訊息機制 (一) (轉)
- 深入理解硬連結和軟連結 (轉)
- 深入理解Java物件例項生成的例子!(轉)Java物件
- LINUX-LILO可以裝在軟盤上(轉)Linux
- 深入理解Isolate
- 深入理解HashMapHashMap
- 深入理解TransformORM
- 深入理解KVO
- 深入理解 JVMJVM
- 深入理解 GitGit
- 深入理解AQSAQS
- 深入理解JVMJVM
- 深入理解 TypeScriptTypeScript
- 深入理解JavaScriptCoreJavaScript
- 深入理解MVCMVC
- 深入理解 PWA
- 深入理解margin
- 深入理解ReactReact