Lilo使用技術(轉)

post0發表於2007-08-11
Lilo使用技術(轉)[@more@]

LILO是在x86體系下最常用的Linux裝入程式;下面我將使用Lilo代替LILO是因為我不喜歡使用大寫。這篇文章描述了一些典型的關於Lilo 的安裝。作為Lilo使用者的使用指南。我認為例子相當有用,即使你的情況與我的不太相同。我希望這可以幫助你解決問題。由於Lilo本身的文件也是非常好的,如果有興趣,可以/usr/doc/lilo*找到。

---------------------------------------------------

內容列表:

1、介紹

2、背景資訊和普通的安裝

2.1 我將Lilo裝在什麼地方?

2.2 我如何設定我的IDE硬碟驅動器。

2.3 如何在啟動時互動操作

2.4 如果解除安裝Lilo

3、簡單的設定

3.1 如何處理大核心

3.2 另外的資訊源

4、安裝hdc像hda一樣引導啟動,並且使用bios=

5、當BIO不能找到Root分割槽時,使用Lilo

6、當BIO不能訪問巨大磁碟時,如何解決

7、從一張恢復軟盤上啟動

---------------------------------------------------

1、介紹

儘管在/usr/doc/lilo-version下找到的Lilo的文件是非常完整的,但是一些Linux使用者在配置他們的/etc/lilo.conf檔案時依然經歷一些問題。這個文件則是透過描述5個例子來幫助他們:

第一個例子是經典的"Linux 和 其他系統"的共存安裝。

第二個例子是展示瞭如果將Lilo安裝在一個連線為/dev/hdc的硬碟驅動器上,它將作為/dev/hda啟動。

這些過程通常在你安裝了一個新的核心程式後都要經歷。當你的BIOS足夠新的情況下,它也會告訴你如果從SCSI磁碟上啟動。

第三個例子告訴你如果在BIOS不能訪問root分割槽時如何引導Linux系統。

第四個示例是用來告訴你如何訪問容量巨大的磁碟,這是在BIOS和DOS都不能訪問的情況下。

最後一個示例是告訴你如果恢復一個損壞的磁碟,如果是由於安裝了另一個作業系統而損壞的。

2、背景資訊和普通安裝

當Lilo啟動了系統,它使用BIOS呼叫從磁碟上裝入Linux核心(IDE驅動器,軟盤或其它一些)。這樣的話,核心就必須存在於某些介質的某個地方,它可以被bios訪問。

在啟動時,Lilo沒有能力讀取檔案系統的資料,以及在你寫入/etc/lilo.conf檔案中的任何的路徑名。安裝的時候,程式建立了什麼扇區由什麼檔案使用的表,從而引導系統。所有的這些檔案必須在一個分割槽,它可以被BIOS訪問(這些檔案一般情況下定位在/boot目錄下,這就意味著只有你的 Linux系統的root分割槽需要透過BIOS來訪問。)

另外的一個基於BIOS的問題就是你需要在每次修改了Lilo設定以後,重新安裝裝入程式(i.e.你需要呼叫/sbin/lilo)。當你重新編譯你的核心並且覆蓋你舊的映像時,你必須重灌Lilo。

2.1.我將Lilo裝在什麼地方?

運算子boot=在/etc/lilo.conf檔案中告訴Lilo在什麼地方安裝了它的主引導器。一般情況下,你可以指定主開機記錄(/dev/hda)或你的Linux安裝的root分割槽(通常是/dev/hda1或/dev/hda2)。

如果你有另一個作業系統安裝在你的硬碟上的話,你最好將Lilo安裝在root分割槽上而不是MBR分割槽上。因此,你必須將這個分割槽標記為 "bootable",可以使用fdisk的"a"命令和cfdisk的"b"。如果你不覆蓋主引導扇區,你將發現如果必要,可以輕易地卸下Linux和 Lilo。

2.2. 如何設定我的IDE硬碟?

我個人不使用BIOS中的LBA和LARGE的設定(但是我執行Linux);在PC世界中,這是設計中的一個非常討厭的約束。

這就要求核心存放在第一個1024柱面之中,但是在你為你的硬碟分割槽並且將root分割槽作地很小時這並不是一個問題。

如果你的硬碟已經有了另一個作業系統,請不要修改BIOS的設定,否則舊的系統將不會工作。最近的Lilo的版本都能處理LBA和LARGE的磁碟設定。

