永乐国际 勇往直前 乐在其中


Produced By 中国煤炭开发有限责任公司
主页 > 公司要闻 >

学习 Linux,101: 引导程序

概述

在本文中,进修若作甚一个 Linux 系统设计一个磁盘分区结构。您将进修:

永乐国际 勇往直前 乐在其中为自力的分区或磁盘分配文件系统和互换空间;

永乐国际 勇往直前 乐在其中根据系统的预定用途调剂设计;

确保系统能够启动。

永乐国际 勇往直前 乐在其中本文评论争论 PC 向导历程和 Linux 中应用的两个主要的启动加载法度榜样 — LILO 和 GRUB — 赞助您筹备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试 101 中主题 102 下的目标 102.2。该目标的权值为 2。我们还将向您先容 GRUB 2,只管它不是当前考试目标的需要内容。

先决前提

要充分地使用本系列文章,您该当对 Linux 以及在此中运行本文先容的敕令的 Linux 系统有一个基础的懂得。您还应该认识文章 “进修 Linux,101:硬盘结构” 中评论争论的硬盘驱动器结构。在某些环境下,法度榜样的不合版本可能应用不合的要领款式化输出,是以您的结果可能并不老是与本文所示的清单和图形完全一样。

永乐国际 勇往直前 乐在其中留意:本文中的图像是从启动历程初期采集的屏幕截图。假如您正在应用一个屏幕读取器涉猎本文,您可能会发明拥有对应的设置设置设备摆设摆设文件以便参考的好处;从本文后面的 下载 部分下载它们。

启动历程概述

在我们深入 LILO 和 GRUB 之前,首先懂得一下 PC 若何启动或 向导。称为 BIOS(Basic Input Output Service,基础输入输出办事)的代码存储在一个非临时内存中,比如 ROM、EEPROM 或闪存。当 PC 打开或从新启动时,这个代码将履行。平日,它履行一个启动自测(POST)来反省机械。着末,它从向导驱动器上的主向导记录(MBR)加载第一个扇区。

永乐国际 勇往直前 乐在其中如 “进修 Linux,101:硬盘结构” 所述,MBR 也包孕分区表,是以 MBR 中的可履行代码量低于 512 字节,这个代码量不算多。留意,每个磁盘(以致是软盘)都在它的 MBR 中包孕可履行代码,纵然这个代码只够输出一条消息,比如 “Non-bootable disk in drive A:”。由 BIOS 从第一个扇区加载的代码称为第一阶段启动加载法度榜样 或阶段 1 启动加载法度榜样。

永乐国际 勇往直前 乐在其中MS DOS、PC DOS 和 Windows® 应用的标准硬盘驱动器 MBR 反省分区表以发明标记为 active 的向导驱动器上的主分区,从该分区加载第一个扇区,并将节制权通报给已加载代码的开始部分。这个新的代码片段也称为分区向导记录。分区向导记录实际上是另一个阶段 1 启动加载法度榜样,但这个启动加载法度榜样只能从分区加载一组块。这组新块中的代码称为阶段 2 启动加载法度榜样。根据 MS-DOS 和 PC-DOS 的应用要领,阶段 2 启动加载法度榜样直接加载操作系统的残剩部分。这便是操作系统在启动并运行之前加载自身的要领。

永乐国际 勇往直前 乐在其中这种要领对付只有单个操作系统的系统很有效。假如您想应用多个操作系统(比如 OS/2、Windows XP 和 3 个不合的 Linux 发行版)时又该怎么办呢?您可以 应用某个法度榜样(比如 DOS FDISK 法度榜样)来变动活动分区并从新启动,但这种措施对照麻烦。而且,一个磁盘只能拥有 4 个主分区,且标准 MBR 只能拥有一个活动主分区;它不能从一个逻辑分区启动。但我们假设的示例引用了 5 个操作系统,每个操作系统都必要一个分区。该怎么办呀!

永乐国际 勇往直前 乐在其中办理规划是应用一些特殊代码,容许用户选摘要向导的操作系统。这样的示例包括:

