现在的位置: 首页 > 综合 > 正文

学习 Linux,101: 引导系统

2013年01月31日 ⁄ 综合 ⁄ 共 13531字 ⁄ 字号 评论关闭

概述

本文将帮助您理解从 BIOS 到引导结束整个过程的引导顺序,并演示方法:

  • 向启动加载程序提供常用命令
  • 在引导时向内核提供选项
  • 检查日志文件中的引导事件

引导进程的某些特征是大多数系统所共有的,但有些硬件相关特征则是某个特殊架构所特有的。本文中的资料专门针对使用 BIOS 引导系统的 x86 和 x86_64 架构。对于规模大于 2TB 的驱动器,一种使用Extensible Firmware Interface (or EFI) 和 GUID Partition Table (GPT) 的新系统正在日益流行。此类系统目前尚不属于 LPI 考试目标的一部分,因此本文没有涉及相关内容。请参见 参考资料 了解更多相关信息。

除非另有明确说明,本文中的示例一般使用 Fedora 14 和一个 2.6.35 内核。其他系统上的结果可能会有所不同。

本文帮助您准备 Linux Professional Institute's Junior Level Administration (LPIC-1) 101 考试中主题 101 下的目标 101.2。该目标的权值为 3。

先决条件

您还应该熟悉文章 “学习 Linux,101:硬盘布局” 中的内容。为了最有效地利用本系列中的文章,您应该具有基本的
Linux 知识,并准备一个 Linux 系统,用于练习本文介绍的命令。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同。特别是,不同系统的 BIOS 设置差别很大,不同发行版的启动加载程序启动画面也差别很大。

引导顺序

在我们深入了解启动加载程序(比如 LILO 和 GRUB)之前,先来重温一下 PC 是如何启动或引导 的。名为 BIOS(表示 Basic InputOutput Service)的代码存储在 ROM、EEPROM 或闪存等非易变 (non-volatile) 内存中。当启动或重启 PC 时,会执行该代码,并执行开机自检 (Power-On Self Test, POST) 来检查机器。它还会确定可用移动存储设备或固定存储设备中的引导驱动器,然后从该驱动器上的
Master Boot Record (MBR) 加载第一扇区。引导驱动器可以是传统硬盘驱动器、固态驱动器、USB 记忆棒 (stick) 或驱动器、或者带有可移动媒介(比如磁盘、CD 或 DVD)的驱动器。本文主要关注硬盘驱动器,但其他类型的存储设备的引导进程均与硬盘驱动器相似。

正如文章 “学习 Linux,101:硬盘布局” 所描述的,因为 MBR 还包含分区表,所以 MBR 中的可执行代码小于 512 字节,这个代码量不算大。注意,每个磁盘(即使是软盘、CD、DVD 或者 USB 记忆棒之类的固态设备) 的 MBR 中均包含一个可执行代码,即使这个代码只能用于显示一条消息,比如
"Non-bootable disk in drive A:(驱动器 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
这个程序安装在一个专用小分区上,分区被标记为 active,标准 MBR 引导进程启动 OS/2 Boot Manager,之后会显示一个菜单用于选择要引导的操作系统。
智能启动加载程序
该程序可以驻留在操作系统的分区上,并可以通过一个活动分区的分区引导记录调用,也可以通过主引导记录调用。此类程序包括:

  • BootMagic(Norton PartitionMagic 的一个组件)
  • LILO (LInux LOader)
  • GRUB (GRand Unified Boot loader)(现在称为 GRUB Legacy)
  • GRUB2(一个新型启动加载程序,经常出现在一些常见的发行版中)

很明显,如果能够将系统控制权交给某个包含 512 字节以上代码的程序来完成其任务,那么支持从逻辑分区引导或从位于引导驱动器之外的分区引导应该不太难。上述解决方案都支持这些可能性,这是因为它们都能从任意分区加载引导记录,或者是因为它们都对启动引导过程需要加载哪个或哪些文件有所理解。

链式加载

