歡迎您光臨本站 註冊首頁

LILO配置攻略

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
    LILO(Linux Loader)是Linux自帶的一個優秀的引導管理器,使用它可以很方便地引導一台機器上的多個操作系統。與其他常用的引導載入程序相比,LILO引導方式顯得更具有藝術性,對其深入的理解,將有助於我們方便地處理多操作系統、網路引導、大硬碟及大內存等諸多棘手的問題。

  通常我們談到LILO,會涉及到兩個方面——LILO引導程序和LILO安裝命令/sbin/lilo。為了不至於混淆這兩個概念,本文將用LILO表示LILO引導程序,而lilo表示/sbin/lilo。

  一般地,LILO使用一個文本文件/etc/lilo.conf作為其配置文件。lilo讀取lilo.conf,按照其中的參數將特定的LILO寫入系統引導區。任何時候,修改了/etc/lilo.conf,都必須重新運行lilo命令,以保證LILO正常運行。lilo.conf使用的配置參數很多,配置起來也相當複雜。下面以RedHat Linux為例作一些初步探討,RedHat的lilo程序包版本為0.20,別的Linux發行版本可能會有所出入,但不會太大。

  lilo.conf文件中的配置參數分為兩部分,一部分是全局參數,另一部分是引導映像參數。與Linux系統其他的配置文件一樣,「#」號后的一行文字表示註釋。

  一、LILO的全局參數

  全局參數是全程有效的,它可以出現在文件lilo.conf中的任何地方。以下是具體的參數項:

  1.backup=backup-file

  在裝入LILO之前將原先的引導區備份到backup-file,而不是RedHat 預設的/boot/boot.NNNN。也可以備份到一個設備上,如: /dev/null。注意:如果原先已有一個同名文件,該參數將被忽略。我們可通過這個備份恢復原先的引導扇區:

  dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1

  恢復原先的MBR。(註:雖然boot.NNNN有512位元組,但只能恢復前446位元組到MBR。)

  2.boot=boot-device

  指定一個用於安裝LILO的設備。通常LILO可安裝在如下幾個地方:

  MBR:第一個硬碟的主引導區, 對應於/dev/hda、/dev/sda等。

  Root:Linux根分區的超級塊(Super block), 對應於/dev/hda1、/dev/hda2、/dev/hda5、/dev/sda1、/dev/sda5等。

  Floppy:LILO安裝在軟盤上,對應於/dev/fd0。

  不指定時,lilo預設安裝在根分區超級塊上。

  3.compact

  該參數用於優化LILO,產生一個更小的「map」文件。如果在軟盤上安裝LILO,強烈推薦使用此參數。

  4.default=name

  指定預設引導的操作系統。如default=dos 表示將label為DOS的系統作為預設引導的操作系統。如不指定該參數,排在lilo.conf中的第一個操作系統將作為預設操作系統。

  5.delay=tsecs

  在沒有指定「prompt」 參數時,LILO將立即引導預設的操作系統,「delay」參數在這之間插入一段延時,單位是1/10秒。

  6.disk=device-name

  為某些非標準硬碟定義參數。其內部還包括有幾個可選的子參數。

  bios=〈bios_device_code〉:  設備號。十六進位數0x80表示第一硬碟;0x81表示第二硬碟,依此類推。

  sectors=〈sectors〉:硬碟扇區數。

  heads=〈heads〉:硬碟磁頭數。

  cylinders=〈cylinders〉:硬碟柱面數。受系統BIOS限制,柱面數必須在1024以內。

  partition=〈partition_device〉:用於物理定位特殊硬碟上的分區,有一個子參數start。

  start=〈partition_offset〉:每一分區的起始扇區。

  例如:

  disk = /dev/sda

  bios=0x80

  #指定SCSI硬碟為第一硬碟

   sectors = 32

   heads = 64

   cylinders=632

  #硬碟參數為632/64/32

  partition=/dev/sda1

  start=2048

  #第一分區起始扇區為2048

  partition = /dev/sda2

  start=204800

  #第二分區起始扇區為204800

   partition = /dev/sda3

    start = 500000

   partition = /dev/sda4

    start = 900000

  當機器上有兩塊硬碟,一塊為SCSI硬碟,另一塊為IDE硬碟時,LILO很有可能無法自動識別它們的主、從順序,這時可進行如下設置:

  disk = /dev/sda

   bios = 0x80

  disk = /dev/hda

   bios = 0x81

  #SCSI硬碟為主硬碟,IDE硬碟為從硬碟

  該參數是為Linux無法識別的硬碟準備的,一般Linux可以正確識別和使用大多數硬碟,除非最壞的情況,否則不用設置它。

  7.force-backup=backup-file

  類似「backup」參數,但是將覆蓋原有的同名文件。

  8.ignore-table

  通知lilo忽略無效的硬碟分區表。

  9.install=boot-sector

  LILO實際上包含有幾個部分,而這幾部分都存放在/boot/boot.b文件中。如果忽略「install」參數,則lilo認為install=/boot/boot.b。

  10.linear

  產生用於替換硬碟sector/head/cylinder地址(硬碟幾何參數)的linear扇區地址。linear地址在運行時產生並且不依賴於硬碟幾何參數。某些SCSI硬碟和一些以LBA方式使用的IDE硬碟可能會需要使用這個參數。注意,在將LILO安裝到軟盤上時不能使用「linear」參數。

  11.lock

  出現LILO提示后立即按最近一次的引導映像啟動計算機。也就是說,當我們在lilo.conf中加入了該參數,然後運行lilo安裝LILO,再重新啟動計算機,這時LILO會提示我們選擇引導哪一種操作系統,這一選擇將被LILO記錄下來,即「鎖定」,下次啟動計算機時,LILO將忽略「delay」、「prompt」等參數及鍵盤輸入而直接跳轉到其「鎖定」的操作系統。

  12.map=map-file

  指定map文件。 沒有本項時預設使用/boot/map,每次執行lilo命令都會產生一個新的map文件。

  13.message=message-file

  該命令用於指定一個包含註釋信息的文件,該文件將在系統列印出字元串「LILO」之前顯示。如果在LILO啟動時想獲取較多的信息,可以編輯一個文件,再使用該命令就可以了。文件中如果包含有ASCII碼為0xFF的字元(Ctrl+L)則表示清屏。注意,文件的大小不能超過65535個位元組。每次文件改變之後,都必須重新運行lilo命令重建map文件,以保證其正常顯示。

  14.optional

  當用於啟動的引導映像不存在時,該參數使lilo忽略它。這對用於測試一個不長期存在的Linux核心是有用的。

  15.password=password

  為LILO設置口令保護,每次重新啟動計算機提示用戶輸入口令。設置了口令后,建議將lilo.conf的文件屬性改為600,以免讓非root用戶看到口令。

  16.prompt

  給出「boot:」提示,強制LILO等待用戶的鍵盤輸入,按下回車鍵則立即引導默認的操作系統,而按下Tab鍵則列印可供選擇的操作系統。當「prompt」被設置而「timeout」沒有被設置時,系統會一直處於等待狀態而不引導任何操作系統。不設置該參數時,LILO不給出「boot:」提示而直接引導默認操作系統,除非用戶按下了Shift、Ctrl、Alt三鍵中的任何一個。大多數情況下,如果你的硬碟上有多個操作系統,建議使用參數,它留給用戶一個選擇的餘地。

  17.restricted

  與「password」聯用,使「password」僅作用於在LILO提示後有命令行輸入的時候。

  18.serial=parameters

  使用串列口控制。這將初始化指定的串口,並將使引導管理器能接受來自串口的輸入。從串口發送一個中斷信號相當於從控制台鍵盤上按下Shift鍵,它同樣會被LILO捕捉到。如果不能保證來自串口的訪問和控制台一樣安全,比方說有一個modem連在串口上,建議為每個引導映像加上口令保護(password)。參數串有如下語法:

  〈port〉[,〈bps〉[〈parity〉[〈bits〉]]]

  〈port〉:數字錶示的串口號,0表示COM1,其餘類推。所有四個串口都可被使用。

  〈bps〉:串口速率,支持110、 150、300、600、1200、2400、4800和 9600 bps,預設值為2400bps。

  〈parity〉:設置串口校驗。一般情況下,LILO忽略奇偶校驗。n表示無校驗,e 表示偶校驗,o 表示奇校驗。

  〈bits〉:字元位數,只能取7或8,預設值是8。當有奇偶校驗時只能取7。

  如果設置了「serial」,即使沒有設置「delay」,系統也會將「delay」項的值自動增加20。

  19.timeout=tsecs

  設置等待鍵盤輸入的時長,單位是0.1秒。超過這段時間沒有輸入則為超時,系統將自動引導預設的操作系統。如果不設置本參數,預設的超時時間長度為無窮大。

  二、引導映像參數

  引導映像參數作用於每一個引導映像區。如果某一引導映像參數(例如:password)與全局參數的定義相抵觸,則以該引導映像參數的定義為準,但僅限於該引導映像區。以下是具體參數項:

  image=pathname

  設置包含Linux核心引導映像的文件或設備。

  other=pathname

  設置包含非Linux操作系統,如DOS、SCO UNIX、Windows 95等系統引導映像的文件或設備。

  range=start-end

  如果「image」參數被設置為一個設備,則Linux核心引導映像的存放範圍必須被設置。

  image = /dev/fd0

  range = 1-512  

  # Linux核心引導映像存放在軟盤上的第一至512扇區

  label=name

  通過此參數來標識當前操作系統,即操作系統名。用戶可通過在LILO提示后輸入「標識」來決定引導哪一個操作系統。

  alias=name

  給當前操作系統起一別名。

  lock

  類似同名全局參數。

  optional

  類似同名全局參數。

  password=password

  類似同名全局參數。

  restricted

  類似同名全局參數。

  以下兩個參數項用於非Linux操作系統:

  loader=chain-loader

  如果要引導第二塊硬碟上的非Linux操作系統或將LILO安裝到軟盤,這個參數是必需的。不指定時,預設值是/boot/chain.b。如啟動第二塊硬碟上的MS-DOS或Windows 95,可定義loader=/boot/any_d.b;對於OS/2,則為loader=/boot/os2_d.b。

  作為一個特殊的功能模塊,any_d.b已不合時宜,在0.20版以後的lilo程序包中已不再包含它並將其功能整合進chain.b,os2_d.b亦有所變動。它們的功能可用如下語句代替。

  例:

   other = /dev/hdb1

     loader = /boot/any_d.b

  替換為:

   other = /dev/hdb1

     map-drive = 0x80

     to = 0x81

     map-drive = 0x81

     to = 0x80

  對於os2_d.b:

   other = /dev/hdb1

     loader = /boot/os2_d.b

  替換為:

   other = /dev/hdb1

   loader = /boot/os2_d.b

   map-drive = 0x80

       to = 0x81

   map-drive = 0x81

     to = 0x80

  map-drive=〈bios_device_code〉

  通知chain.b裝入重映射軟碟機或硬驅的內存駐留驅動程序,使用它可以引導不同硬碟上的不同操作系統,條件只有一個, BIOS必須能訪問硬碟。「map-drive」後跟有變數「TO=〈盤設備號〉」。實際上,「map-drive」起到了「軟」交換兩個軟碟機或硬驅主、從順序的作用,避免了手工接線的麻煩。

  例:交換軟碟機

     map-drive = 0

     to = 1

     map-drive = 1

     to = 0

  交換硬驅(參看loader參數例)

  table=device

  指定包含非Linux系統分區的主設備。舉例來說,如果Windows 95在第一個IDE硬碟的第一個基本分區上,即/dev/hda1上,那麼必須定義table=/dev/hda 。

  三、核心參數

  如果LILO引導的是Linux系統,我們可用下面命令傳遞一些參數給Linux核心。除「literal」之外,它們也可用於全局參數區。

  append=string

  append傳遞一個特殊硬體的參數串string給Linux系統的核心。它常用來配置一些Linux不能正確測試到的硬體設備。例如:

  append = "hd=64,32,202"

  通知Linux核心,硬碟參數為64柱面、32磁頭、202扇區。具體的參數串設置可參看/usr/doc/HOWTO/BootPrompt-HOWTO文件。

  literal=string

  類似於「append」,但它將撤消所有的其它核心參數(比如設置了root設備)。因為「literal」會不分青紅皂白地撤消一些必需的、重要的參數,所以不能將它設置在全局參數區。

  ramdisk=size

  指定RAM盤的大小。size為零時不建立RAM盤。忽略此參數時,RAM盤大小由Linux核心引導映像決定。

  read-only

  通知LILO以只讀方式載入根文件系統。通常我們在檢查根文件系統時需要將根文件系統以只讀方式載入。Linux系統在每次啟動時也會將根文件系統以只讀方式載入,待例行的文件系統檢查后再將其重新載入為讀寫方式。

  read-write

  通知LILO以讀寫方式載入根文件系統。

  root=root-device

  指定被安裝根文件系統硬碟分區設備。

  vga=mode

  指定引導Linux系統時的VGA模式。有以下取值:

  normal:常規80×25文本模式

  extended (or ext): 80×50文本模式

  ask: 引導時詢問用戶使用哪一種VGA模式,這時敲回車鍵將顯示一個可分配的VGA模式表。

  如果不指定VGA模式,系統將預設地使用包含在系統核心裡的VGA模式值。

  四、lilo.conf配置實例

  有了這些基礎知識,我們可以很容易地按照自己的意圖配置LILO。請看一個lilo.conf文件的例子:

  boot=/dev/hda         #將LILO安裝在MBR。LILO作為主引導管理器

  message=/boot/message     #註釋為/boot/message

  compact             #產生一個更小的「map」文件

  map=/boot/map         #指定「map」文件為/boot/map

  install=/boot/boot.b

  password=zhoudi         #設置口令

  vga=normal           #80x25文本模式

  linear             #使用「linear」地址

  prompt             #提示用戶鍵盤輸入

  timeout=50           #超時時長為5秒

  default=dos           #預設引導label為dos的操作系統

  #設定Linux

  image=/boot/vmlinuz-2.0.34-1  

  #設置Linux核心引導映像

   label=linux         #標識為linux

   root=/dev/hda1       #設置根文件系統

   read-only          #LILO以只讀方式載入根文件系統

  #設定MS-DOS或Windows 95

  other=/dev/hda2         #DOS分區為第一個IDE硬碟的第二分區

   label=dos          #標識為dos

   table=/dev/hda       #主設備為第一個IDE硬碟

  #設定SCO UNIX

  注意:SCO分區必須設為活動(active)分區並將LILO安裝在MBR上。

  other=/dev/hda3

   label=sco

   table=/dev/hda

  這個例子中,LILO是作為主引導管理器來管理機器上所有操作系統的。LILO也可作為二級引導管理器,這隻要將「boot」參數改為根分區就可做到。例如:

  boot=/dev/hda1

  以這種方式使用LILO時,Linux根分區必須用DOS或Linux的fdisk程序將其設置為活動分區,並且這種方式只對硬碟主分區(不是擴展或邏輯分區)有效。

  LILO還可以啟動第二個以上的操作系統。在我的機器上有兩塊希捷硬碟,一塊硬碟為8.4GB,另一塊為1.2GB,都以LBA模式接在主IDE口上。8.4GB跳線為主盤,1.2GB跳線為從盤,Linux核心很容易地就將它們辨認出來並能正常使用,1.2GB的硬碟上安裝了MS-DOS 6.22。筆者是這樣設置lilo.conf的:

  disk=/dev/hda

   bios=0x80      

  #由於IDE硬碟存在雙硬碟問題,所以當啟動DOS系統時,會提示「無系統盤或系統盤錯!」,需修改程序如下。

  disk=/dev/hdb

   bios=0x81

  boot=/dev/hda

  map=/boot/map

  install=/boot/boot.b

  linear

  prompt

  timeout=50

  default=dos

  image=/boot/vmlinuz-2.2.11-1

   label=linux

   root=/dev/hda1

   read-only

  other=/dev/hdb1

   label=dos

   map-drive = 0x80

      to = 0x81

      map-drive = 0x81

      to = 0x80

  #交換兩硬碟主、從順序

   table=/dev/hdb

  配置好lilo.conf文件后,在root賬戶下執行lilo命令,新的LILO就被載入系統。上面第一個例子執行結果如下:

  #lilo

  Added linux

  Added dos*      

  Added sco

  (註:帶*號的表示其為預設操作系統)

  五、LILO提示信息

  LILO在運行時會給出一些提示信息,了解它的含義對我們正確配置lilo.conf或查找硬體錯誤是有幫助的。

  當LILO裝入它自己的時候,顯示單詞 「LILO」:每完成一個特定的過程顯示一個字母。如果LILO在某個地方失敗了,屏幕上就停留幾個字母,以指示錯誤發生的地方。

  注意,如果磁碟發生瞬間故障,可能會在第一個字母「L」后插入一些十六進位數字(磁碟錯誤碼)。除非LILO停在那裡並不停地產生錯誤碼流,否則並不說明有嚴重問題。

  沒有提示: LILO沒有安裝或者安裝LILO的分區沒有被激活。

  L〈錯誤碼〉 : LILO的第一部分已經被裝入並運行了,但它不能裝入第二部分的引導程序。兩位數字的錯誤碼指示問題的類型(參見「磁碟錯誤碼」),這種情況通常是在介質訪問失敗或硬碟參數錯誤。

  LI: LILO第一部分正確但是第二部分執行時出錯。這一般是硬碟參數有誤或/boot/boot.b被移動后沒有重新運行map安裝程序。

  LIL: LILO第二部分開始執行,但是不能從「map」文件中讀取描述符表( descriptor table)。 這通常是因介質錯誤或磁碟參數有誤引起的。

  LIL?: LILO在錯誤的地方載入。原因與「LI」大致相同。

  LIL-:描述符表(descriptor table)錯誤。典型原因是硬碟幾何參數微妙的不匹配或/boot/boot.b被移動而沒有運行map安裝程序。

  LILO: LILO執行正確。

  1010101010: 分區情況已經改變卻沒有重新安裝LILO,另外,超頻也可能會出這種情況。

  六、磁碟錯誤碼

  0x00:「內部錯誤」。 由LILO扇區讀取子程序產生。可能是因為被破壞的文件,重建map文件試試看。另一個原因也許是,當使用「linear」參數時去訪問超出1024的柱面。

  0x01:「非法命令」。這意味著LILO訪問了BIOS不支持的硬碟。

  0x02:「沒找到地址標記」。通常是介質問題,多試幾遍看看。

  0x03:「防寫錯」。 僅在寫操作時出現。

  0x04:「扇區未找到」。典型的原因是硬碟參數錯誤。

  0x06:「激活順序改變」。這應該是短暫的錯誤,再試一次。

  0x07:「無效的初始化」。BIOS沒有適當地初始化硬碟,熱啟動一次或許有幫助。

  0x08:「DMA超出限度」。這不應當發生,重新啟動。

  0x09:「DMA試圖越過64kB邊界」。這不應當發生,建議忽略「compact」參數。

  0x0C:「無效的介質」。這不應當發生,重新啟動看看。

  0x10:「CRC錯誤」。檢測到介質錯誤。建議多啟動幾次,運行map安裝程序,把map文件從壞塊寫到正常的介質上。

  0x11:「ECC糾正成功」。讀錯誤發生然後被糾正,但是LILO並不知道這個情況,終止了啟動過程。

  0x20:「控制器錯誤」。一般不應發生。

  0x40:「定位失敗」。這可能是介質問題,重新啟動試試。

  0x80:「磁碟超時」。磁碟或驅動器沒有準備好。介質壞了或磁碟沒有轉,也有可能是從軟盤啟動而沒有關上軟碟機門。

  0xBB:「BIOS錯誤」。一般不應發生,如果反覆發生,可考慮去掉「compact」參數或添加刪除「linear」參數。

  如果在寫操作過程中發生錯誤,則在錯誤碼前有個前綴「w」。儘管寫錯誤並不影響啟動過程,但它們暗示了系統中存在某種錯誤,建議重新配置LILO成只讀格式(read-only)。

  LILO的配置相當複雜,讀者只有在實踐中不斷學習、摸索,勤于思考,才能用好LILO。


[火星人 ] LILO配置攻略已經有493次圍觀

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