Loadlin一个 DOS 可履行法度榜样,它从一个运行的 DOS 系统被调用,启动一个 Linux 分区。当设置一个多启动系统对照繁杂且存在风险时,这个法度榜样能够派上用处。OS/2 Boot Manager这个法度榜样安装在一个小型专用分区上。这个分区被标记为活动,标准 MBR 向导历程启动 OS/2 Boot Manager,该法度榜样显示一个菜单,容许选摘要启动的操作系统。一个智能启动加载法度榜样这个法度榜样驻留在一个操作系统分区上,经由过程一个活动分区的分区向导记录或者主向导记录调用。法度榜样示例包括:

永乐国际 勇往直前 乐在其中BootMagic,Norton PartitionMagic 的一部分

LILO,即 LInux LOader

GRUB,即 GRand Unified Boot 加载法度榜样(现在称为 GRUB Legacy)

永乐国际 勇往直前 乐在其中GRUB 2,近来才在常用发行版中新呈现的一个新的启动加载法度榜样

显然,假如您将系统节制权通报给某个拥有跨越 512 字节的代码来完成它的义务,那么容许从逻辑分区启动或者从不在启动驱动器上的分区启动就不太艰苦。所有这些办理规划都容许这些可能性,缘故原由是它们可以从随意率性一个分区加载一个向导记录,或者它们在必然程度上理解要启动向导历程必要加载哪个或哪些文件。

链式加载

永乐国际 勇往直前 乐在其中当一个向导法度榜样获取节制权之后,它可能做的一件事便是加载另一个向导法度榜样。这称为链式加载(chain loading),这种加载在以下环境下最有可能发生:当位于主向导记录中的向导法度榜样加载位于一个分区向导记录中的启动加载法度榜样时。上述环境在以下两种环境下老是发生:当一个 Linux 启动加载法度榜样被要求启动一个 Windows 或 DOS 分区时;或者当一个系统的 Linux 启动加载法度榜样被要求加载另一个系统的启动加载法度榜样时。

Linux 启动加载法度榜样

永乐国际 勇往直前 乐在其中从现在开始,我们将主要关注 LILO 和 GRUB,由于它们是多半 Linux 发行版包孕的启动加载法度榜样。LILO 已经存在一段光阴了,而 GRUB 更新一些。最初的 GRUB 现在变成了 GRUB Legacy,GRUB 2 正在 Free Software Foundation 的辅助之下开拓。我们将简要评论争论 GRUB 2,主如果使您理解 GRUB 和 GRUB 2 之间的主要差别以及它们是若何共存的。在本文余下部分中,我们将假定 GRUB 即 GRUB Legacy,除非高低文分外暗指 GRUB 2。LILO 的一个新版本 ELILO(它设计用于启动应用 Intel 的 Extensible Firmware Interface(EFI)而非 BIOS 的系统)现在也可用。

您的发行版的安装历程大概容许您选摘要设置的启动加载法度榜样。GRUB 和 LILO 都能处置惩罚多半今世磁盘,只管有些发行版(分外是 Fedora)不再包孕 LILO。不要忘了,磁盘技巧已经取得了迅猛成长,是以应该老是确保您选择的启动加载法度榜样、Linux 发行版(或者其他操作系统)以及您的系统 BIOS 能够处置惩罚您的新款磁盘。否则,就可能导致数据丧掉。同样,假如您正在将一个新发行版添加到一个现有系统,您可能必要确保您的 MBR 中有最新的 LILO 或 GRUB。假如您盘算从一个 LVM 或 RAID 磁盘启动,那么还必要相称新的 GRUB 或 LILO 版本。

永乐国际 勇往直前 乐在其中在 LILO 和 GRUB 中应用的阶段 2 加载法度榜样容许您从几个操作系统或版本中选摘要加载的系统。然则,LILO 和 GRUB 的区别很大年夜:无论何时您进级内核或对您的系统进行其他变动,对系统的一个变动都必要您从新创建 LILO 启动设置,而 GRUB 能够经由过程一个您可以编辑的设置设置设备摆设摆设文本文件来完成这个义务。GRUB 2 还要求从新构建一个平日存储在 /etc 中的设置设置设备摆设摆设文件。

