BigAdmin System Administration Portal
专题文章:GRUB 和 Solaris 10 1/06 操作系统:用于 x86 平台的新引导加载器
Print-friendly VersionPrint-friendly Version

GRUB 和 Solaris 10 1/06 操作系统:用于 x86 平台的新引导加载器

Shudong Zhou 和 Jan Setje-Eiler,2005 年 12 月

本文档介绍了 x86 平台上的 Solaris 10 1/06 操作系统的引导体系结构以及用户体验。请注意:本文档中的某些详细信息如有变更,恕不另行通知。有关支持的接口,请参见手册页和 Solaris 操作系统管理文档。

在 Solaris 10 1/06 操作系统正式版发行之前,OpenSolaris 项目Solaris Express 项目中将提供本文档介绍的新引导加载器。


1. 引导过程简介

基于 x86 的系统启动时,BIOS 将初始化 CPU、内存和平台硬件。完成后,BIOS 将从已配置的引导设备中加载初始引导软件(即引导加载器),并将控制权交给引导加载器。Solaris 10 3/05 操作系统和早期发行版使用 Sun 开发的引导加载器,其中包括交互式 shell 和基于实模式驱动程序的菜单驱动设备配置助理。

从 Solaris 10 1/06 发行版开始,将开放源代码 GRUB 或 GNU GRand 统一引导加载器(请参见参考资料 1)用作引导加载器。最初提供的引导加载器基于 GRUB 版本 0.95,并在较新版本发布后对其进行更新。Solaris 内核完全符合多重引导规范(参考资料 2);因此,可通过任何实现多重引导规范的引导加载器来引导 Solaris 操作系统。

改用 GRUB 之后,可以为 Solaris 客户带来很多好处。

  • 使用 GRUB 时,可以很方便地在引导菜单中指定内核和引导选项。

  • 对于最终用户,现在支持从 USB DVD 驱动器中进行引导和安装。

  • Solaris 操作系统可以更方便地与其他操作系统共存于同一台计算机上。特别是,Solaris 操作系统可以与 Linux 共享相同的 GRUB 引导加载器。

  • 通过网络部署 Solaris 操作系统的过程也得到了简化,尤其是在 DHCP 服务器设置方面。在 DHCP 服务器设置中,不再需要使用特定于供应商的选项。

  • 开发者不必再处理实模式驱动程序,这些驱动程序是早期 Solaris 发行版所需的引导加载器的一部分。

  • 对于 IHV,除了软盘以外,现在还可以在安装时通过 CD/DVD 提供驱动程序。

最后,通过采用开放源代码社区开发的引导加载器,Sun 客户可以利用在该社区中获得的大量 GRUB 经验。


2. 使用 GRUB 引导 Solaris 操作系统

GRUB 获得控制权后,它将在控制台上显示一个菜单,要求用户选择要引导的操作系统实例。用户可以选择菜单项,使用内置编辑器修改菜单项,或者在命令模式下手动加载操作系统内核。要引导 Solaris 操作系统,GRUB 必须加载 boot_archive 文件和“多重引导”程序。引导归档是一个 RAM 磁盘映像,其中包含 Solaris 内核模块和数据。GRUB 只是将其放在内存中,而没有进行任何解释。多重引导程序是 ELF 可执行文件,包含一个符合多重引导规范的文件头。加载完成后,GRUB 将控制权交给多重引导程序。GRUB 本身随后变为不活动状态,并且系统将回收其内存。

多重引导程序负责装配内存中的核心内核模块,即读取 boot_archive 并将与引导有关的信息(在多重引导规范中指定)传递给内核。请注意,多重引导程序是与 boot_archive 文件同时加载的。您不能混合和匹配不同发行版或操作系统实例中的多重引导和 boot_archive 信息。

内核获得控制权后,它将初始化 CPU、内存和 I/O 设备,并在 bootpath 属性指定的设备上安装根文件系统,该系统具有 fstype 属性所指定的文件系统类型。可以在 /boot/solaris/bootenv.rc 中通过 eeprom(1M) 命令来设置属性,也可以通过 GRUB 菜单或 shell 在 GRUB 命令行中设置属性。如果未指定这些属性,根文件系统将缺省为 /devices/ramdisk:a 上的 UFS;在引导安装 miniroot 时会出现这种情况。


3. 安装

可以从 CD、DVD 和网络安装服务器中安装 Solaris 操作系统。Solaris 10 1/06 发行版在很多方面不同于 Solaris 10 3/05 发行版:

  • 最低内存要求:系统必须具有 256MB 主内存以引导安装 miniroot。如果系统内存不足,则会从 GRUB 收到以下消息:"Selected item can not fit in memory"(选定项无法装入内存中)。

  • USB 驱动器支持:完全支持从通过 USB 接口连接的 CD/DVD 驱动器进行安装。

  • 网络安装:设置网络安装映像的标准过程保持不变。假定客户机通过预引导执行环境 (Preboot eXecution Environment, PXE) 机制进行引导。无法进行 PXE 引导的客户机可以使用 GRUB 软盘(请参见附录 B)。