当一个引导管理器获得控制权时,它能做的一件事就是加载另一个引导管理器。这种现象称为链式加载 (chain loading),通常发生在位于主引导记录 (MBR) 中的引导管理器加载一个分区引导记录中的启动加载程序的时候。当一个 Linux 启动加载程序被请求引导一个 Windows 或 DOS 分区时,或者当一个系统的 Linux 启动加载程序被请求加载另一个系统的启动加载程序时,几乎总是需要进行链式加载。例如,您可能需要使用一个分区中的 LILO 链式加载另一个分区中的 GRUB,以便访问该分区中的
GRUB 菜单。

Linux 启动加载程序

接下来我们要关注的是 LILO 和 GRUB,因为它们是大多数 Linux 发行版包含的启动加载程序。LILO 的历史长一些,而 GRUB 比较新。原始 GRUB 现在已成为 GRUB Legacy,GRUB2 正处于开发中,它是由 Free Software Foundation 赞助(请参见 参考资料 了解相关的详细信息)。我们将简要讨论
GRUB2,阐述 GRUB 和 GRUB2 之间的主要区别,以及二者如何能够共存。对于本文余下部分,我们假设 GRUB 是指 GRUB Legacy,除非上下文明确表示为 GRUB2。LILO 也有一个新版本,称为 ELILO(其设计意图是用于引导使用 Intel 而非使用 BIOS 的 Extensible Firmware Interface (EFI)。请参见 参考资料 了解关于
GRUB2 和 ELILO 的其他相关信息。

您的发行版的安装过程可能支持选择设置哪个启动加载程序。GRUB 和 LILO 都支持大多数小于 2TB 的现代磁盘,但有些发行版(最著名的是 Fedora)不再包含 LILO。别忘了,磁盘技术已经飞速发展,因此您应该总是确保所选的启动加载程序、Linux 发行版(或其他操作系统)以及您的系统 BIOS 适用于您的新磁盘。否则,就有可能导致数据丢失。同样,向现有系统添加新发行版时,可能需要确保您的 MBR 中拥有最新的 LILO 或 GRUB。如果您打算从 LVM 或 RAID 磁盘引导,也需要拥有比较新的 GRUB
或 LILO 版本。

LILO 和 GRUB 中使用的阶段 2 加载程序允许从几个操作系统或版本中选择其中之一。但是,LILO 和 GRUB 差别很大:只要升级内核或对系统进行其他更改,就需要使用一条命令重新创建 LILO 引导设置;而 GRUB 支持通过一个可编辑配置文本文件来完成这个任务。GRUB2 也需要从一个通常存储在 /etc 中的配置文件进行一个重构。

下面小结 PCs 的引导过程:

  1. 当 PC 启动时,BIOS (Basic Input Output Service) 会执行一个自检。
  2. 当机器通过自检时,BIOS 会加载 Master Boot Record(或 MBR,通常位于引导驱动器的第一个 512 字节扇区)。引动驱动器通常是系统上的第一个硬盘驱动器,但也可以是一个磁盘、CD 或 USB 密匙。
  3. 对于硬盘驱动器,MBR 加载一个阶段 1 启动加载程序,该程序通常是 Linux 系统上的 LILO 或 GRUB 阶段 1 启动加载程序。这是另一个 512 字节单扇区记录。
  4. 阶段 1 启动加载程序通常加载一个记录序列,该序列通常称为阶段 2 启动加载程序(有时称为阶段 1.5 加载程序)。
  5. 阶段 2 加载程序加载操作系统。对于 Linux,这是内核,也可能是初始 RAM 磁盘 (initrd)。

您的系统应该能够安装两个流行启动加载程序的其中一个:LILO (LInux LOader) 或 GRUB (GRand Unified Boot loader)。您应该能够使用所选的启动加载程序按前面描述的方式执行引导。如果您想回顾启动加载程序安装或基本引导过程,请参阅配套文章 “学习 Linux,101:引导程序”。

可以采用以下方法影响您的系统引导过程:

  1. 更改引导设备。您可能通常从硬盘驱动器引导,但有时可能需要从软盘、USB 内存密匙、CD 或 DVD,或者网络引导。要设置这类引导设备,您需要适当配置 BIOS;在引导过程中可能还需要一个特殊键击,以便显示一些选项。我的一个系统上的选项如 图 1 所示。设置引导设备和选择在启动时引导设备的方法特定于您的系统及其 BIOS。这也超出了这个 LPI 目标的要求,您可以参考您的系统文档。 

    图 1. 选择引导设备
    Startup Device Menu 屏幕截图,显示多个引导设备选项,突出显示 USB key - Sony Storage Media 选项 

  2. 可以与启动加载程序交互,选择引导哪个配置。本文稍后将介绍如何针对 LILO 和 GRUB 完成这个任务。
  3. 您可以使用 GRUB 或 LILO 来将参数传递到内核,控制内核被启动加载程序加载后启动系统的方式。

LILO

LILO 配置文件默认为 /etc/lilo.conf。清单 1 展示了一个系统示例,该系统当前正在 /dev/sda10 上运行 Slackware,在 /dev/sda1 上运行 Windows,在 /dev/sdb12 上运行 Fedora 14。这个示例使用 /sbin/liloconfig 命令构建。


清单 1. LILO 配置示例

				
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
lba32 # Allow booting past 1024th cylinder with a recent BIOS
boot = /dev/root
#compact # faster, but won't work on all systems.
# Boot BMP Image.
# Bitmap in BMP format: 640x480x8
bitmap = /boot/slack.bmp
# Menu colors (foreground, background, shadow, highlighted
# foreground, highlighted background, highlighted shadow):
bmp-colors = 255,0,255,0,255,0
# Location of the option table: location x, location y, number of
# columns, lines per column (max 15), "spill" (this is how many
# entries must be in the first column before the next begins to
# be used. We don't specify it here, as there's just one column.
bmp-table = 60,6,1,16
# Timer location x, timer location y, foreground color,
# background color, shadow color.
bmp-timer = 65,27,0,255
# Standard menu.
# Or, you can comment out the bitmap menu above and
# use a boot message with the standard menu:
#message = /boot/boot_message.txt

# Append any additional kernel parameters:
append=" vt.default_utf8=0"
prompt
timeout = 300
# Normal VGA console
vga = normal
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769
# ramdisk = 0 # paranoia setting
# End LILO global section
# Linux bootable partition config begins
image = /boot/vmlinuz
root = /dev/sda10
label = Slackware13
read-only # Partitions should be mounted read-only for checking
# Linux bootable partition config ends
# Windows bootable partition config begins
other = /dev/sda1
label = Windows
table = /dev/sda
# Windows bootable partition config ends
# Linux bootable partition config begins
image = /boot/vmlinuz
root = /dev/sdb13
label = Fedora14
read-only # Partitions should be mounted read-only for checking
# Linux bootable partition config ends


清单 1 中的配置文件包含一个位图参数,参数值为 /boot/slack.bmp。这是一个位图图像,将用于代替传统的 LILO 文本提示,如 图 2 所示。默认的引导图像 Slackware13 为突出显示,Windows 和 Fedora14 如下所示。使用光标键选择一个引导图像,然后按 Enter引导该选项。如果配置文件中的超时值不为 0,那么系统将等待超时值指定的时间(单位为 0.1 秒),然后引导选中的选项。在我们的示例中,这个值为 300 十分位(即 30 秒)。


图 2. Slackware 13 LILO 引导屏幕
Slackware 13 LILO 图形引导屏幕的屏幕截图,使用一个位图显示启动选项 

使用文本提示

在上面的示例中,我们使用一个位图来显示引导选项。传统 LILO 引导提示符是一个非常简略的文本提示,类似于按 Tab 键所看到的内容。要引导第一个选项,可以键入发行版名称或按 Enter 键。这个文本提示如 清单 2 和 图 3 所示。


清单 2. LILO 基本文本提示

				
Slackware13      Windows         Fedora14
boot:



图 3. LILO 基本文本提示
基本 LILO 文本提示的屏幕截图,使用文本显示启动选项 

要使用文本提示,而不使用图形提示,可以注释掉 bitmap 和 bmpxxx 条目并取消 message 参数注释,以便它指向包含想要显示的文本消息的文件。这个文本提示现在不再简略,使用 curses 库来显示您的选项。您可以像以前那样键入参数。在
图 4 中,我们的消息文件包含文本 "Booting pinguino >>>",我们再次使用 S 参数引导到单用户模式。


图 4. Slackware 13 LILO 文本 (curses) 引导屏幕
LILO 文本引导的屏幕截图,使用包含文本消息的文件 

注意:引导过程中可能需要按住 Shift 键才能看到提示,因为系统可能配置为绕过提示。

lilo 命令

记住,每当更改 /etc/lilo.conf 或者安装新内核时,都必须运行 lilolilo 程序会重写 MBR 或分区引导记录以反映您的更改,包括记录内核的绝对磁盘路径。如果您的配置文件包含来自多个分区的 Linux 映像,那么必须加载那些分区,这是因为 lilo 命令需要访问分区才能定位映像。

除显示 LILO 配置文件外,可以使用 lilo 命令的 -q 选项来显示关于 LILO 启动选项的信息。添加 -v 选项以获得更详细的输出。清单 3 展示了两个示例,一个是使用 清单 1 中的图形配置文件,另一个是使用 图 4 中的文本配置文件。


清单 3. 显示 LILO 配置

				
root@echidna:~# lilo -q -C /etc/lilo-graphic.conf
Slackware13     *
Windows
Fedora14

root@echidna:~# lilo -q -v -C /etc/lilo-text.conf
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 20:09:28 on Feb 14 2010

Reading boot sector from /dev/root
Installed:  Tue Sep  6 15:51:49 2011

Global settings:
  Delay before booting: 0.0 seconds
  Command-line timeout: 30.0 seconds
  No unattended booting
  No PC/AT keyboard hardware presence check
  Always enter boot prompt
  Boot-time BIOS data saved
  Boot-time BIOS data auto-suppress write bypassed
  Large memory (>15M) is NOT used to load initial ramdisk
  Non-RAID installation
  Boot device will not be used for the Map file
  Serial line access is disabled
  Boot prompt message is 1083 bytes
  No default boot command line
Images:
  Slackware13     *
    No password
    Boot command-line won't be locked
    No single-key activation
    VGA mode: NORMAL
    Kernel is loaded "high"
    No initial RAM disk
    No fallback
    Options: "ro root=80a  vt.default_utf8=0"
  Windows
    No password
    Boot command-line won't be locked
    No single-key activation
    No fallback
    No options
  Fedora14
    No password
    Boot command-line won't be locked
    No single-key activation
    VGA mode: NORMAL
    Kernel is loaded "high"
    No initial RAM disk
    No fallback
    Options: "ro root=81d  vt.default_utf8=0"


使用 LILO 进行链式加载

您可能已经注意到,Windows 的分区定义显示设备 (/dev/sda1),而 Slackware 和 Fedora 分区定义分别显示根分区上的一个引导映像。对于拥有几个可引导分区的系统,我通常设置一个包含 GRUB 的小分区,该分区可以引导任何其他分区,这通常是通过链式加载进行的。但是,如果该分区上的系统使用诸如 GRUB2 的启动加载程序,那么通常会通过其他方式加载。由于分区运行 GRUB Legacy,因此它可以被链式加载。要添加一个 LILO 条目以链式加载另一个分区,比如这个 GRUB 分区,可以添加一个类似
清单 4 的条目。


清单 4. 添加一个分区以链式加载 GRUB

				
# Linux bootable partition config begins
other = /dev/sda2
  label = GRUB
# Linux bootable partition config ends


GRUB

GRUB 配置文件默认为 /boot/grub/grub.conf 或 /boot/grub/menu.lst。如果二者同时存在,那么一个通常是另一个的符号链接。清单 5 展示了上面用于 LILO 的系统的一个示例。注意,为了便于阅读,我们已将三个内核定义语句分割为多个行。


清单 5. GRUB 配置示例

				
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd1,12)
#          kernel /boot/vmlinuz-version ro root=/dev/sdb13
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/sdb13
default=0
timeout=5
splashimage=(hd1,12)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.35.14-95.fc14.x86_64)
        root (hd1,12)
        kernel /boot/vmlinuz-2.6.35.14-95.fc14.x86_64 ro 
            root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a 
            rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM 
            LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 
            KEYTABLE=us rhgb quiet
        initrd /boot/initramfs-2.6.35.14-95.fc14.x86_64.img