LILO

LILO(即 LInux LOader)是两个最常用的 Linux 启动加载法度榜样之一。可以将 LILO 安装到您的可向导硬盘驱动器的 MBR 中,或者安装到一个分区的分区向导记录中。也可以将它安装到可移动设备上,比如软盘、CD 和 USB 磁盘。假如您还不认识 LILO,那么在软盘或 USB 磁盘上演习是一个不错的留意,我们的示例便是这样做的。

永乐国际 勇往直前 乐在其中在 Linux 安装时代,您平日必要指定 LILO 或 GRUB 为向导法度榜样。假如您选择 GRUB,您可能没有安装 LILO。假如是这样,那么您必要安装它的包。您可能想安装 lilo-doc 包,以便得到其他文档和示例。此后,我们假定您已经安装了 LILO 包。假如必要赞助,请参阅我们的 进修 Linux,101:LPIC-1 路线图,获取关于担保理的文章。

永乐国际 勇往直前 乐在其中您应用一个设置设置设备摆设摆设文件来设置设置设备摆设摆设 LILO,这个设置设置设备摆设摆设文件平日是 /etc/lilo.conf。您可以应用 liloconfig 敕令(平日位于 /usr/sbin 中)来天生一个启动设置设置设备摆设摆设文件,然后根据必要编辑它。清单 1 中的设置设置设备摆设摆设文件便是按照这种要领天生的。这个文件的注释对照合理,lilo 和 lilo.conf 的手书页面将向您供给更多赞助。这是一个范例的 LILO 设置设置设备摆设摆设文件,可用于包孕 Windows 和一个或多个 Linux 系统的双启动系统上。

清单 1. /etc/lilo.conf 示例

永乐国际 勇往直前 乐在其中# Originally generated by liloconfig - modified by Ian Shields

永乐国际 勇往直前 乐在其中# This allows booting from any partition on disks with more than 1024

# cylinders.

lba32

# Specifies the boot device (floppy)

boot=/dev/fd0

永乐国际 勇往直前 乐在其中# Specifies the device that should be mounted as root.

# If the special name CURRENT is used, the root device is set to the

永乐国际 勇往直前 乐在其中# device on which the root file system is currently mounted. If the root

永乐国际 勇往直前 乐在其中# has been changed with -r , the respective device is used. If the

永乐国际 勇往直前 乐在其中# variable ROOT is omitted, the root device setting contained in the

# kernel image is used. It can be changed with the rdev program.

永乐国际 勇往直前 乐在其中root=/dev/sda7

永乐国际 勇往直前 乐在其中# Bitmap configuration for /boot/coffee.bmp

bitmap=/boot/coffee.bmp

bmp-colors=12,,11,15,,8

bmp-table=385p,100p,1,10

bmp-timer=38,2,13,1

# Enables map compaction:

# Tries to merge read requests for adjacent sectors into a single

永乐国际 勇往直前 乐在其中# read request. This drastically reduces load time and keeps the map

# smaller. Using COMPACT is especially recommended when booting from a

# floppy disk.

compact

# Install the specified file as the new boot sector.

# LILO supports built in boot sectors, you only need

# to specify the type, choose one from 'text', 'menu' or 'bitmap'.

# new: install=bmp   old: install=/boot/boot-bmp.b

# new: install=text   old: install=/boot/boot-text.b

永乐国际 勇往直前 乐在其中# new: install=menu   old: install=/boot/boot-menu.b or boot.b

# default: 'menu' is default, unless you have a bitmap= line

永乐国际 勇往直前 乐在其中# Note: install=bmp must be used to see the bitmap menu.

# install=menu

install=bmp

永乐国际 勇往直前 乐在其中# Specifies the number of _tenths_ of a second LILO should

永乐国际 勇往直前 乐在其中# wait before booting the first image. LILO

