系統在經由 BIOS 開機之後,接下來的工作由 BootLoader 接手,所謂 BootLoader 便是載入各種作業系統核心的程式,它會負責找出核心的位置,並讓你的電腦開始載入核心,然後將工作交給作業系統負責。如果您想把 MS Windows 9X/NT/2000/XP 及 Linux 等等全部安裝在同一台電腦上時,便需要多重開機,以載入不同的作業系統,這些工作便是由 BootLoader 負責。

在不同的硬體平台上,也必須使用不同的 BootLoader。這個在規劃如何安裝 Linux 之前也是很重要的工作。


多重開機

在這裡將會提供 4 種多重開機的方法給您做參考:

索引

  1. LILO(推薦)
  2. grub
  3. SPFdisk
  4. MicrosoftWindowsBootManager

另外,由於 BIOS 的限制,這些開機管理程式是否能支援由 1024 以後的磁柱位置開機、或是能否由第二個硬碟開機、是否支援多種作業系統... 等都是評估的重點。


LILO

LILO (Linux Loader) 是 Debian GNU/Linux 所內建的多重開機程式。LILO 幾乎可以在任何狀況之下載入任何作業系統,是目前最佳的多重開機程式之一。

它的設定檔為 /etc/lilo.conf,其選項說明如下:

boot=/dev/hda : 將 LILO 安裝在第一顆 IDE 硬碟的 MBR 中。
boot=/dev/hda# : 將 LILO 安裝在第一顆 IDE 硬碟的第 # 個分割區的開始位置。
prompt : 開機時,自動顯示 LILO 開機選單。
delay=# : 設定開機時的延遲時間。單位為 0.1 秒。
install = /boot/boot.b : 指定開機選單樣式,可指定包括 bmp、compat、menu 及 text。
map=/boot/map : 在安裝 Kernel 時所產生的 map 檔的存放位置。
lba32 : 讓 LILO 支援可以由 1024 磁柱以後開機
root=/dev/hda# : 指定 root 目錄 (/) 所在的磁碟分割區
default=Lable : 預設所使用的開機項目。
append="..." : 指定開機時的 Kernel 選項。
 

 

Linux 開機選項:
image=/boot/vmlinuz : 指定了 Linux Kernel Image 的檔案名稱。
label=Linux : 在開機選單中所顯示的名稱。
root=/dev/hda1 : Root 分割區的位置。
initrd=/boot/initrd.img : 載入 initial ramdisk。
使用 /sbin/mkinitrd /boot/initrd.img initrd.imgx.y.z 來產生這個檔案,
其中x.y.z是 Kernel 的版本。
可以使用 ls /lib/modules/ 來得知系統中有哪些版本的 Kernel。
vga =ask/normal/extended/<mode> : 指定開機後系統操控台 (System Console) 所使用的文字模式。
read-only : 將 root 的檔案系統 mount 為唯讀的。
 
MS Windows / DOS 開機選項:
other =/dev/hda1 : MS Windows / DOS 所安裝的分割區。
label =Windows : 在開機選單中所顯示的名稱。

重新設定 LILO:/sbin/lilo<Enter>,其選項如下:

-v : 在發現錯誤時出現詳細的診細訊息。
-t : 檢查 lilo.conf 的設定是否正確。
-C : 指定其它的設定檔。(預設是/etc/lilo.conf)

修復 LILO:

1. 使用光碟片或碟碟片開機。
2. LILO boot:rescue root=/dev/hda1(使用緊急修復模式啟動 Linux。)
3. (Edit)/etc/lilo.conf(編輯 LILO 設定檔。)
4. /sbin/lilo -t <Enter>(測試 LILO 設定檔中的設定是否正確。)
5. /sbin/lilo -v -v -v <Enter>(重新安裝 LILO。)
6. reboot <Enter>(重新啟動,測試 LILO 是否可以正常運作)

移除LILO:也可以使用 DOS 開機片,開完機後下達 Fdisk /mbr 即可把 LILO 從 MBR 中移除掉。

/sbin/lilo -u

在安裝 Debian GNU/Linux 時,會將原本的 MBR 資料儲存在 /boot/boot.0300 這個檔案中。


多重開機

LILO 的設定檔位於 /etc/lilo.conf,您可以依以下方法來讓 LILO 支援多種作業系統:

# /etc/lilo.conf 
# 支援可以由 1024 磁柱以後開機
lba32
 
