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 客户带来很多好处。
最后,通过采用开放源代码社区开发的引导加载器,Sun 客户可以利用在该社区中获得的大量 GRUB 经验。 2. 使用 GRUB 引导 Solaris 操作系统GRUB 获得控制权后,它将在控制台上显示一个菜单,要求用户选择要引导的操作系统实例。用户可以选择菜单项,使用内置编辑器修改菜单项,或者在命令模式下手动加载操作系统内核。要引导 Solaris 操作系统,GRUB 必须加载 多重引导程序负责装配内存中的核心内核模块,即读取 内核获得控制权后,它将初始化 CPU、内存和 I/O 设备,并在 3. 安装可以从 CD、DVD 和网络安装服务器中安装 Solaris 操作系统。Solaris 10 1/06 发行版在很多方面不同于 Solaris 10 3/05 发行版:
引导安装 miniroot 时,将显示一个 GRUB 菜单。用户可以交互地编辑引导选项(请参见第 4.2 节)。GRUB 加载 Solaris 操作系统之后,将显示以下安装菜单:
不再提供用户所熟悉的设备配置助理和关联的交互式 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 行中将 kernel ..-B ...,acpi-user-options=2 在这种情况下,系统假定存在一组标准的 ISA 设备,包括键盘、鼠标、两个串行端口和一个并行端口。 4.2 引导选项 要引导 Solaris 操作系统,用户可以指定要加载的内核、传递给内核的选项(请参见 要通过 # eeprom boot-file="kernel/unix -v"
要在 GRUB 菜单上指定相同的内容,请将 GRUB 菜单中的以下 kernel /platform/i86pc/multiboot 修改为 kernel /platform/i86pc/multiboot kernel/unix -v
有关 Solaris 内核所接受的其他引导参数,请参见 在 GRUB 内核命令行中,可以使用以下语法指定 kernel /platform/i86pc/multiboot -B prop1=val1[,prop2=val2...]
要在 kernel /platform/i86pc/multiboot -B console=ttya
如果属性值包含逗号,则应该用引号将该值引起来。以下 GRUB 命令快速将 Solaris 控制台设置为 kernel /platform/i86pc/multiboot -B console=ttya,ttya-mode="115200,8,n,1,-"
简而言之,在 GRUB 菜单中指定 4.3 引导归档 引导归档是指 引导归档的内容是在 4.4 故障安全菜单条目
假定您添加的新软件包中包含错误的驱动程序,系统在引导时将出现故障。重新引导时,您可以选择 Solaris failsafe 菜单条目。在故障安全会话中,在 也可以将 4.5 保持系统的可引导性 要确保系统保持可引导性,必须使 GRUB 引导块、GRUB 菜单和引导归档保持最新状态。 GRUB 引导块位于 Solaris 分区中。如果引导块损坏,应使用 GRUB 菜单位于 修改根文件系统时必须更新引导归档。如果在更新内核文件后随即出现系统故障(电源或内核故障),则引导归档可能与根文件系统不同步。在这种情况下,下次重新引导时,通过 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/06GRUB 菜单应如下所示: #---------- 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 从 Sun 以外的来源获取的 GRUB 目前无法识别 Solaris 盘上 VTOC 和 UFS 格式。Sun 已向 GRUB 项目提交更改以支持此功能;在集成这些更改之前,只有 Solaris GRUB 具有此项功能。如果 Linux 将 GRUB 安装在主引导块上,则即使将 Solaris 分区设置为活动分区,也无法引导到 Solaris 操作系统。在这种情况下,您可以修改 Linux 上的菜单,以便从 Linux 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 地址以及引导文件名称 ( 6.1 网络安装服务器 可以使用 运行 6.2. 无盘客户机 可以使用 运行 在关闭无盘客户机时,将自动更新该客户机的引导归档。如果在关闭客户机时客户机的引导归档已过期,则可以从服务器端使用以下命令更新该归档: # bootadm update-archive -R /export/root/<hostname> 这适用于基于 SPARC 和 x86 平台的服务器(为 x86 客户机提供服务)。 7. 遗留问题7.1 Solaris x86 引导分区 对于 x86 系统,Solaris 引导分区是很小(约 10MB)的主 对于较新的系统,不再需要引导分区。从 Solaris 10 1/06 操作系统开始,不再为用户提供创建引导分区的选项。从旧发行版进行升级时,可以保留现有的 x86 引导分区,以使系统可以在没有手动干预的情况下进行引导。在这种情况下,将在 7.2 实模式驱动程序 在 Solaris 10 1/06 操作系统之前,将在引导过程中运行实模式驱动程序。某些现有的内核驱动程序可能隐式依赖于相应的实模式驱动程序,以便将硬件设置为特定状态。由于在基于 GRUB 的引导过程中不再运行实模式驱动程序,此类内核驱动程序可能无法正常工作。如果遇到这种情况,请向驱动程序供应商报告此问题,以便对内核驱动程序进行修复。 附录 A. GRUB 基础知识本附录介绍了 GRUB 的基本概念。本附录中的某些详细信息如有变更,恕不另行通知。有关更多详细信息,请参阅 GRUB 文档。 A.1 设备命名 引导加载器的主要用途是将数据从存储设备加载到系统内存中。要使用 GRUB,必须先了解 GRUB 对设备进行命名的方式。 软盘按如下方式进行命名: (fd0) -- 第一个、第二个软盘 GRUB 只能引用单个网络接口: (nd) -- 网络接口 这几乎始终是 BIOS 通过 DHCP 探测和配置的接口。也可以通过从软盘或其他本地介质引导 GRUB 来配置网络接口(请参见附录 B)。 硬盘名称以 (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 功能组件包括 请注意,无法使用 目前尚不支持 GRUB shell(虽然它位于 A.3 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--------------------
要显式指定 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 服务器,以及提供 使用 PXE 引导 Solaris 操作系统的工作方式如下所示:
在典型的部署方案中, 在下面几部分中,我们将详细介绍 DHCP 服务器设置、客户机要求以及几种不同的部署方案。 B.2 DHCP 服务 客户机发送 DHCP 请求时,将向服务器通知客户机 ID(通常为以太网地址)、请求的“类”,以及客户机所在的子网。Solaris DHCP 服务器将生成基于响应的宏以匹配客户机请求:
类宏是按嵌入在 DHCP 请求中的“类字符串”进行命名的。在 x86 平台上,BIOS 始终使用 网络宏是按子网的 IP 地址进行命名的。如果在 DHCP 服务器上定义了宏 IP 宏是按 IP 地址进行命名的。在 x86 平台上引导 Solaris 操作系统时,很少会使用 IP 宏。 客户机宏是按客户机类型(01 表示以太网)和 MAC 地址(使用大写字母)进行命名的。对于以太网地址为 假定子网 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
请注意,客户机宏中的 B.3 最简单的网络引导设置 在最低配置下,您需要一个服务器和一个客户机。服务器应具有能正常运行的 DHCP 服务器和 Solaris 分发映像。客户端计算机连接到与服务器相同的子网上,该服务器可以支持 PXE 引导请求。以下是设置服务器的步骤,假定服务器的 IP 地址是 a. 转到 Solaris 分发映像的 Tools 目录并运行: # add_install_client -d -e 0:0:39:fc:f2:ef i86pc
b. 使用以下信息为 DHCP 服务创建客户机宏名称 BootSrvA: 192.168.0.123 BootFile:01000039FCF2EF
可以从 现在,您可以引导客户机并安装 Solaris 操作系统。 B.4 没有 PXE/DHCP 的网络安装 可以从软盘、CD-ROM 或本地磁盘加载 GRUB,在 GRUB 中手动配置网络,并从文件服务器下载
随 Solaris 操作系统安装的标准 GRUB 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
当然,必须使用适用于本地网络环境的值来指定 请确保先编辑软盘上的 <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
编辑
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 映像,则需要使用某种方法来选择要为每个客户机安装的发行版或内部版本。以下提供了可完成此操作的一些可能的方法。
方案 (a) 是管理引导服务器的标准方法。网络管理员为每个客户机进行一次性的 DHCP 服务设置。此后,客户机用户登录到引导服务器并运行 方案 (b) 要求使用 DHCP 选项 150 来提供 GRUB 菜单文件。当用户为客户机选择发行版/内部版本时,将修改 DHCP 配置以将选项 150 设置为包含选定发行版/内部版本的菜单文件。请注意,每个发行版/内部版本的菜单文件都必须在引导服务器上创建优先级。如果选定的发行版/内部版本不使用
方案 (c) 仅适用于基于 B.6 自动部署序列 自动部署通常执行以下序列:
在部署结束后,计算机将处于空闲状态,并等待用户执行操作。 在大多数情况下,可通过按 F12 键(或其他某种按键序列,具体取决于平台)来手动启动初始网络引导。但是,某些系统不支持 BIOS 串行控制台重定向,因而要求用户位于实际控制台是不切实际的。此外,某些 BIOS 提供了一个很短的时限以请求网络引导,从而使用户体验变差。一种解决方法是从软盘引导到网络,然后重写软盘以引导到磁盘。随着较新的平台不再提供软盘驱动器,这种方法不再可行。 建议您从磁盘加载 GRUB。在 # bootadm set-menu default=<menu_entry_number> 其中,
title Solaris Jumpstart
dhcp
root (nd)
kernel .../multiboot kernel/unix - install -B console=...
module ../x86.miniroot
安装系统之后,将自动修改缺省 B.7 疑难解答 现在,如果这种方法无效,该怎么办?以下是一些疑难解答提示。 a. 客户机直接引导到磁盘,而没有尝试进行网络引导。 这通常意味着禁用了客户机 PXE ROM,或者将 BIOS 配置为先从磁盘引导,而不是先从网络引导。修复方法是进入 BIOS 并修改配置。详细信息因计算机而异。 b. 客户机尝试引导网络,但没有响应。 对网络电缆、接口卡上的 LED 提示灯(如果有)等执行常规检查。在服务器上运行 # snoop -v [-d <interface>] 0:0:39:fc:f2:ef
其中,
如果没有 如果看到 PXEClient:Arch:00000:UNDI:002001 c. 客户机显示 TFTP 超时消息。 如果没有正确设置 d. 客户机在下载 TFTP 协议最多可传输 65K 的块。某些 如果服务器运行的是 Solaris 8 操作系统,则可以从 Solaris 9 操作系统复制 e. 客户机下载完 控制台输出内容很可能输出到其他地方。请确保在 GRUB 菜单行中正确设置 f. 客户机显示“找不到以太网卡”消息。 从本地介质引导 GRUB 以及从网络加载 Solaris 操作系统时,可能会出现这种情况。这表明 GRUB 找不到使用 PCI BIOS32 服务的任何网络接口。 g. 客户机显示“找不到 PnPBios”消息。 从本地介质引导 GRUB 以及从网络加载 Solaris 操作系统时,可能会出现这种情况。在这种情况下,GRUB 找到了网络接口,但找不到 PnP Bios 服务以从网络接口卡安装 UNDI ROM。 参考资料
Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License. |
BigAdmin SubscriptionsBigAdmin Areas
BigAdmin Sun Center
BigAdmin Topics |