永乐国际 勇往直前 乐在其中# doesn't wait if DELAY is omitted or if DELAY is set to zero.

# delay=20

永乐国际 勇往直前 乐在其中# Prompt to use certain image. If prompt is specified without timeout,

# boot will not take place unless you hit RETURN. Timeout is in tenths of

永乐国际 勇往直前 乐在其中# a second.

prompt

永乐国际 勇往直前 乐在其中timeout=200

# Enable large memory mode.

large-memory

# Specifies the location of the map file. If MAP is

永乐国际 勇往直前 乐在其中# omitted, a file /boot/map is used.

永乐国际 勇往直前 乐在其中map=/boot/map

# Specifies the VGA text mode that should be selected when

永乐国际 勇往直前 乐在其中# booting. The following values are recognized (case is ignored):

#  NORMAL select normal 80x25 text mode.

#  EXTENDED select 80x50 text mode. The word EXTENDED can be

#   abbreviated to EXT.

永乐国际 勇往直前 乐在其中#  ASK stop and ask for user input (at boot time).

#   use the corresponding text mode. A list of available modes

#   can be obtained by booting with vga=ask and pressing [Enter].

vga=normal

# Defines non-standard parameters for the specified disk.

永乐国际 勇往直前 乐在其中#disk=/dev/sda

# bios=0x80

永乐国际 勇往直前 乐在其中# If you are using removable USB drivers (with mass-storage)

# you will need to tell LILO to not use these devices even

永乐国际 勇往直前 乐在其中# if defined in /etc/fstab and referenced in /proc/partitions.

永乐国际 勇往直前 乐在其中# Adjust these lines to your devices:

#

永乐国际 勇往直前 乐在其中# disk=/dev/sda inaccessible

永乐国际 勇往直前 乐在其中# disk=/dev/sdb inaccessible

# These images were automagically added. You may need to edit something.

image=/boot/vmlinuz-2.6.31-14-generic

永乐国际 勇往直前 乐在其中label="Lin 2.6.31-14"

initrd=/boot/initrd.img-2.6.31-14-generic

read-only

image=/boot/vmlinuz-2.6.31-20-generic

永乐国际 勇往直前 乐在其中label="Lin 2.6.31-20"

永乐国际 勇往直前 乐在其中initrd=/boot/initrd.img-2.6.31-20-generic

read-only

image=/boot/memtest86+.bin

永乐国际 勇往直前 乐在其中label="Memory Test+"

read-only

# If you have another OS on this machine (say DOS),

永乐国际 勇往直前 乐在其中# you can boot if by uncommenting the following lines

# (Of course, change /dev/sda1 to wherever your DOS partition is.)

other=/dev/sda6

label="Fedora 8"

other=/dev/sda1

label="Windows XP"

永乐国际 勇往直前 乐在其中我们将经由过程创建一个启动软盘来测试我们的设置设置设备摆设摆设,是以我们指定接近文件顶部的 boot=/dev/fd0。我们还将提示超时增添到 20 秒(200 个 0.1 秒增量),并添加了第二个 “other” 条款来链式加载到 Fedora 8 分区上的启动加载法度榜样(/dev/sda6)。LILO 在一个设置设置设备摆设摆设文件中只容许一个 root 敕令,是以它可以启动根分区中的多个映像,但必要链式加载到另一个启动加载法度榜样来启动另一个不合安装中的映像,比如我们的示例中的 Fedora 8 (/dev/sda6) 或 Windows XP (/dev/sda1)。

您应用 /sbin/lilo 中的 lilo 敕令来编写一个阶段 1 向导记录,并应用平日位于 /etc/lilo.conf 中的设置设置设备摆设摆设信息(比如上面的示例)来创建一个映像文件(/boot/map)。我们稍后将提到一些帮助用法。

现在,假如我们应用一个 Linux 文件系统(比如 ext2)来款式化一个软盘,我们将运行 lilo 敕令(/sbin/lilo)来创建一个可向导软盘。清单 2 显示了我们的输出。留意,lilo 敕令拥有 5 个级其余具体程度,为每个级别指定一个额外的 -v 参数。这个示例应用 lilo -v -v 创建。