title Fedora (2.6.35.13-92.fc14.x86_64)
        root (hd1,12)
        kernel /boot/vmlinuz-2.6.35.13-92.fc14.x86_64 ro 
            root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a 
            rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM 
            LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 
            KEYTABLE=us rhgb quiet
        initrd /boot/initramfs-2.6.35.13-92.fc14.x86_64.img
title Fedora (2.6.35.13-91.fc14.x86_64)
        root (hd1,12)
        kernel /boot/vmlinuz-2.6.35.13-91.fc14.x86_64 ro 
            root=UUID=5e22a2e0-5ac2-47d5-b98a-d5b25eff585a 
            rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM 
            LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 
            KEYTABLE=us rhgb quiet
        initrd /boot/initramfs-2.6.35.13-91.fc14.x86_64.img
title GRUB
        rootnoverify (hd0,1)
        chainloader +1
title Slackware 13
        rootnoverify (hd0,9)
        chainloader +1
title Windows
        rootnoverify (hd0,0)
        chainloader +1


GRUB 提供一个菜单界面。它还使用一个通过 MD5 算法加密的密码,而不是 LILO 的纯文本密码。而且,也许最重要的是,对 GRUB 配置文件进行的更改不需要在 MBR 中安装 GRUB。注意,许多发行版均能在更新到一个新的内核级别时自动更新 GRUB(或 LILO)配置文件,但是,如果您安装一个新内核或创建一个新的初始 RAM 磁盘,那么可能需要编辑配置文件。

