LINUX LILO若干問題探討 (轉)

worldblog發表於2007-12-07
LINUX LILO若干問題探討 (轉)[@more@]
LILO若干問題探討


  Linux的引導可以採用多種方式,其載入器LILO(Linux Loader)是一個靈活的引導載入,與其他常用的引導載入程式相比,LILO引導方式顯得更具有藝術性,對其深入的理解,將有助於我們方便地處理多重、引導、大及大等諸多棘手的問題。

一、LILO的引導機制

  眾所周知,的最初啟動是由控制的,在對一些(如:記憶體、鍵盤等)初始化之後,它會試圖載入硬碟的主開機記錄(MBR)或的引導扇區。
  MBR可透過兩種方式執行,其一是定位到活動分割槽並載入相應的引導扇區,然後由引導扇區完成該分割槽內的基本的載入;其二是直接從一指定分割槽中載入資訊,並透過它裝入任一分割槽的作業系統,諸如LILO、OS/2 boot loader及Partition Magic等引導載入程式都可以成這種方式。
  軟盤的引導扇區相當於硬碟活動分割槽的引導扇區,它通常用於裝入軟盤上的作業系統。
  由此可見,只要把LILO在MBR、活動分割槽或者引導軟盤上,就能接管計算機的控制權,然後由LILO完成後繼的引導過程。LILO中建有一個引導表地址編碼,藉此它的載入程式就能定位到Linux的核心,這種地址編碼既可以按照柱面/磁頭/扇區(CHS),又可以採用LBA的線性塊號模式,因此,即使對某些控制程式LILO也能運轉良好。當LILO定位到配置檔案後,經過預引導過程,就顯示提示符:
  LILO boot:
  此時,系統允許選擇引導不同的作業系統或者不同的核心配置,按Tab鍵顯示可選項列表,然後輸入可選項或者直接回車選擇預設配置,如果選擇了引導Linux,還可以直接傳遞引數到系統核心。和其他系統的引導載入程式相比,LILO具有更大的靈活性,其引導方式也更豐富多彩。
  ●當LILO被安裝在硬碟的MBR、活動分割槽或引導軟盤上時,作為原載入程式的替身,它能引導任一硬碟任一分割槽上的Linux和其他作業系統;
  ●除了引導扇區,它沒有任何隱含檔案,也不需要使用特定的分割槽,它的配置檔案可以在任何分割槽、甚至是存放在與Linux毫不相干的DOS分割槽的某個子目錄下;
  ●它能引導幾個不同的核心配置,甚至是幾個不同的核心;
  ●它能引導同一機程式上的多個Linux版本;
  ●它能從網路上引導Linux。
  LILO的靈活性使得其配置變得相當複雜,當有多個系統共存時,建議先安裝其他作業系統,最後再裝Linux,這樣,設定LILO對其他系統的引導會相對簡單一些。

二、幾個重要的LILO引導引數

  LILO的引導引數有很多,在此只對一些比較重要的引數作一介紹 。
  1."boot="此引數指明包含引導扇區的裝置名(如:/dev/had),若此項忽略,則從當前的根分割槽中讀取引導扇區。
  2."="此引數告訴核心啟動時以哪個裝置作為根檔案系統使用,其設定值為構造核心時根檔案系統的裝置名,可用的裝置名有:
  (1)/dev/hdaN~/dev/hddN:ST-506相容硬碟,a到d上的N個分割槽
  (2)/dev/sdaN~/dev/sdeN:SCSI相容硬碟,a到e上的N個分割槽
  (3)/dev/xdaN~/dev/xN: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〉(,nfs_options〉)
  4."nfsaddrs="設定網路通訊所需的各種網路介面地址,如無此引數,則核心會試圖用反向地址解析協定(R)或啟動協定(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直接跳到。
  15."risk_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/,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/had #指定包含分割槽表的硬碟
  label=d#用dos為代表名稱
  2.當系統無法自動完成配置時
  系統無法自動完成配置的情況不外乎兩種:
  (1)BIOS不能直接看到Linux的根分割槽;
  (2)BIOS只能讀寫標準硬碟的前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(504 MB)可以定址得到。
  對策:在硬碟的前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的解除安裝

  如果出於某些原因想要從硬碟上刪除Linux,可以從新格式化硬碟。然而LILO仍將保留在那裡,並且每次啟動硬碟時都將試圖引導Linux(甚至所有的檔案被刪除了也是這樣)。這種情況只發生在把LILO寫到了MBR的情況。有兩種刪除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
  在DOS下執行fdisk,並用下列命令清除MBR
  c:fdisk/MBR
  該命令將完全重新整理MBR,去掉LILO。另外可以用Linux的fdisk對Linux分割槽進行破壞。
  關於LILO值得探討的問題還有很多,但只要懂得了其內部機制,對更復雜的實際情況也能較圓滿地解決


閱讀:349次

來源:china-pub

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989154/,如需轉載,請註明出處,否則將追究法律責任。

相關文章