清单 2. 应用 lilo 创建一个可向导软盘

LILO version 22.8, Copyright (C) 1992-1998 Werner Almesberger

Development beyond version 21 Copyright (C) 1999-2006 John Coffman

Released 19-Feb-2007, and compiled at 10:52:38 on Aug 25 2009

永乐国际 勇往直前 乐在其中Running Linux kernel 2.6.31-14-generic on i686

Ubuntu

永乐国际 勇往直前 乐在其中raid_setup returns offset = 00000000 ndisk = 0

BIOS  VolumeID  Device

Reading boot sector from /dev/fd0

永乐国际 勇往直前 乐在其中pf_hard_disk_scan: ndevs=1

0800 54085408 /dev/sda

永乐国际 勇往直前 乐在其中device codes (user assigned pf) = 0

永乐国际 勇往直前 乐在其中device codes (user assigned) = 0

永乐国际 勇往直前 乐在其中device codes (BIOS assigned) = 1

device codes (canonical) = 1

mode = 0x03, columns = 80, rows = 25, page = 0

Using BITMAP secondary loader

永乐国际 勇往直前 乐在其中Calling map_insert_data

永乐国际 勇往直前 乐在其中Secondary loader: 19 sectors (0x3800 dataend).

Warning: The boot sector and map file are on different disks.

永乐国际 勇往直前 乐在其中bios_boot = 0x00 bios_map = 0x80 map==boot = 0 map S/N: 54085408

Mapping bitmap file /boot/coffee.bmp

Calling map_insert_file

永乐国际 勇往直前 乐在其中Compaction removed 592 BIOS calls.

永乐国际 勇往直前 乐在其中Bitmap: 603 sectors.

永乐国际 勇往直前 乐在其中BIOS data check was okay on the last boot

永乐国际 勇往直前 乐在其中Boot image: /boot/vmlinuz-2.6.31-14-generic

Setup length is 26 sectors.

永乐国际 勇往直前 乐在其中Compaction removed 7452 BIOS calls.

Mapped 7601 sectors.

Mapping RAM disk /boot/initrd.img-2.6.31-14-generic

Compaction removed 14696 BIOS calls.

RAM disk: 14930 sectors.

Added Lin_2.6.31-14 *

永乐国际 勇往直前 乐在其中Boot image: /boot/vmlinuz-2.6.31-20-generic

Setup length is 26 sectors.

永乐国际 勇往直前 乐在其中Compaction removed 7468 BIOS calls.

永乐国际 勇往直前 乐在其中Mapped 7617 sectors.

Mapping RAM disk /boot/initrd.img-2.6.31-20-generic

永乐国际 勇往直前 乐在其中Compaction removed 14704 BIOS calls.

RAM disk: 14938 sectors.

Added Lin_2.6.31-20

Boot image: /boot/memtest86+.bin

Setup length is 4 sectors.

永乐国际 勇往直前 乐在其中Compaction removed 243 BIOS calls.

永乐国际 勇往直前 乐在其中Mapped 254 sectors.

Added Memory_Test+

永乐国际 勇往直前 乐在其中Boot other: /dev/sda6, loader CHAIN

Pseudo partition start: 43198848

永乐国际 勇往直前 乐在其中Compaction removed 0 BIOS calls.

Mapped 6 (4+1+1) sectors.

Added Fedora_8

Boot other: /dev/sda1, on /dev/sda, loader CHAIN

Compaction removed 0 BIOS calls.

Mapped 6 (4+1+1) sectors.

Added Windows_XP

永乐国际 勇往直前 乐在其中BIOS  VolumeID  Device

80  54085408  0800

永乐国际 勇往直前 乐在其中Writing boot sector.

永乐国际 勇往直前 乐在其中/boot/boot.0200 exists - no boot sector backup copy made.

Map file size: 336896 bytes.

永乐国际 勇往直前 乐在其中RAID device mask 0x0000

One warning was issued.

Produced By 中国煤炭开发有限责任公司