要为分区配置一个启动条目,GRUB 不需要装载该分区。您将看到 root (hd0,9) 和 splashimage=(hd1,12)/boot/grub/splash.xpm.gz 这样的条目。GRUB 将您的硬盘引用为 hdn,其中 n 是一个整数,从 0 开始。类似地,磁盘上的分区从
0 开始编号。注意:GRUB2 已经更改了磁盘命名方式,因此在 GRUB 和 GRUB2 之间切换时要小心。

因此,在这个系统上,(hd0,0) 代表 Windows 主分区 /dev/sda1,而 (hd0,9) 代表 Slackware 逻辑分区 /dev/sda10。软盘驱动器通常是 (fd0)。如果使用这些参数从一个 bash shell 调用 GRUB,例如,在软盘、USB 密匙或您的 MBR 上安装 GRUB 时,别忘了使用引号将参数引起来。

新版 GRUB 允许使用一个标签 或一个 UUID 来指定 root 元素。要详细了解标签和 UUIDs,请参阅配套文章 学习 Linux,101:控制文件系统的安装和卸载 中的
“标签、UUID 和链接” 小节。

使用 GRUB 引导系统时,经常会看到一个默认选项,如 图 5 所示。如果您不做任何操作,会在配置超时后启动这个选项。这里的超时值单位为秒,因此清单 5 中的 timeout=5 表示一个 5 秒的超时。


