歡迎您光臨本站 註冊首頁

解讀LINUX和LILO

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

轉貼:
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〉(,nfs_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/had
#指定包含分區表的硬碟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/had#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/had
  ... ...
  Disk=/dev/had
  bios=0x80
  sectors=63
  heads=16
  cylinders=2100
  image=/vmlinuz
  append="hd=2100,16,23"
  root=/dev/hda2
  label=linux

  四、LILO的卸載

  當LILO覆蓋了引導扇區時,它會保留一個引導扇區的備份在/boot/boot.xxyy中,其中
xyy是16進位的設備主/次號碼
(major/minor numbers),利用命令「ls -l /dev/device」就可
獲得硬碟或分區的主/次號碼。如果這些備份文件已經存在,那麼,當你重新安裝

[火星人 ] 解讀LINUX和LILO已經有20次圍觀

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