注意在/etc/lilo.conf中的"linear"關鍵字可以處理一些問題。這個關鍵字使得Lilo使用線性的扇區編址而代替扇區/磁頭/柱面的定址方式。轉換成3維的地址的方式雖然延遲了執行的時間,但是卻解決了這個磁碟定址的幾何問題。

如果你有不只一個硬碟,並且只用於Linux而且不參與啟動過程,你可以告訴BIOS,它們沒有被安裝。你的系統將會較快地啟動並且Linux將立刻地自動檢測所有的硬碟。我經常在自己的計算機上切換硬碟,但不是透過BIOS的設定。

2.3 如何在啟動時互動操作

當你看見Lilo提示符時,你可以敲擊鍵來檢視可以選擇的專案。如果Lilo沒有被設定成可互動的,在"LILO"資訊出現前,按下鍵。

如果你選擇啟動一個Linux核心,在你可以在你選擇的系統名稱後加入命令列引數。核心接受許多命令列引數。所以的這些引數在“BootPrompt-HOWTO”中可以找到。一些命令列是非常重要的,所以這裡不得不提一下:

root=:你可以告訴Linux核心t掛起一個不同的分割槽作為root分割槽。比如,我的系統有一個小分割槽,安裝了一個最小化的Linux,並且我沒有能力在錯誤地損壞了root分割槽之後再啟動系統。

