Product SiteDocumentation Site

8.8. 組態 Bootloader

或許已經運作了,但最好知道如何組態與安裝載入啟動器,萬一它不在 Master Boot Record 中。安裝 Windows 等其他作業系統後,很可能出現這種情況。以下的資訊在必要時可協助修改載入啟動器組態。

8.8.1. 辨識磁碟

組態啟動程式必須辨認硬碟及其分區。Linux 使用 “block” 特殊檔案儲存在 /dev/ 資料夾內。因為 Debian Squeeze 版本使用源自 Linux 核心的硬碟命名架構,所有的硬碟 (IDE/PATA、SATA、SCSI、USB、IEEE 1394) 都以 /dev/sd* 表示。
每個分區由其磁碟代號表示:如,/dev/sda1 是第一個磁碟的第一個分區,而 /dev/sdb3 是第二個磁碟的第三個分區。
PC 架構 (或 “i386”,包括新出現的 “amd64”) 不再受限於使用 “MS-DOS” 分區表格式,每個磁碟可以擁有超過 4 個 “主要” 分區。在此架構下要超過此限制,必須新增 “延伸” 分區,然後就能使用新增的 “次要” 分區。這些次要分區由 5 開始編號。所以,第一個磁碟的次要分區可以是 /dev/sda5,然後是 /dev/sda6,餘此類推。
MS-DOS 分區表格式的另個限制是磁碟的容量不能超過 2 TiB,成為當代磁碟的真正問題。
GPT 是新的分區表格式,解放對區分數的限制 (標準方式最多可以設定 128 個區分) 以及磁碟容量的限制 (最多達 8 ZiB,超過 8 百萬兆位元組)。若想在一個磁碟切出多個實體區分,必須以 GPT 格式新增分區表。
不容易記得磁碟掛在 SATA 控制卡的位置,或在 SCSI 鏈的第三個位置,尤其是熱插拔硬式磁碟機 (包括 SATA 磁碟與外掛磁碟) 可改變開機的位置。還好,udev 以固定的名稱,新增 /dev/sd* 以外的符號連結,就能夠輕易的辨識硬式磁碟機。這種符號連結儲存在 /dev/disk/by-id 之內。例如,在兩個實體磁碟的機器,可以找到如下的訊息:
mirexpress:/dev/disk/by-id# ls -l
total 0
lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part2 -> ../../sda2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697 -> ../../sdb
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part2 -> ../../sdb2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part2 -> ../../sdc2
[...]
lrwxrwxrwx 1 root root  9 23 jul. 08:58 wwn-0x5000c50015c4842f -> ../../sda
lrwxrwxrwx 1 root root 10 23 jul. 08:58 wwn-0x5000c50015c4842f-part1 -> ../../sda1
[...]
mirexpress:/dev/disk/by-id# 
同顆磁碟出現多次 (因為它們同時做為 ATA 磁碟與 SCSI 磁碟),但是根據磁碟的型號與序號等相關資訊,就可找到對應的週邊裝置檔案。
下節的組態檔根據同樣的設定而來:一個 SATA 磁碟,第一個區分是安裝舊型的視窗、第二個分區安裝 Debian GNU/Linux。

8.8.2. 組態 LILO

LILO (Linux 啟動程式, LInux LOader) 是最舊的啟動程式 — 穩定但粗糙。把核心的實體位址寫入 MBR 的啟動,所以每次更新至 LILO (或其組態檔案) 都必須再執行命令 lilo。忘記的話,移除或更新核心後,新的核心就不會在磁碟的原來位置,以致系統無法啟動。
LILO 的組態檔是 /etc/lilo.conf;一個簡單的檔案供標準組態之用,如下例。

範例 8.4. LILO 組態檔案

# The disk on which LILO should be installed.
# By indicating the disk and not a partition.
# you order LILO to be installed on the MBR.
boot=/dev/sda
# the partition that contains Debian
root=/dev/sda2
# the item to be loaded by default
default=Linux

# the most recent kernel image
image=/vmlinuz
  label=Linux
  initrd=/initrd.img
  read-only

# Old kernel (if the newly installed kernel doesn't boot)
image=/vmlinuz.old
  label=LinuxOLD
  initrd=/initrd.img.old
  read-only
  optional

# only for Linux/Windows dual boot
other=/dev/sda1
  label=Windows

8.8.3. GRUB 2 組態

GRUB (GRand Unified Bootloader) 是最近的事。更新核心後不必再啟動它;GRUB 知道如何讀取檔案系統並找到核心在磁碟的位置。鍵入 grub-install /dev/sda 命令就能夠把它安裝在第一個磁碟的 MBR。
GRUB 2 configuration is stored in /boot/grub/grub.cfg, but this file (in Debian) is generated from others. Be careful not to modify it by hand, since such local modifications will be lost the next time update-grub is run (which may occur upon update of various packages). The most common modifications of the /boot/grub/grub.cfg file (to add command line parameters to the kernel or change the duration that the menu is displayed, for example) are made through the variables in /etc/default/grub. To add entries to the menu, you can either create a /boot/grub/custom.cfg file or modify the /etc/grub.d/40_custom file. For more complex configurations, you can modify other files in /etc/grub.d, or add to them; these scripts should return configuration snippets, possibly by making use of external programs. These scripts are the ones that will update the list of kernels to boot: 10_linux takes into consideration the installed Linux kernels; 20_linux_xen takes into account Xen virtual systems, and 30_os-prober lists other operating systems (Windows, OS X, Hurd).

8.8.4. Macintosh 電腦 (PowerPC):組態 Yaboot

Yaboot 是使用 PowerPC 晶片的舊型 Macintosh 電腦用到的啟動程式。它的啟動方式不同於 PC,採用 “引導” 分區法,從 BIOS (或 OpenFirmware) 執行啟動程式,然後由 ybin 程式安裝 yaboot 及其組態檔。修改 /etc/yaboot.conf 檔案後 (在啟動程式分區複製,且 yaboot 知道如何到磁碟找尋核心的位置),需再次執行此命令。
執行 ybin 之前,應有合法的 /etc/yaboot.conf 程式。以下的最小組態的範例。

範例 8.5. Yaboot 組態檔案

# bootstrap partition
boot=/dev/sda2
# the disk
device=hd:
# the Linux partition
partition=3
root=/dev/sda3
# boot after 3 seconds of inactivity
# (timeout is in tenths of seconds)
timeout=30

install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
enablecdboot

# last kernel installed
image=/vmlinux
        label=linux
        initrd=/initrd.img
        read-only

# old kernel
image=/vmlinux.old
        label=old
        initrd=/initrd.img.old
        read-only

# only for Linux/Mac OSX dual-boot
macosx=/dev/sda5

# bsd=/dev/sdaX and macos=/dev/sdaX
# are also possible