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