图 5. 引导 GRUB 到一个默认选项
使用 GRUB 进行引导的屏幕截图,展示在配置超时后启动的默认选项 

如果您按任意键中断默认启动,将会看到一个类似于 图 6 的选项菜单。


图 6. GRUB 菜单选项
展示引导一个选中的操作系统的 GRUB 菜单选项的屏幕截图 

GRUB 菜单显示时,可以使用光标移动键在列表中上下移动,选择一个引导映像。

自定义背景

如果您想对 GRUB 使用不同的启动图像,那么您只能使用 14 色 X Window pixmap (.xpm) 文件,而且文件必须被 gzip 压缩。您钟爱的 JPEG 图像将会减少到 14 色时看起来可能有些不同,因此您需要试验试验,看看效果。可以使用诸如 GIMP 的图形程序将图像减少到 14 色,这时应该使用 Image->Mode->Indexed... 菜单动作并将 Maximum number of colors 字段设置为 14。也可以使用命令行工具,比如
ImageMagick。清单 6 显示将一个 800x531 原始图像减小到需要的 640x480 像素的一种方法:首先将其缩小到 640 像素高,然后裁剪部分图像,减小画布以匹配图像。然后,我们将颜色数量减少到 14,将图像格式从 .jpg 转换为 .xpm。最后我们 gzip 压缩图像。