引导安装 miniroot 时,将显示一个 GRUB 菜单。用户可以交互地编辑引导选项(请参见第 4.2 节)。GRUB 加载 Solaris 操作系统之后,将显示以下安装菜单:

  1. Solaris Interactive(Solaris 交互)(缺省)
  2. Custom JumpStart(自定义 JumpStart)
  3. Solaris Interactive Text (Desktop session)(Solaris 交互式文本(桌面会话))
  4. Solaris Interactive Text (Console session)(Solaris 交互式文本(控制台会话))
  5. Apply driver updates(应用驱动程序更新)
  6. Single user shell(单用户 shell)

不再提供用户所熟悉的设备配置助理和关联的交互式 shell(在 Solaris 10 3/05 操作系统和早期版本中提供)。如果用户希望在安装期间添加所需的驱动程序(如主机适配器驱动程序),应选择选项 5 并提供 ITU(Install Time Update,安装时更新)软盘或 CD/DVD。

选项 6 可用于系统恢复。它提供了对根提示符的快速访问,而无需完成系统识别过程。此选项与引导 Solaris 故障安全会话完全相同(请参见第 4.4 节)。


4. 管理引导子系统

4.1 BIOS

一般来说,最好在安装 Solaris 操作系统之前将 BIOS 固件升级到最新版本。通常,可通过访问计算机生产供应商的支持网页来完成此操作。

与 Solaris 10 3/05 发行版相比,Solaris 10 1/06 操作系统使用一个不同的 BIOS 功能子集。特别是,内核会使用高级配置和电源管理接口 (Advanced Configuration and Power Management Interface, ACPI) 表中的详细信息(通过 Intel ACPI CA 软件中的解析器)。

在不符合 BIOS 2.0 规范的系统上,系统日志可能包含与解析 ACPI 表有关的消息,例如:

ACPI-0725:*** Warning:
Type override - [4s] had invalid type (DEB_[\200IODB

这些消息没有什么害处,不会影响系统的正常运行。如果 ACPI 错误妨碍了正常的系统引导,用户可通过在 GRUB 菜单的 kernel 行中将 acpi-user-options 设置为 2 来禁用 ACPI 解析器(请参见 eeprom(1M))。

kernel ..-B ...,acpi-user-options=2

在这种情况下,系统假定存在一组标准的 ISA 设备,包括键盘、鼠标、两个串行端口和一个并行端口。

4.2 引导选项

要引导 Solaris 操作系统,用户可以指定要加载的内核、传递给内核的选项(请参见 kernel(1M)),以及用于自定义系统行为的属性名称和值的列表(请参见 eeprom(1M))。安装 Solaris 时,将为系统选择一组缺省值,并将其存储在 /boot/solaris/bootenv.rc 中。用户可通过编辑 GRUB 菜单更改这些设置,也可以通过 eeprom(1M) 命令间接修改 bootenv.rc 文件来更改这些设置。

要通过 eeprom 指定内核名称和内核选项,您需要设置 boot-file 属性。要在详细模式下引导 32 位内核,请运行以下命令:

# eeprom boot-file="kernel/unix -v"

要在 GRUB 菜单上指定相同的内容,请将 GRUB 菜单中的以下 kernel 命令:

kernel /platform/i86pc/multiboot

修改为

kernel /platform/i86pc/multiboot kernel/unix -v

有关 Solaris 内核所接受的其他引导参数,请参见 kernel(1M)

在 GRUB 内核命令行中,可以使用以下语法指定 boot-file 以外的属性:

kernel /platform/i86pc/multiboot -B prop1=val1[,prop2=val2...]

要在 ttya (com1) 上配置串行控制台,请将 console 属性设置为 ttya

kernel /platform/i86pc/multiboot -B console=ttya        

如果属性值包含逗号,则应该用引号将该值引起来。以下 GRUB 命令快速将 Solaris 控制台设置为 ttya

kernel /platform/i86pc/multiboot -B console=ttya,ttya-mode="115200,8,n,1,-"

简而言之,在 GRUB 菜单中指定 "-B foo=bar" 相当于运行 "eeprom foo=bar"。GRUB 中的 -B 选项主要用于临时覆盖。应该通过 eeprom(1M) 指定永久性设置,以使 Solaris 升级过程保留这些设置。

4.3 引导归档

引导归档是指 platform/i86pc/boot_archive 文件。这是一组打包在一起的核心内核模块和配置文件(格式为 UFS 或 ISOFS)。在引导时,GRUB 将引导归档加载到系统内存中。内核现在可以通过引导归档中的数据和文本对其自身进行初始化,而无需执行对根设备的 I/O 操作。当内核获得足够的 I/O 功能后,它将在 bootpath 属性所指定的实际根设备上安装根文件系统。此时,将从内存中丢弃 GRUB 加载的引导归档。

引导归档的内容是在 /boot/solaris/filelist.ramdisk 中指定的。系统关闭时,系统将检查根文件系统的更新,并在必要时更新引导归档。在系统关闭之前,系统可能会运行 bootadm(1M) 命令以手动更新引导归档。

4.4 故障安全菜单条目

/boot/x86.miniroot-safe 是 Solaris 10 1/06 操作系统中新增的文件,其中包含一个可引导的独立 Solaris 映像。可以从 GRUB 菜单中选择 Solaris failsafe(Solaris 故障安全)条目来加载此文件。这是在正常条目无法引导时为方便系统管理员而提供的。

假定您添加的新软件包中包含错误的驱动程序,系统在引导时将出现故障。重新引导时,您可以选择 Solaris failsafe 菜单条目。在故障安全会话中,在 /a 上安装根文件系统并运行 pkgrm -R 可删除有错误的软件包。完成此操作之后,可以重新引导到正常的 Solaris 条目以恢复系统运行。

也可以将 /boot/x86.miniroot-safe 文件复制到便携式介质(如 USB 存储棒)上以作为一种恢复工具。

4.5 保持系统的可引导性

要确保系统保持可引导性,必须使 GRUB 引导块、GRUB 菜单和引导归档保持最新状态。

GRUB 引导块位于 Solaris 分区中。如果引导块损坏,应使用 installgrub(1M) 命令重新安装这些引导块。请注意,无法使用 installboot(1M)fmthard(1M) 写入 GRUB 引导块。

GRUB 菜单位于 /boot/grub/menu.lst/stubboot/boot/grub/menu.lst(如果使用 Solaris 引导分区)中。可以使用 bootadm(1M) update-menu 子命令维护此菜单。由于 GRUB 按 BIOS 磁盘编号来命名磁盘,因此在某些情况下,更改 BIOS 引导设备配置可能会导致 GRUB 菜单条目无效。在这种情况下,运行 bootadm update-menu 将会创建正确的菜单条目。

修改根文件系统时必须更新引导归档。如果在更新内核文件后随即出现系统故障(电源或内核故障),则引导归档可能与根文件系统不同步。在这种情况下,下次重新引导时,通过 Solaris 服务管理器管理的 system/boot-archive 服务(例如,请参见 svcadm(1M))将会失败。Solaris 将输出一条消息,通知用户仍然可以进行引导并清除触发错误的事件,但更安全的做法是重新引导系统,选择故障安全会话并在故障安全会话中更新引导归档。


5. 多重引导设置

如果存在其他可引导的分区,Solaris 安装程序将尝试为这些分区添加 GRUB 条目。到本文档截稿时为止,可以识别 Microsoft Windows 和诊断分区。用户可以直接编辑 GRUB 菜单来添加其他操作系统。

假定系统将 Solaris 操作系统、Linux 和 Windows 放置在同一个磁盘上,如下所示:

        fdisk partition 0:      Windows
        fdisk partition 1:      Linux
        fdisk partition 2:
                slice 0         Solaris 9
                slice 3         Solaris 10 1/06

GRUB 菜单应如下所示:

#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris 10 1/06
        root (hd0,2,d)
        kernel /platform/i86pc/multiboot
        module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
title Solaris 9
        root (hd0,2,a)
        chainloader +1
        makeactive
title Linux
        root (hd0,1)
        kernel <from Linux's GRUB menu...>
        initrd <from Linux's GRUB menu...>
title Windows
        root (hd0,0)
        chainloader +1

请注意,Solaris fdisk partition 必须为活动分区。不要将 "makeactive" 放在 Windows 菜单下面。否则,系统将始终引导 Windows。

从 Sun 以外的来源获取的 GRUB 目前无法识别 Solaris 盘上 VTOC 和 UFS 格式。Sun 已向 GRUB 项目提交更改以支持此功能;在集成这些更改之前,只有 Solaris GRUB 具有此项功能。如果 Linux 将 GRUB 安装在主引导块上,则即使将 Solaris 分区设置为活动分区,也无法引导到 Solaris 操作系统。在这种情况下,您可以修改 Linux 上的菜单,以便从 Linux GRUB 中进行链式加载。或者,也可以使用 installgrub(1M) 命令,将主引导扇区替换为上面示例中的 Solaris GRUB。

installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t2d0s3

将 Solaris VTOC 和 UFS 实现传播到标准 GRUB 发行版之前,只有 Solaris GRUB 版本具有此项功能。


6. 网络引导和无盘客户机

要从网络进行引导,通常需要一个为 PXE 客户机配置的 DHCP 服务器,以及一个提供 TFTP 服务的引导服务器。如果没有可用的 PXE/DHCP 服务器(或者 BIOS 不包含 PXE 代码),则可以从软盘、CD-ROM 或本地磁盘加载 GRUB,在 GRUB 菜单中手动配置网络,然后从文件服务器引导 Solaris 操作系统。有关其他详细信息,请参见附录 B。

设置 DHCP 服务器是一项因地点而异的任务,应交由本地网络管理员来执行。请参见 Sun BluePrints 文档 "Configuring JumpStart Servers to Provision Sun x86-64 Systems"(配置 JumpStart 服务器以置备 Sun x86-64 系统):http://www.sun.com/blueprints/0205/819-1692.pdf

要引导 Solaris 操作系统,DHCP 服务器必须通过提供文件服务器的 IP 地址以及引导文件名称 (pxegrub) 来响应 BIOS PXE 请求。引导服务器负责提供 pxegrub 二进制文件、GRUB 菜单、多重引导程序以及引导归档。系统提供了一些用于设置引导服务器的标准工具。

6.1 网络安装服务器

可以使用 add_install_client(1M) 命令来设置安装客户机的网络安装。对于 Solaris 10 1/06 和更高的发行版,应始终使用 -d 选项调用 add_install_client(1M) 以进行 PXE/DHCP 引导,即使是使用 GRUB 软盘引导到网络时也是如此。

运行 add_install_client 之后,您会看到 /tftpboot/01<eth_addr>(作为 pxegrub 的链接)和 /tftpboot/menu.lst.01<eth_addr>(包含一个 GRUB 菜单条目)。<eth_addr> 是客户机网络接口的以太网地址(采用大写形式)。此外,网络映像的 /boot 目录是在 /tftpboot 下使用还回命令挂载的,以便能够通过 tftp 访问 multibootx86.miniroot

6.2. 无盘客户机

可以使用 smdiskless(1M) 命令来设置无盘客户机。以早期发行版中,smdiskless(1M) 可设置 rootusr 文件系统,并通过 NFS 将其导出到客户机。但是,用户必须手动配置 /tftpboot 区域以引导客户机。Solaris 10 1/06 操作系统中已删除了此手动步骤。smdiskless(1M) 命令自动调用 /usr/sadm/lib/wbem/config_tftp 中的脚本,以便为 PXE 引导设置 /tftpboot 区域。

运行 smdiskless 之后,您会看到 /tftpboot/01<eth_addr>(作为 pxegrub 的链接)和 /tftpboot/menu.lst.01<eth_addr>(包含一个 GRUB 菜单条目)。<eth_addr> 是客户机网络接口的以太网地址(采用大写形式)。此外,/export/root/<hostname>/boot 是在 /tftpboot 下回送安装的,以便能够通过 tftp 访问客户机的多重引导和引导归档。

在关闭无盘客户机时,将自动更新该客户机的引导归档。如果在关闭客户机时客户机的引导归档已过期,则可以从服务器端使用以下命令更新该归档:

# bootadm update-archive -R /export/root/<hostname>

这适用于基于 SPARC 和 x86 平台的服务器(为 x86 客户机提供服务)。


7. 遗留问题

7.1 Solaris x86 引导分区

对于 x86 系统,Solaris 引导分区是很小(约 10MB)的主 fdisk 分区,采用 PCFS (FAT) 格式。它是在 Solaris 2.6 发行版中首次引入的,主要是因为当时的 BIOS 固件无法访问超过 1024 个柱面的磁盘块。必须将引导代码放在磁盘开头附近的较小区域中。引导分区允许将 Solaris 操作系统安装在非引导磁盘上,从而将引导磁盘的空间要求降至最低限度。

对于较新的系统,不再需要引导分区。从 Solaris 10 1/06 操作系统开始,不再为用户提供创建引导分区的选项。从旧发行版进行升级时,可以保留现有的 x86 引导分区,以使系统可以在没有手动干预的情况下进行引导。在这种情况下,将在 /stubboot 中安装 x86 引导分区,其中包含 GRUB 引导块和菜单文件 /stubboot/boot/grub/menu.lst。用户可以使用以下方法清除 x86 引导分区:从 /etc/vfstab 中删除 /stubboot 条目,修复 /boot/grub/menu.lst,并将 BIOS 重新配置为从 Solaris 磁盘分区进行引导。

7.2 实模式驱动程序

在 Solaris 10 1/06 操作系统之前,将在引导过程中运行实模式驱动程序。某些现有的内核驱动程序可能隐式依赖于相应的实模式驱动程序,以便将硬件设置为特定状态。由于在基于 GRUB 的引导过程中不再运行实模式驱动程序,此类内核驱动程序可能无法正常工作。如果遇到这种情况,请向驱动程序供应商报告此问题,以便对内核驱动程序进行修复。


附录 A. GRUB 基础知识

本附录介绍了 GRUB 的基本概念。本附录中的某些详细信息如有变更,恕不另行通知。有关更多详细信息,请参阅 GRUB 文档。

A.1 设备命名

引导加载器的主要用途是将数据从存储设备加载到系统内存中。要使用 GRUB,必须先了解 GRUB 对设备进行命名的方式。

软盘按如下方式进行命名:

(fd0) -- 第一个、第二个软盘

GRUB 只能引用单个网络接口:

(nd) -- 网络接口

这几乎始终是 BIOS 通过 DHCP 探测和配置的接口。也可以通过从软盘或其他本地介质引导 GRUB 来配置网络接口(请参见附录 B)。

硬盘名称以 hd 和一个数字开头,其中 0 映射到 BIOS 磁盘 0x80(BIOS 枚举的第一个磁盘),1 映射到 0x81,依此类推。

(hd0) -- 第一个 bios 磁盘(也称为 BIOS 引导磁盘 0x81)
(hd1) -- 第二个 bios 磁盘(BIOS 磁盘 0x81)
(hd0,1) -- 第一个 bios 磁盘、第二个主分区
(hd0,0,a) -- 第一个 bios 磁盘、第一个 fdisk 分区、Solaris/BSD 片 0 和 1

请注意,在修改 BIOS 配置时,BIOS 磁盘编号可能会发生变化。因此,如果更改 BIOS 引导磁盘顺序或修改磁盘配置,GRUB 菜单可能会变得无效。要处理与 BIOS 中磁盘编号有关的引导问题,您必须了解磁盘命名约定。

A.2 功能组件

GRUB 功能组件包括 stage1stage2menu.lststage1 安装在 Solaris fdisk 分区的第一个扇区上,可以选择将其安装在主引导扇区上。stage2 安装在 Solaris 分区的保留区域中。menu.lst 位于 /boot/grub 中,可以由 GRUB stage2 读取。

请注意,无法使用 dd(1M)stage1stage2 写入到磁盘中,因为必须向 stage1 告知 stage2 在磁盘上的位置。installgrub(1M) 命令是一种受支持的 GRUB 引导块安装方法。

目前尚不支持 GRUB shell(虽然它位于 /boot/grub/bin/grub 中),某些命令在 Solaris 操作系统中无法正常使用,这是因为在进行 BIOS 调用时对操作系统有些限制。

A.3 GRUB 菜单

缺省菜单文件为 /boot/grub/menu.lst。下次重新引导时,对 menu.lst 进行的手动编辑才会生效。典型的 GRUB 菜单如下所示:

default 0
timeout 10
serial --unit=0 --speed=9600
terminal serial
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris
  root (hd0,0,a)
  kernel /platform/i86pc/multiboot -B console=ttya
  module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris failsafe
  root (hd0,0,a)
  kernel /boot/multiboot -B console=ttya -s
  module /boot/x86.miniroot.safe
#---------------------END BOOTADM--------------------

"default" 行指定计时器到时后要引导的项。"timeout" 行指定引导缺省条目之前等待用户输入的秒数。如果 timeout-1,则需要用户输入。serialterminal 命令共同将 GRUB 输出切换到 serial --unit tip 行中指定的串行端口。root 命令指定从中加载文件的磁盘、分区和片。GRUB 会自动检测文件系统类型。kernel 命令必须后跟多重引导程序。多重引导后面的字符串不经解释就直接传递给 Solaris 操作系统。

要显式指定 64 位内核,请将 GRUB 内核命令修改为:

kernel /platform/i86pc/multiboot kernel/amd64/unix

同样,以下命令将引导 32 位内核:

kernel /platform/i86pc/multiboot kernel/unix

A.4 GRUB 命令模式

可通过在 GRUB 提示符下键入命令来引导操作系统。要显示 GRUB 提示符,请在 GRUB 菜单中按 'c'。键入 'help' 可显示可用命令的列表。按 Esc 可返回到菜单。也可以按 'e' 以编辑现有的菜单项。完成编辑后,按 'b' 可使用修改的 GRUB 条目引导系统。


附录 B. 网络部署

本附录介绍了通过网络在 x86 平台上部署 Solaris 操作系统的最佳做法。本附录中的某些详细信息如有变更,恕不另行通知。有关支持的接口,请参见手册页和 Solaris 管理文档。

B.1 Solaris 网络部署概述

通过网络部署 Solaris 操作系统的设想就是将 Solaris 操作系统映像放在一个集中的位置。连接到网络上的任何计算机都可以引导并安装所选的发行版,而只需管理员进行很少的干预,甚至根本不需要干预。甚至可以通过 Solaris JumpStart 软件在完全没有干预的情况下完成安装过程。

要从网络进行引导,通常需要为 PXE 客户机配置的 DHCP 服务器,以及提供 tftp 服务的文件服务器。DHCP 服务器负责为客户机提供配置其网络接口所需的信息。DHCP 响应还包含文件服务器的 IP 地址以及引导文件名称 (pxegrub)。文件服务器负责提供 pxegrub 二进制文件、GRUB 菜单、多重引导程序以及引导归档。缺省情况下,GRUB 菜单文件为 menu.lst.01<eth_addr>。如果此文件不存在,pxegrub 将使用 DHCP 选项 150(如果指定)或 /tftpboot/boot/grub/menu.lst

使用 PXE 引导 Solaris 操作系统的工作方式如下所示:

  1. 用户将 BIOS 配置为从网络接口进行引导。
  2. BIOS 发送 DHCP 请求。
  3. DHCP 服务器通过提供服务器地址和引导文件名称进行响应。
  4. BIOS 通过 tftp 从服务器下载 pxegrub 并执行它。
  5. 系统通过 tftp 下载 GRUB 菜单文件并显示菜单条目。
  6. 用户选择菜单条目并开始加载 Solaris 操作系统。

在典型的部署方案中,pxegrub 下载多重引导程序和 x86.miniroot 文件,该文件将在内存中解压缩为 miniroot。运行 miniroot 之后,它将在 /cdrom 上安装 Solaris 映像(在 GRUB 菜单的 install_media 属性中指定),并开始执行安装过程。

在下面几部分中,我们将详细介绍 DHCP 服务器设置、客户机要求以及几种不同的部署方案。

B.2 DHCP 服务

客户机发送 DHCP 请求时,将向服务器通知客户机 ID(通常为以太网地址)、请求的“类”,以及客户机所在的子网。Solaris DHCP 服务器将生成基于响应的宏以匹配客户机请求:

  • 类宏

  • 网络宏

  • IP 宏

  • 客户机宏

类宏是按嵌入在 DHCP 请求中的“类字符串”进行命名的。在 x86 平台上,BIOS 始终使用 PXEClient:Arch:00000:UNDI:002001 类发出 DHCP 请求。如果在 DHCP 服务器配置中定义了具有此名称的宏,则会在 B.1 部分的步骤 (c) 中向 x86 客户机发送宏内容。

网络宏是按子网的 IP 地址进行命名的。如果在 DHCP 服务器上定义了宏 129.146.87.0,则会将宏内容发送到该子网上的所有客户机,而不管请求的类是什么。如果同时在类宏和网络宏中定义了某个选项,则网络宏优先。

IP 宏是按 IP 地址进行命名的。在 x86 平台上引导 Solaris 操作系统时,很少会使用 IP 宏。

客户机宏是按客户机类型(01 表示以太网)和 MAC 地址(使用大写字母)进行命名的。对于以太网地址为 0:0:39:fc:f2:ef 的客户机,相应的宏名称为 01000039FCF2EF

假定子网 129.146.87.0 中以太网地址为 0:0:39:fc:f2:ef 的客户机发出 PXEClient 类的 DHCP 请求。

DHCP 服务器具有匹配的宏:

- PXEClient
BootSrvA:  129.146.87.194
BootFile:  pxegrub
- 129.146.87.0
Router:    129.146.87.1
NISdmain:  sunsoft.eng.sun.com
- 01000039FCF2EF
BootFile:  01000039FCF2EF

实际的 DHCP 响应如下所示:

BootSrvA:  129.146.87.194
BootFile:  01000039FCF2EF
Router:    129.146.87.1
NISdmain:  sunsoft.eng.sun.com

请注意,客户机宏中的 BootFile 将覆盖类宏中的 BootFile

B.3 最简单的网络引导设置

在最低配置下,您需要一个服务器和一个客户机。服务器应具有能正常运行的 DHCP 服务器和 Solaris 分发映像。客户端计算机连接到与服务器相同的子网上,该服务器可以支持 PXE 引导请求。以下是设置服务器的步骤,假定服务器的 IP 地址是 192.168.0.123,客户机的以太网地址是 0:0:39:fc:f2:ef

a. 转到 Solaris 分发映像的 Tools 目录并运行:

# add_install_client -d -e 0:0:39:fc:f2:ef i86pc

b. 使用以下信息为 DHCP 服务创建客户机宏名称 01000039FCF2EF

BootSrvA:  192.168.0.123
BootFile:01000039FCF2EF

可以从 dhcpmgr GUI 或命令行界面来完成此操作。

现在,您可以引导客户机并安装 Solaris 操作系统。

B.4 没有 PXE/DHCP 的网络安装

可以从软盘、CD-ROM 或本地磁盘加载 GRUB,在 GRUB 中手动配置网络,并从文件服务器下载 multibootboot_archive。您可能会由于很多原因而需要执行此操作:

  • 客户机的 BIOS 不支持 PXE。
  • 网卡没有 UNDI ROM。
  • 网络上没有 DHCP 服务。
  • 您可以自动完成安装/重新引导序列,而无需在 BIOS 中重新配置引导设备顺序。

随 Solaris 操作系统安装的标准 GRUB stage2 包含网络引导支持。您可以在 GRUB 菜单中按 'c' 转到命令模式,以使用该功能。以下是一个有效示例:

grub> ifconfig --address=192.168.0.02 --gateway=192.168.0.1 
   --mask=255.255.255.0 --server=192.168.123.110
grub> root (nd)
grub> kernel /multiboot.I86PC.Solaris_10-1 kernel/unix -B
   install_media=192.168.123.110:/export/setje/boot_74L2
grub> module /x86.miniroot
grub> boot

当然,必须使用适用于本地网络环境的值来指定 ifconfig 命令。也可以使用上述命令在磁盘或软盘的 menu.lst 文件中添加菜单条目。

请确保先编辑软盘上的 /boot/grub/menu.lst,然后再使用它。如果网卡包含 UNDI ROM,则只需选择基于 UNDI 的软盘映像即可。否则,应选择具有匹配 Solaris 驱动程序名称(bgee1000g 等)的软盘映像。如果您有专用的 GRUB stage2,并要制作您自己的软盘,请按照以下说明进行操作:

<format floppy>
# mount -F pcfs /dev/diskette /mnt (you may have to disable vold prior to doing this)
# cd /boot/grub
# /sbin/installgrub stage1 stage2 /dev/rdiskette
stage1 written to boot sector on floppy
first 2 sectors of stage2 written on floppy

编辑 /mnt/boot/grub/menu.lst 以包含以下条目:

title Solaris
  ifconfig --address=192.168.0.2 --gateway=192.168.0.1 
     --mask=255.255.255.0 --server=192.168.123.110
  root (nd)
  kernel /multiboot.I86PC.Solaris_11-1 kernel/unix -B
     install_media=192.168.123.110:/export/setje/boot_74L2
  module /x86.miniroot

B.5 管理多个 Solaris 映像

如果存在多个 Solaris 映像,则需要使用某种方法来选择要为每个客户机安装的发行版或内部版本。以下提供了可完成此操作的一些可能的方法。

  1. 将 DHCP 服务器保持不变,并在引导服务器上运行 add_install_client
  2. 将引导服务器保持不变,并修改 DHCP 客户机宏(通过 Web 界面)以选择发行版/内部版本。
  3. 将引导服务器和 DHCP 服务器保持不变,客户机从 GRUB 菜单中选择发行版/内部版本。

方案 (a) 是管理引导服务器的标准方法。网络管理员为每个客户机进行一次性的 DHCP 服务设置。此后,客户机用户登录到引导服务器并运行 add_install_client。如果 Solaris 10 FCS 客户机的 DHCP 设置有效,则相同设置也适用于基于 pxegrub 的引导。

方案 (b) 要求使用 DHCP 选项 150 来提供 GRUB 菜单文件。当用户为客户机选择发行版/内部版本时,将修改 DHCP 配置以将选项 150 设置为包含选定发行版/内部版本的菜单文件。请注意,每个发行版/内部版本的菜单文件都必须在引导服务器上创建优先级。如果选定的发行版/内部版本不使用 pxegrub 进行引导,则会配置旧的 Solaris 设置。

方案 (c) 仅适用于基于 pxegrub 的发行版或内部版本。在服务器端添加新的映像时,将会附加一个菜单条目。当客户机引导时,可以选择此新菜单条目。遗憾的是,pxegrub 无法“链式加载”旧的 Solaris 网络引导程序(名为 nbp)。要使客户机选择内容在 nbppxegrub 中均适用,您可以在服务器上配置 pxelinux,它可以加载 nbppxegrub。对 pxelinux 的详细讨论已超出了本文档的范围。

B.6 自动部署序列

自动部署通常执行以下序列:

  • 引导网络并通过 Solaris JumpStart 软件在磁盘上安装 Solaris 操作系统。
  • 重新引导到磁盘并运行预配置的一组任务。

在部署结束后,计算机将处于空闲状态,并等待用户执行操作。

在大多数情况下,可通过按 F12 键(或其他某种按键序列,具体取决于平台)来手动启动初始网络引导。但是,某些系统不支持 BIOS 串行控制台重定向,因而要求用户位于实际控制台是不切实际的。此外,某些 BIOS 提供了一个很短的时限以请求网络引导,从而使用户体验变差。一种解决方法是从软盘引导到网络,然后重写软盘以引导到磁盘。随着较新的平台不再提供软盘驱动器,这种方法不再可行。

建议您从磁盘加载 GRUB。在 /boot/grub/menu.lst 中添加以下菜单条目来引导到网络(以进行 JumpStart 安装),并通过以下命令将其作为缺省引导条目:

# bootadm set-menu default=<menu_entry_number>

其中,<menu_entry_number> 是在下面所添加的选项的菜单项(编号从 0 开始):

title Solaris Jumpstart
        dhcp
        root (nd)
        kernel .../multiboot kernel/unix - install -B console=...
        module ../x86.miniroot

安装系统之后,将自动修改缺省 boot =. 条目以从磁盘进行引导。这样,即可通过关开机循环启动整个部署序列。

B.7 疑难解答

现在,如果这种方法无效,该怎么办?以下是一些疑难解答提示。

a. 客户机直接引导到磁盘,而没有尝试进行网络引导。

这通常意味着禁用了客户机 PXE ROM,或者将 BIOS 配置为先从磁盘引导,而不是先从网络引导。修复方法是进入 BIOS 并修改配置。详细信息因计算机而异。

b. 客户机尝试引导网络,但没有响应。

对网络电缆、接口卡上的 LED 提示灯(如果有)等执行常规检查。在服务器上运行 snoop

# snoop -v [-d <interface>] 0:0:39:fc:f2:ef

其中,<interface> 类似于 bge0。仅当服务器具有多个网络接口卡时,才需要使用 -d 选项。以下是所显示的内容:

  • DHCPDISCOVER (client -> server)
  • DHCPOFFER (server -> client)
  • DHCPREQUEST (client -> server)
  • DHCPACK (server -> client)

如果没有 DHCPDISCOVER 消息,则说明客户机没有进行传输,通常是由于电缆或接口卡故障造成的。

如果看到 DHCPDISCOVER 包,但没有 DHCPOFFER 消息,则意味着服务器没有响应。请查看 DHCPDISCOVER 消息以验证以太网地址是否与 DHCP 服务器中的宏名相匹配。如果服务器使用类宏,请确保宏字符串相匹配。BIOS DHCP 请求中的类字符串始终如下所示:

PXEClient:Arch:00000:UNDI:002001

c. 客户机显示 TFTP 超时消息。

如果没有正确设置 tftp 服务,则可能会出现这种情况。检查服务器以确保启用了 tftpin.tftpd 正在运行),并且 /tftpboot/01000039FCF2EF 文件存在并链接到 pxegrub 二进制文件。add_install_client 步骤应设置 tftp 文件和 tftp 服务。

d. 客户机在下载 x86.miniroot 过程中挂起。

TFTP 协议最多可传输 65K 的块。某些 tftp 服务器(例如,运行 Solaris 8 操作系统的那些服务器)仅支持较小的块大小 (512),而导致最大文件大小仅为 32MB,小于 x86.miniroot 的大小(约 45MB)。可通过升级 tftp 服务器来解决该问题。

如果服务器运行的是 Solaris 8 操作系统,则可以从 Solaris 9 操作系统复制 /usr/sbin/in.tftpd,直至发布了用于 Solaris 8 操作系统的 TFTP 修补程序。

e. 客户机下载完 x86.miniroot 后挂起。

控制台输出内容很可能输出到其他地方。请确保在 GRUB 菜单行中正确设置 console 变量。也可以通过设置 input-device/output-device 来解决该问题。请参见 4.2 部分。

f. 客户机显示“找不到以太网卡”消息。

从本地介质引导 GRUB 以及从网络加载 Solaris 操作系统时,可能会出现这种情况。这表明 GRUB 找不到使用 PCI BIOS32 服务的任何网络接口。

g. 客户机显示“找不到 PnPBios”消息。

从本地介质引导 GRUB 以及从网络加载 Solaris 操作系统时,可能会出现这种情况。在这种情况下,GRUB 找到了网络接口,但找不到 PnP Bios 服务以从网络接口卡安装 UNDI ROM。


参考资料
  1. GNU GRUB Web 页 (http://www.gnu.org/software/grub/grub.html)
  2. GNU 站点上的多重引导规范 Web 页 (http://www.gnu.org/software/grub/manual/multiboot/multiboot.html)
  3. GRUB 和 Solaris 10 1/06 操作系统常见问题解答:用于 x86 平台的新引导加载器 (http://www.sun.com/bigadmin/features/articles/grub_boot_faq.html)

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin
  
 
BigAdmin Upgrade Hub