# 指定開機裝置。在這裡是寫入 MBR
boot=/dev/hda
 
# 指定 root 目錄 (/) 所在的磁碟分割區
root=/dev/hda1
 
# 指定開機選單樣式
# 可指定包括 bmp、compat、menu 及 text
# install=/boot/boot.b
install=/boot/boot-menu.b
 
# 指定 map 檔案位置
map=/boot/map
 
# 在開機時是否出現開機選單。
# 如果是使用多重開機時還是出現比較好。
# 即使沒有設定,開機時按下 <Ctrl> 一樣會出現開機選單哦!
prompt
 
# 設定等待時間,單位為 0.1 秒
delay=40
 
# 指定 VGA 的文字模式(normal、extended、ask、<mode>)
vga=normal
 
# 指定 Kernel 選項
# 在這裡是將 /dev/hdd 模擬成 SCSI 硬碟,及關閉 frame buffer 的功能
append="hdd=ide-scsi video=vga16:off"
 
# 預設的開機項目。在本例中可為:Linux、Win2K 及 WinME 。
default=Linux
 
# 設定 Linux 的開機項目
image=/vmlinuz
initrd=/initrd.img
label=Linux
read-only
 
# 加入 MS Windows 2000 的開機項目
other=/dev/hda2
label=Win2K
 
# 加入 MS Windows ME 的開機項目
other=/dev/hda3
	label=WinME

修改完畢後,下達 lilo -v -v -v 讓這些設定寫入 MBR 中。就這樣 LILO 就能夠支援從各式各樣的 OS 上開機了。 LILO 可以指定從邏輯分割區、另一顆硬碟、超過 1024 磁柱後的分割區開機,是功能極強大的開機管理程式,推薦使用!因為 LILO 設定太簡單、可以任意從任何磁碟分割區開機,我們在這裡就不用著墨太多了。

 

注意: 雖然 LILO 功能強大,但是 Microsoft Windows ME 的開始磁區還是『絕對』不要位於 1024 磁柱之後!因為在安裝Microsoft Windows ME 時,有報告指出如果它的開始磁區位於 1024 磁柱之後時,它會把開機檔案『強迫』寫入第 1023 磁柱,因而會造成第 1023 磁柱上的資料損毀!不可不慎呢!

 

如果 LILO 開機時直接就載入 Linux 而沒有出現多重開機的畫面,這並不是 LILO 壞掉囉,只要在電腦開機時按下 <Ctrl> 鍵,多重開機的畫面就會出現了。

 

參考資料:

GRUB is a GPLed bootloader intended to unify bootloading across x86 operating systems.

可以讓您載入 Linux, FreeBSD, Windows...etc 且特別的是 GRUB 可以在啟動時認得檔案系統,因此您可以在開機時載入任何在檔案系統上的 kernel。

1.安裝及設定:

[root]# apt-get install grub
[root]# grub-install /dev/hda
[root]# update-grub

2.編輯 grub 的選單,確定 kopt, groot 設定正確。

[root]# vi /boot/grub/menu.lst
若有 windows 也要加入開機選單,請加在 AUTOMAGIC KERNEL LIST 之前或之後,修改完後記得執行 update-grub。#根據自身的經驗,只要修改完存檔即可,不須執行update-grub
例:
title         Windows 95/98/NT/2000
root          (hd0,0)
makeactive     #這個選項我實測過,不用加也可以正常啟動windows
chainloader   +1

3.設定 /etc/kernel-img.conf

加入下列設定:
postinst_hook = /sbin/update-grub
postrm_hook = /sbin/update-grub
do_bootloader = no

此外,grub 也支援[背景圖]。想知道怎麼設定請參考 [GRUB Splash Image Howto] 或是到這裡看此討論串http://moto.debian.org.tw/viewtopic.php?t=1187

自製背景圖簡易範例:

[root]# mkdir /boot/grub/images
[root]# convert -resize 640x480 -colors 14 image.png /boot/grub/images/image.xpm && gzip /boot/grub/images/image.xpm 
[root]# vi /boot/grub/menu.list

SPFDisk