清单 6. 构建一个自定义 GRUB 启动图像

				
$ identify woodenbong.jpg
woodenbong.jpg JPEG 800x531 800x531+0+0 8-bit DirectClass 210KB 0.000u 0:00.000
$ convert -resize "800x640" woodenbong.jpg woodenbong2.jpg
$ convert -crop "640x480+40+0" +repage  woodenbong2.jpg  grub-in.jpg
$ convert -colors 14 grub-in.jpg grub-menu.xpm
$ gzip grub-menu.xpm


GRUB shell

与 LILO 不同,GRUB 的表现形式是一个小 shell。它包含几个命令,允许执行类似操作:在命令执行之前编辑命令、查找并加载配置文件、或者使用 cat 命令显示文件。在菜单中的条目上按 e 键将编辑条目,按 c 键切换到 GRUB 命令行,按 b 键引导系统,按 p 键输入密码,按 Esc 键返回菜单或上一步。还有一个 grub 命令,用于创建一个模拟
shell,可以在其中测试 GRUB 配置或您的 GRUB 命令技能。普通用户模式提供一些基本组件,但许多命令都需要根权限。清单 7 展示如何作为根用户启动 grub shell。这个 grub 命令通常位于 /sbin 或 /usr/sbin 中。


清单 7. 启动 GRUB shell

				
# grub

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename. ]

grub>


在 GRUB shell 中,help 命令提供一列表的命令。help commandname 提供 commandname 命令帮助。清单 8 显示了可用命令和rootnoverify 命令帮助。


清单 8. 使用 GRUB shell

				
grub> help
blocklist FILE                         boot
cat FILE                               chainloader [--force] FILE
color NORMAL [HIGHLIGHT]               configfile FILE
device DRIVE DEVICE                    displayapm
displaymem                             find FILENAME
geometry DRIVE [CYLINDER HEAD SECTOR [ halt [--no-apm]
help [--all] [PATTERN ...]             hide PARTITION
initrd FILE [ARG ...]                  kernel [--no-mem-option] [--type=TYPE]
makeactive                             map TO_DRIVE FROM_DRIVE
md5crypt                               module FILE [ARG ...]
modulenounzip FILE [ARG ...]           pager [FLAG]
partnew PART TYPE START LEN            parttype PART TYPE
quit                                   reboot
root [DEVICE [HDBIAS]]                 rootnoverify [DEVICE [HDBIAS]]
serial [--unit=UNIT] [--port=PORT] [-- setkey [TO_KEY FROM_KEY]
setup [--prefix=DIR] [--stage2=STAGE2_ terminal [--dumb] [--no-echo] [--no-ed
terminfo [--name=NAME --cursor-address testvbe MODE
unhide PARTITION                       uppermem KBYTES
vbeprobe [MODE]

grub> help rootnoverify
rootnoverify: rootnoverify [DEVICE [HDBIAS]]
    Similar to `root', but don't attempt to mount the partition. This
    is useful for when an OS is outside of the area of the disk that
    GRUB can read, but setting the correct root device is still
    desired. Note that the items mentioned in `root' which derived
    from attempting the mount will NOT work correctly.

grub>


作为一个实践示例,您可以继续前面的示例,使用 GRUB 的 find 命令查找配置文件。下面,您可以从 (hd1,12)(即 /dev/sdb13) 加载配置文件,如 清单 9 所示。


清单 9. 使用 GRUB 查找并加载 GRUB 配置文件

				
grub> find /boot/grub/menu.lst
 (hd0,1)
 (hd0,5)
 (hd1,6)
 (hd1,8)
 (hd1,9)
 (hd1,10)
 (hd1,11)
 (hd1,12)

grub> configfile (hd1,12)/boot/grub/menu.lst
Press `ESC' to enter the menu... 24


加载配置文件时,可能会看到一个类似于 清单 10 的菜单。记住,这已在 GRUB shell 下完成了,该 shell 模拟真实的 GRUB 环境,不显示启动图像。但是,这非常类似于真正使用 GRUB 启动系统时启动图像上叠加的图像。

注意:如果您的菜单看起来不是这样,而且您的方向键回显为 ^[[A 这样的符号,那么您的 grub 命令版本可能不包含正确的菜单显示所需的 curses 支持。据说,这个问题影响了一些最新 Fedora 发布。在这种情况下,使用 grub shell 进行测试会受到限制。


清单 10. GRUB 菜单

抱歉!评论已关闭.