init=:1.3.43以後的Linux核心能夠執行另一種命令,而代替/sbin/init,就是在命令列指定。如果你在啟動時遇到了問題,你可以透過指定init=/bin/sh來訪問一個裸系統(當你使用最喜歡的shell的提示符下,你需要掛起你的磁碟:"mount -w -n -o remount /: mount -a "並且記住在關機前"umount -a"。

一個數:在核心的命令列中指定一個數,你的操作將會進入一個特別的執行級別(預設值透過是3或2,根據你選擇的釋出版本的不同)。建議看一個init的文件。

2.4 我如何解除安裝Lilo?

當Lilo覆蓋了一個啟動扇區,它儲存了一個備份在/boot/boot.xxyy,xxyy是裝置的主與次的號碼,是用十六進位制的。你可以看一看你的磁碟或分割槽的主次號碼:"ls -l /dev/device"。例如,在/dev/hda上的第一個扇區(主號3,次號0)將被存在/boot/boot.0300,安裝在/dev/fd0 上的Lilo建立/boot/boot.0200,安裝在/dev/sdb3(主號8,次號19)建立/boot/boot.0813。注意Lilo在已經有一個備份的情況下將不會建立檔案,所以當你重新安裝Lilo後(比如,在重新編譯核心之後)你不需要但心。備份在/boot/中的檔案總是在裝入 Lilo之前將當前環境記錄下來的。

如果你需要解除安裝Lilo(比如,由於某些不幸的理由,你需要解除安裝Linux),你只需要將原來的啟動扇區恢復一下就可以了。如果Lilo被安裝在 /dev/hda,只要輸入"dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1"(我個人只是輸入"cat /boot/boot.0300>/dev/hda",但這是不安全的,這也能重灌原先的啟動扇區,你也可以在此期間修改了它。這個命令比在dos 狀態正的"fisk/mbr",容易得多了:它允許你不需要啟動除Linux以外的任何系統就可以乾淨地把Linux從磁碟上清楚。在刪除了Lilo之後,記住需要執行Linux的fdisk來除去每一個Linux分割槽(dos的fdisk有時不靈)。

如果你將Lilo安裝到你的root分割槽上(比如/dev/hda2),沒有什麼其它的特別需要做。只要執行Linux的fdisk來刪除Linux分割槽。你必須將Dos分割槽設定成可啟動的。

3、簡單的設定

大多數Lilo安裝過程都使用一個設定檔案:

boot = /dev/hda # 或者你的root分割槽

delay = 10 # 啟動時延遲多少時間,以秒記

vga = 0 # 可選取。使用vag=1設定成80x50

#linear # 嘗試"linear",由於以上提到的磁碟定址問題。

image = /boot/vmlinux # 你的zImage檔案

root = /dev/hda1 # 你的root分割槽

label = Linux # 標誌

read-only # 將root掛起,並只讀

other = /dev/hda4 # 你的dos分割槽y

table = /dev/hda # 當前的分割槽表

label = dos # 標誌

如果需要,你可以有好幾個"image"和"other"的選項。有幾個核心的images在lilo.conf檔案中並非不正常,至少對於經常開發核心的人來講。

3.1.如果處理大核心

如果你編譯一個"zImage"核心並且它大得超過512K,你需要建立一個“大核心”來代替它,使用:make bzImage 。啟動一個大的核心映像不需要指定其它特別的需要,但最好使用一個新版本的Lilo。如果你的安裝過程是舊的,你必須升級你的Lilo程式包。

3.2 另外的資訊源

除了Lilo的文件,這裡有許多mini-howto可以幫助你。這些都就做:“Linux+foobarOS”,這些當中,都是講一些關於其它系統與Linux共存的內容。

4、安裝hdc像hda一樣引導啟動,並且使用bios=

Lilo允許從一個磁碟上對映核心映像檔案,並指定BIOS從另一個磁碟上呼叫它。比如,經常在一個磁碟上安裝Linux,並將其連線為hdc(第二控制器的主盤)這樣將另一臺計算機上的主IDE控制器作為一個獨立的系統啟動。我將安裝軟盤複製到一個小分割槽上,所以我可以在虛擬控制檯上執行並安裝hdc。這個檔案可能是這樣的:

# This file must be used from a system running off /dev/hdc

boot = /dev/hdc # 覆蓋hdc的MBR

disk = /dev/hdc # 告之hdc是什麼:

bios = 0x80 # bios將其視為快速驅動器

delay = 0

vga = 0

image = /boot/vmlinux # 這是在/dev/hdc1上

root = /dev/hda1 # 但是當啟動時它就在hda1

label = Linux

read-only

這個配置檔案必須透過Lilo讀出的/dev/hdc1而被讀取。Lilo的映像寫入啟動扇區(/dev/hdc)時涉及在/boot(當前安裝的作為hdc)的這個檔案;當這個磁碟被作為單獨的系統啟動時,這個檔案將在hda之後被訪問。

我呼叫這個配置檔案/mnt/etc/lilo.conf.hdc(/mnt是由於hdc在安裝的過程中被掛起。我透過呼叫"cd/mnt; chroot.sbin/lilo -C /etc/lilo.conf"安裝Lilo。如果你覺得這非常神奇,請查閱chroot的手冊。

在lilo.conf中的"bios="運算子被用來告訴Lilo,BIOS把你的裝置認作什麼。BIOS透過一個數呼叫定義好的軟盤和硬碟:0x00和 0x01是軟盤驅動器,0x80和以下這些數是硬碟控制器(舊的BIOS只能訪問兩個硬碟)。bios=0x80的意思是,使用BIOS中的0x80作為 /dev/hdc。

這個運算子可以非常簡單地在其它情況下使用,比如,當你的BIOS從SCSI磁碟啟動,而不是IDE裝置。當IDE和SCSI裝置共存時,Lilo不能確定是否0x80指出了其中的一個,因為使用者可以在BIOS選擇選單裡選擇它,並且BIOS在執行Linux時不能被訪問。

預設情況下,Lilo假定IDE磁碟被BIOS對映成第一個,但是這可以透過lilo.conf中指令:

disk = /dev/sda

bios = 0x80

而改變。

5、當BIO不能找到Root分割槽時,使用Lilo

我有兩個IDE磁碟,和一個SCSI磁碟。而SCSI裝置不能被BIOS看見。Linux引導器,Lilo,使用BIOS呼叫,只能看見BIOS可以看見的。我的BIOS只能從A: C:啟動,我的root檔案系統是在SCSI磁碟上的分割槽上的。

解決的方法需要核心,映象檔案,和在第一個IDE驅動器上的Linux分割槽中的裝入程式。注意並不一定需要將你的kernel放在你的root分割槽上。

在我的第一IDE上的第二個分割槽(/dev/hda2,Linux用來啟動系統的分割槽)被掛起在/u2。這裡是我使用的lilo.conf

# 將Lilo裝在第一個IDE的MBR上

boot = /dev/hda

# /sbin/lilo (the installer) 從以下檔案複製Lilo的啟動記錄到MBR

install = /u2/etc/lilo/boot.b

#

# 我寫了一個詳細的啟動選單。

message = /u2/etc/lilo/message

#Lilo將建立以下檔案。它告訴啟動程式哪裡是核心的塊。

map = /u2/etc/lilo/map

compact

prompt

# 等10秒

timeout = 100

# 核心被存放在BIOS可以看見的地方:

# cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1

image = /u2/z1.2.1

label = 1.2.1

# Lilo 告訴核心掛起第一個SCSI分割槽作為root。BIOS不能看見它。

root = /dev/sda1

#這個分割槽將被檢查並且透過/etc/rc.d/rc.S被重新掛起

read-only

# 另一個核心

image = /u2/z1.0.9

label = 1.0.9

root = /dev/sda1

read-only

#DOS分割槽

other = /dev/hda1

loader=/u2/etc/lilo/chain.b

label = dos

alias = m

6、當BIO不能訪問巨大磁碟時,如何解決

在我的辦公室裡的系統有一個1GB的IDE驅器。BIOS只能看見其中的504MB。(這裡MB是指2**10位元組,而不是10**6位元組。)所以我有在一個350MB/dev/hda1 並且我的Linux的root在一個120MB的分割槽上/dev/hda2 的分割槽上有一個MS-DOS。

當驅動器被重新整理後,MS-DOS不能被正常安裝了。Novell DOS 7也有這個問題。

所以我使用Linux的fdisk做個分割槽表。MSDOS-6.2拒絕將其自己安裝到/dev/hda1下。它可能會顯示出:

“this release of MS-DOS is for new installations.

Your computer already has MS-DOS so you need to get an upgrade release from your dealer.”

所以我再一次執行Linux的fdisk並且將分割槽1從表中刪除。這樣就保證了MS-DOS 6.2可以精確地建立相同於剛才我已經刪除的分割槽1,並且正常安裝。MS-DOS 6.2在這個驅動器的寫上了MBR,但它不能啟動。

所幸我有一張有Slackware核心的軟盤(由Slackware的安裝程式做的),所以我啟動了Linux並且由Lilo覆蓋了MS-DOS的MBR。這個工作,這是我使用的lilo.conf檔案。

boot = /dev/hda

map = /lilo-map

delay = 100

ramdisk = 0 # 在Slackware核心中關閉記憶體盤。

timeout = 100

prompt

disk = /dev/hda # BIOS只能看見500MB

bios = 0x80 # 指定第一個IDE

sectors = 63 # 你的扇區數(從你的磁碟說明書上找)

heads = 16

cylinders = 2100

image = /vmlinuz

append = "hd=2100,16,63"

root = /dev/hda2

label = linux

read-only

vga = extended

other = /dev/hda1

label = msdos

table = /dev/hda

loader = /boot/chain.b

在我安裝了這些系統之後,我檢查到這些分割槽包括zImage,boot.b,map,chain.b並且資訊檔案在沒有"stackered或 doublespaced.”時,可以使用msdos檔案系統,所以我可以作一個在/dev/hda1上的500MB的DOS分割槽。

7、從一張恢復軟盤上啟動

接下來,我在辦公室的機器上安裝Windows-95。它也損壞了我的Lilo MBR,但是它將我的Linux分割槽分開了。從軟盤上引導核心花費了很長時間,所以我使一個可工作的Lilo安放在軟盤上,它可以從IDE上啟動我的核心。我使用這個lilo軟盤:

fdformat /dev/fd0H1440 # lay tracks on virgin diskette

mkfs -t minix /dev/fd0 1440 # make file system of type minix

mount /dev/fd0 /mnt # mount in the standard tmp mount point

cp -p /boot/chain.b /mnt # copy the chain loader over

lilo -C /etc/lilo.flop # install Lilo and the map on the diskette.

umount /mnt

注意,當你執行這個安裝過程時,軟盤必須被掛起,所以Lilo可能寫入它的map檔案。這個檔案是/etc/lilo.flop:

# Makes a floppy that can boot kernels from HD.

boot = /dev/fd0

map = /mnt/lilo-map

delay = 100

ramdisk = 0

timeout = 100

prompt

disk = /dev/hda # 1 GB 的硬碟, BIOS只能見到500 MB.

bios=0x80

sectors = 63

heads = 16

cylinders = 2100

image = /vmlinuz

append = "hd=2100,16,63"

root = /dev/hda2

label = linux

read-only

vga = extended

other = /dev/hda1

label = msdos

table = /dev/hda

loader = /mnt/chain.b

需要在辦公室的機器上安裝msdos 6.2,但我不想碰第一個驅動器。我加入了一個SCSI控制器和驅動器,使用Linux的mkdosfs加入一個msdos的檔案系統,並且win95將其作為D:。當然msdos不能從D:啟動。當然如果你有Lilo這不是一個問題。我將以下內容加入lilo.conf:

other = /dev/sda1

label = d6.2

table = /dev/sda

loader = /boot/any_d.b

透過這個修改,msdos 6.2可以執行了,但是它把它認為在C:並且windows-95認為在D

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

相關文章