SPFdisk 內有多重開機的功能。使用方法很直觀,詳細方法請直接參考 [官方網站] 上的說明。SPFdisk 支援了由 1024 以後的磁柱位置開機,也可以由第二個硬碟開機,支援各式各樣的作業系統,是不可多得的開機管理程式。但是 SPFdisk 會強迫把其它的開機分割區的 Partition System ID 隱藏起來,以致作業系統無法辨試該分割區,算是美中不足之處。不知在新版中是否已拿掉這個功能?如果要移除 SPFDisk,可以使用 DOS 開機片,開完機後下達 Fdisk /mbr 即可把 SPFDisk 從 MBR 中移除掉。而使用 SPFdisk /mbr 也可以做到相同的功能哦!

 

註:SPFdisk 也提供了一些磁碟分割表損壞時的一些緊急應變方案,極具實用價值,一定要學起來!

MicrosoftWindowsBootManager

除了利用 Linux 的 LILO 之外,MS Windows NT/2000/XP/2003 也有自已的開機管理程式。

 

MS Windows NT/2000/XP/2003 預設一定會把 Microsoft Windows Boot Manager 安裝在您的電腦上。Microsoft Windows Boot Manager 並不是使用 MBR,而是利用位於 系統分割區(System Partition,即包含 MS Windows NT/2000/XP/2003 開機程式的分割區) 裡的開機檔案來做到多重開機的功能。如果想改換 Microsoft Windows Boot Loader 來當做開機管理程式時步驟很單純,只要使用 Fdisk 將 開機分割區 指向 MS Windows NT/2000/XP/2003 的 System Partition 即可。

 

它的設定檔為 C:\boot.ini。它的檔案內容看起來是這樣子的:

 

{{[boot loader]}}
{{timeout=10}}
{{default=C:\BootSect.lnx}}
{{[operating systems]}}
{{multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft MS Windows 2000 Professional" /fastdetect}}
{{C:\BootSect.lnx="Debian GNU/Linux 3.0"}}
{{C:\BootSect.dos="Microsoft MS Windows Millennium Edition"}}

其中的 BootSect.lnx 及 BootSect.dos 則必須到 Linux 下,使用以下方法來產生:(MS Windows NT/2000/XP/2003 無法自動產生這些檔案)

dd if=/dev/hda2 of=~/BootSect.lnx bs=512 count=1(假設您的 Linux 是裝在 /dev/hda2)
dd if=/dev/hda3 of=~/BootSect.dos bs=512 count=1(假設您的 MS Windows ME 是裝在 /dev/hda3)

 

然後把 BootSect.lnx 及 BootSect.dos 放到 MS Windows NT/2000/XP/2003 的 System Partition,即 C: 下即可。即使這個 System Partition 的格式是 NTFS 的話也可以用這個方法哦。

 

更進一步說,如果您想在一台電腦上安裝 MS Windows 2000 + MS Windows ME + Linux,那麼安裝步驟如下:

  1. 安裝 MS Windows 2000,並使用 NTFS 的格式。
  2. 安裝 MS Windows Me。在安裝時,會出現警告訊息(因為找到了 NTFS 格式的磁區)。不要理它,繼續安裝。安裝完成之後,系統會變成從 MS Windows ME 開機(開機磁區被安裝程式改為 MS Windows ME)。
  3. 安裝 Linux,並把 LILO 寫入 Linux 的分割區中。(而不是寫入 MBR!)
  4. 使用 Linux 開機,並製作 BootSect.lnx 及 BootSect.dos。使用 Fdisk 之類的程式讓開機磁區變為 MS Windows 2000。
  5. 重新開機,進入 MS Windows 2000。將上述 BootSect.lnx 及 BootSect.dos 放到 C:\ 底下,同時別忘了編輯 C:\boot.ini 設定檔。
  6. 由於 MS Windows 2000 支援 FAT32,所以它看得到 MS Windows ME 的磁區,大多是最後一個磁碟。您可能會希望把 MS Windows Me 的分割區隱藏起來。(提示:使用在控制台中的『電腦管理』)
  7. 重新開機後,開機選單就會出現多重開機系統的選項了。
  8. 如果您重新安裝 MS Windows ME、MS Windows 2000 或 Linux 的 LILO 而使得多重開機系統發生錯誤無法執行,您可以重覆以上動作,製作一個新的 !Bootsect.dos 或 !Bootsect.dos 即可。(不過比較起來真的有點麻煩!)
 
注意:MS Windows ME 的開始磁區『絕對』不要位於 1024 磁柱之後!
注意:這個方法筆者嘗試過,似乎無法啟動位於另一顆硬碟的作業系統。