跳转到内容

来自维基教科书,开放世界中的开放书籍

启动管理器和本文档由 André Fischer 编写,现由 ETH SVN 代码库ETH 许可证 下维护。那里七个相关的文件以“BootManager”开头。以前位于 ETHZ 上的 OCP 服务器上的页面仍然可以从 WayBack 存档 获取。

启动管理器

Bluebottle 启动管理器及其与类似产品的关系 - 2008 年 2 月 13 日


 

Oberon 启动管理器的菜单。这是使用 ETH Oberon 在 QEMU 上制作的屏幕截图。
目录
* - * - * - * - * - *
 
简要介绍启动机制的理论

启动操作系统可以看作是三个过程的序列

  ▪ 以机器为中心的进程:BIOS 定位可启动卷

当计算机开机时,计算机的 BIOS 会找到用户在 BIOS 设置中定义的主可启动设备,并将控制权转移到主引导记录 (MBR),即启动卷上第一个磁道的第一扇区 (512 字节)。随着固态设备/磁盘与传统硬盘的竞争,更普遍的术语“卷”优于“硬盘”、“设备”或“HDD”。DOM(磁盘模块)和闪存驱动器也是线性组织的大容量存储设备。由于闪存驱动器中没有任何机械驱动,因此这个名称是一个误称。事实上,分区有时被称为“卷”,但这似乎不合适。

卷要么已分区,要么只有一个分区。后者的情况,即卷可以被称为“超级软盘”,这里不予考虑。术语“块”,通常在 Bluebottle 中使用(见 LBA 逻辑块地址),等效于“扇区”,它与硬盘的物理形状相关。一个块存储 512 字节。分区要么是主分区,要么是扩展分区。后者是一个容器,可以容纳一个或多个逻辑驱动器。根据微软的说法,逻辑驱动器与主分区的功能相同,只是它们不能用于启动操作系统。对于 AOS 系统,术语“逻辑驱动器”更适当地被替换为“逻辑分区”,因为容器是透明的。

备注

AMI、Asus、Award、Gigabyte、Intel、Phoenix 和其他 BIOS 的行为各不相同,并存在许多版本。对 USB 的不同级别支持进一步复杂化。一些 PC 可以从 USB 启动,而另一些则有 USB 但不能从 USB 启动。当从 USB 设备启动失败时,要么是 PC 出现故障,要么是设备出现故障。硬件和软件存在于无数种组合中,因此很难或不可能预测启动管理器在特定环境中的行为。以下文本散布着在使用各种产品品牌时遇到的特殊情况的示例。尽管存在这些困难,启动管理器已成功用于许多 Shuttle、Qbic 和 ASUS 机器以及英特尔主板。

  ▪ 以启动管理器为中心的进程:用户选择要启动的分区。

启动操作系统的传统方式是加载并执行 MBR 中的代码,然后加载并执行“活动”分区的分区引导记录 (PBR) 中的代码,如 MBR 中的分区表中所述。此概念仅适用于主分区,不适用于逻辑分区,并且会被此启动管理器忽略。此启动管理器提供的替代方案是加载并执行另一个卷的 MBR,就像 BIOS 将控制权转移到启动卷的 MBR 时一样。

MBR 包含启动管理器阶段 1。鉴于 MBR 的体积小,阶段 1 只做了加载和将控制权转移到位于第一个卷磁道中的阶段 2 的工作,紧随 MBR 之后(见下面的第 1 节)。阶段 1 还通过一个唯一的签名验证加载的阶段 2 是否有效。

阶段 2 接收控制权后,它会显示一个可供启动的操作系统的文本菜单。选择目标操作系统会导致启动。它也准备自动启动上一次重启前选择的操作系统(见用户友好性)。

在系统启动时,只有 BIOS 驱动程序可用于访问卷,幸运的是,现代 BIOS 包含 P-ATA、S-ATA、ATAPI 和 USB 驱动程序,足以从各种卷启动操作系统。Firewire BIOS 支持目前很少见,尚未探索。启动管理器在 BIOS 支持扩展 INT 13h 时支持逻辑块地址 (32 位 LBA) 模式。简单 INT 13h 的 CHS 模式要求 PBR(任何分区的第一个块)驻留在 8.4 GB 边界以下。32 位 LBA 模式使得可以寻址 2 TB 的存储空间。不支持 48 位 LBA 模式。BIOS 设置控制寻址模式。

  ▪ 以操作系统为中心的进程:PBR 将控制权转移到特定于操作系统的引导加载程序,该引导加载程序定位并加载内核。操作系统启动。

例如,Bluebottle 引导加载程序 OBL.Bin 位于分区的开头,它会定位并加载与启动卷特征匹配的内核,即

        ▪ P-ATA/S-ATA 大容量存储设备上的 AosIDE.Bin
        ▪ ATAPI CD-ROM 上的 AosIDE.Bin,用于生成 Live CD - https://en.wikipedia.org/wiki/Live_CD
        ▪ USB 大容量存储设备上的 AosUSB.Bin,用于生成 Live USB - https://en.wikipedia.org/wiki/LiveUSB

Trace 是引导加载程序放弃控制权后执行的第一个内核模块。直到 2007 年底,执行的第一个内核模块是 Machine。

功能概述

非侵入式多重多启动管理器,旨在控制每个机器启动时由 BIOS 识别的最多 8 个卷上的最多 12 个主分区或逻辑分区。

可以与存在于其他卷上的其他启动管理器共存。检测卷的 MBR 中 GAG、GRUB、LILO 和 Windows 的存在。

使用 Bluebottle 安装,也使用与安装 Bluebottle 相同的 Live CD 安装在各种卷上

        ▪ 可以从包含的 BootManager.iso 文件刻录可启动的 CD-ROM
        ▪ 可以从包含的 BootManager.Bin 文件创建可启动的软盘
        ▪ 或直接使用 WMInstaller 安装在卷的 MBR 上

保留 MBR 的分区表的完整性和 Windows Vista 在 MBR 中使用的磁盘签名的完整性。

不需要专用分区。

可以安装在任何卷上并从中运行,包括内部或外部、固定或可移动卷,包括 USB-FDD 和 CD-ROM。

能够启动安装在 2 TB 边界以下分区中的操作系统(32 位 LBA 模式)。

将日常工作中的易用性与与普遍存在的外部 USB 和其他存储设备相关的机器设备和卷控制的非常专业的检查相结合。

用汇编语言(Nasm 语法)编写,开放源代码包含在 Bluebottle 版本中。

本文档详细说明了它与其他一些竞争的启动管理器的关系,以及它如何与这些启动管理器共存。

功能详情

Bluebottle 启动管理器是围绕传统 MBR 设计的,传统 MBR 出现在大多数机器上,在分区表中为四个 16 字节的分区表条目提供空间。扩展分区可以使用一个条目,逻辑分区可以链接到该条目,数量不受限制。没有考虑像 Ranish Partition Manager 这样的具有另一个分区表组织的启动管理器,该组织用于突破 4 的限制。也没有考虑提议的 Intel EFI 标准。

1. 给定卷上的物理位置
它包括 LBA=0 处的 MBR 和位于“磁道 0”剩余空间中的少量块。该范围内的块通常保持未使用并填充 0,除非安装了第三方启动管理器。例如,GRUB 和 Boot-US 就是这种情况。“磁道”与卷的物理组织有关,因为它曾经存在于早期。如今,每磁道扇区数量是一个逻辑值。
第一个分区通常在安装操作系统期间创建和格式化,这会修复使用的第一个 LBA。在大多数情况下,会格式化一个出厂全新卷并预安装操作系统。使用的第一个 LBA 编号会根据卷几何形状而异,更准确地说,是每磁道的扇区数量。以下值可以作为第一个使用的 LBA 编号观察到
        ▪ LBA = 2048 在大容量卷上,例如安装了 Windows Vista 的卷
        ▪ LBA = 63 是 USB 和 HD 卷 < 100 GB 的标准
        ▪ LBA = 32 在 CD-ROM FDD 模拟(见下一节)和出厂全新 ZIP 100 卷上
        ▪ LBA = 16 在出厂全新 32 MB 磁盘模块 (DOM) 上

目前,代码和数据占用 13 个块,两个块专用于工作区。

2. 可以安装它的卷

它可以安装在 PC 的任何卷上并从中运行,包括内部或外部、固定或可移动卷。这已在各种介质上进行了测试:3.5 英寸软盘(仅限 USB-FDD)、2.5 英寸和 3.5 英寸 HDD(P-ATA、S-ATA)、模拟 FDD 的 CD-ROM(使用 Bluebottle、Nero、Magic ISO 刻录)、USB 闪存(SD、CF)、固态磁盘(例如 DOM)和 USB-ZIP(仅限 Iomega ZIP 100 MB 测试)。它可以独立安装,无需对卷进行分区或安装操作系统,正如从列出的软盘中可以理解的那样,该软盘的容量极小,仅为 1.44 MB。当它独立安装在 CD-ROM 或 USB-FDD 上时,它可以使用,而不会干扰通常的启动卷的 MBR 或启动管理器。可以稍后决定是否将其安装在通常的启动卷上。它是通用的,因为它可以安装在同一台机器的多个卷上,因此它有资格成为多重多启动管理器。

它安装在其上的每个卷(前提是 BIOS 可访问/可启动,见引言中的备注)都可以控制机器,以便启动特定的操作系统。显然,BIOS 设置中的设备优先级顺序将定义要首先启动的卷以及访问它们的顺序。

托管 Bluebottle 分区的卷

Bluebottle 的占用空间非常小,这意味着在一个相当大的卷上,您会发现多个 Bluebottle 分区,可能与其他操作系统共存,或者在一个小尺寸卷上只有一个分区,从最小 62MB 开始。在后一种情况下,USB-HDD 闪存(U 盘)是托管整个操作系统及其应用程序的理想存储介质。无需将笨重的个人电脑拖到办公室或出差。只需将 U 盘插入个人电脑并启动 Bluebottle。鉴于快速的数据传输、高容量和其他技术进步,U 盘越来越受欢迎。只要 BIOS 和 USB 设备本身支持从 USB 启动,您就可以接管机器,而无需访问(写入!)机器的内部存储,也无需在内部硬盘上进行永久安装。如果无法从 USB 启动(例如,旧的 BIOS 可能禁止它),则可以从 CD-ROM 或 USB-FDD 启动以引导 USB 设备(请参阅第 5 节)。

这里值得一提的是一种特殊情况:在非常小的卷上,比如 64 或 128MB,不仅难以想象有多个分区,而且一个工作的 Bluebottle 只能勉强容纳,没有空间存放用户数据。在这种情况下,最好格式化一个没有内核和程序的单一分区。这样的分区仅用于数据存储,不可引导。但是,它会显示在分区列表中。

BIOS 卷检测和枚举
在 Boot Manager 控制下,USB 设备受 BIOS 条件限制,BIOS 会检测和枚举它们。请参阅“Compaq、Intel、Phoenix BIOS 启动规范 1.1”。在这方面,BIOS 表现出不友好的行为,因为卷枚举取决于不同卷的特性:一些被识别,另一些则没有。

卷从左到右排列,可以辨别出两组:
  ▪ 被识别为 80h、81h、82h、... 的硬盘 - 传统的“固定”磁盘,现在
包括支持变更行的可移动媒体设备
  ▪ 被识别为 00h 的 FDD - 传统的“可移动”磁盘(CD-ROM、USB-FDD、USB-ZIP)。

仅考虑其中一个:当它是引导设备时,它将是 CD-ROM;如果它被 BIOS 识别为 USB-FDD,它将是 USB-FDD。

引导卷始终显示在最前面,其类型(硬盘或 FDD)决定了哪组首先列出。最多可以同时控制 8 个卷。在一个大量廉价且无处不在的外部 USB 存储设备可以连接到 PC 的时代,这是一个重要的设计考虑因素(请参阅第 3 节)。

从 CD-ROM(模拟 FDD)启动

CD-ROM 必须符合 El Torito 可引导 CD 格式,使用 CD 上的文件模拟软盘。BIOS 将引导卷识别为 00h,它排在第一位,并且在它的组中是唯一的,之后是 ATA 硬盘和 USB-HDD。包含的 BootManager.iso 文件是分发 Bluebottle 启动管理器的最佳载体。

从 USB-FDD 启动

软盘只能在加载到 USB-FDD 中时使用。考虑到现在的 PC 很少配备传统的 FDD,这些设备不再受支持,并且被简单地忽略。如果存在 FDD,则无需在 BIOS 设置中禁用它。

从内部 P-ATA 硬盘启动

BIOS 将引导卷识别为 80h,然后是其余的 ATA 硬盘,最后是 USB-HDD。

从外部 USB-HDD 或 USB-ZIP 启动

BIOS 将引导卷识别为 80h,然后是 ATA 硬盘,最后是其余的 USB-HDD。

在一台机器上,卷被标记为“n.a.”,表示“不可访问”(没有对此奇怪情况的解释,BIOS 返回了正确的卷计数,但无法访问它们)。

当高速 USB 2.0 设备连接到 USB 2.0 集线器时,此设备以 USB 1.1 速度受支持 - 12MB/s。只有在操作系统安装驱动程序之后,才会建立高速数据传输。在 Disk2go 设备上可以观察到速度差异,该设备以绿色 LED 信号表示 12MB/s 速度,在高速时以红色亮起。

BIOS 启动卷顺序由 BIOS 设置控制

根据 BIOS,设置通过按 DEL、PF2 或 PF1 键调用。启动卷顺序可以更改。在修改设置时,请记住禁用 FDD,如果提供“即插即用操作系统”选项,请选择“否”。或者,可以保持 BIOS 设置不变,并在调用 BIOS 启动菜单后选择启动卷(通常在系统启动时按 ESC 或 PF8 键,具体取决于 BIOS)。

请参阅机器随附的用户指南(BIOS 设置部分)。

对大卷大小的支持

LBA寻址方案用于每个分区表条目中保留的 32 位。给定 512 字节的块大小,最多可以寻址 2'048 GB 的卷。启动管理器还可以通过将 LBA 映射到其 CHS 等效项来使用 CHS 寻址方案。测试扩展 INT 13h 支持的存在指示是否需要映射。当使用 CHS 寻址方案(使用 24 位地址)时,卷大小限制为 8GB,这在当今的环境中很少见。

3. 独立于主机操作系统

只要 PC 和连接的 USB 闪存驱动器可以从 USB 启动,插入安装了 Bluebottle 的闪存驱动器的用户将发现使用硬件的最佳和最安全的方式,而无需使用或更改机器上的驻留操作系统或可能的第三方启动管理器。当 USB 卷配置为,必须包含 AosUSB.Bin 内核,但不能访问 IDE 卷时,安全性最高。如果需要,可以通过执行 ATADisks.Install ~ 来激活 IDE 驱动程序模块。之后,任何 IDE 分区都可以挂载和访问,但风险自负。

所有这些都可以通过非常原始的 MBR 实现,但 Bluebottle 启动管理器提供了附加价值,它能够完全控制机器的卷和分区,从而在一定程度上充当主机。

如果无法做到这一点,它允许将控制权转移到主机 MBR 管理器,而不会以其他方式干扰,也不需要重新启动。Bluebottle 启动管理器是协作且非侵入性的(请参阅第 5 节)。

那些可能犹豫是否安装 Bluebottle 启动管理器的用户,可以选择将 Bluebottle 包含在某些第三方操作系统(如 Windows Vista)的启动菜单中。

4. 用户指南
以下是一个示例菜单,可以在启动管理器启动时访问。

======================================================
Bluebottle BootManager 28/01/2008
GenuineIntel                Intel(R) Pentium(R) 4 CPU 3.0GHz
64-bit processor  Family 0Fh Model 04h Cores: 1 Logicals: 2 HT: Y
BIOS/MBR 80 detected volumes:
>80 117M  >81 19G   >82 9G
 USB           IDE          IDE
 ^^^^^^
Volume 80 (Mode LBA 5) - MBR: Bluebottle  - Vol. signature @ 1B8h: 66 0D 67 0D
   Partitions: (those marked in red cannot be accessed)
1 OBERON      4C
Enter one of the following:
  the number of a partition hosting an OS to start
              Set ScrollLock to halt Bluebottle start-up.
            Selection will replace current default vol. xx , part. yy
        n(ext) or  p(revious) volume ^^^^^^
        v to toggle graphic VBE info
        i to toggle PCI vendor/device info
        l to toggle 25/50 lines
        s to switch to MBR on selected volume
======================================================

无论何时启动,启动管理器都会报告 CPU 特性:

  ▪ CPU 类型:Intel、AMD、Via(以前称为 IDT/Centaur)或其他
        注意:仅对一小部分 CPU 进行了测试。
  ▪ 速度
  ▪ 宽度(32 或 64 位)
  ▪ 是否支持超线程
  ▪ 内核、逻辑处理器、线程数量

下一行(以红色突出显示)指示从哪个卷中提取了 MBR/启动管理器。正是这段代码生成了向用户呈现的报告。大多数情况下,它是引导卷的 MBR,除非用户请求切换到另一个卷的 MBR(请参阅下面的响应“s”)。

在后续行中,列出了 BIOS 检测到的所有卷,从左到右排列,从引导卷开始(第 2 节)。此外,如果存在,还会检查该卷的分区表,并显示所有驻留分区。从此处,可以选择合适的分区来启动操作系统,前提是它已正确安装。否则,可以选择另一个卷(如果有),并重复相同的分区表检查过程。通过输入“n”表示“下一个”或“p”表示“上一个”来选择卷。当前选定的卷在下一行用 6 个“^”字符的字符串来强调。

对于访问的每个卷,都会显示主引导记录 (MBR) 的类型。会检测到 Bluebottle、GRUB、LILO 或 Windows(用“外部”表示)启动管理器的存在。因此,没有必要在所有卷上安装 Bluebottle 启动管理器。仍然可以调用其他现有的 MBR 和启动管理器,并且它们可以完全正常工作。这可以通过对提示文本响应“s”来完成,这同样适用于启动管理器本身。

应要求,它还会显示:
  ▪ 图形控制器支持的 VBE VESA 模式列表(对提示文本输入“v”)。Bluebottle 需要使用线性帧缓冲区的 VESA 模式。会生成适合模式的列表,其中模式显示为 3 位数绿色值。这样的值是配置数据元素“Init=”的重要参数。安装 Bluebottle 时,会将“Init=117”设置为默认值,对应于 1024 x 768 x 16 的分辨率,在大多数图形控制器上都可以使用。用户可能希望在启动 Bluebottle 时,从列表中选择具有更高分辨率的 VESA 模式。

  ▪ 已安装的 PCI 设备列表(对提示文本输入“i”)。

文本显示在 50 行 80 个字符的行上,与默认的 25 行布局相比。输入“l”可以切换行数。启动管理器强制执行 50 行模式,与默认的 25 行模式相比。经验表明,除了在 50 行模式不受图形控制器支持的情况下(目前尚未遇到这种情况)外,切换实际上并不需要。

任何无效的输入都会收到确认:“无效输入,请重试”。

总之,它指导用户:

  ▪ 每天启动首选操作系统
  ▪ 每天从多个安装的操作系统(可能是不同的操作系统)中选择并启动一个操作系统
  ▪ 有时恢复因卷主引导记录损坏而变得不可访问的操作系统
  ▪ 偶尔检查机器设备并决定它是否适合运行 Bluebottle,尤其是在考虑购买时。请记住验证机器是否允许从 USB 启动,这确实是一个非常有用且值得推荐的功能。另请参阅第 5 节。

5. 它可以启动的操作系统
它可以启动位于以下位置的操作系统:
  ▪ 它所在的卷上,以及
  ▪ 另一个卷上。

TUI 允许选择卷,并选择要启动的操作系统,而与其他类似系统中通常定义的启动顺序无关。操作系统通过以与 BIOS 相同的方式访问 PBR 来启动,就像 BIOS 通常会与 MBR 协作一样。

每个选定的卷最多可以列出 12 个分区。请记住,无法访问扩展分区,但它将在列表中以红色显示。

假设将安装了可引导 AOS 的 USB-HDD 插入到无法从 USB 启动的机器中,那么仍然可以从 CD-ROM 启动,然后启动 USB 上的 AOS。除了启动顺序之外,无需更改机器上的任何设置。

与所有 Windows 版本兼容。与 x64(AMD62/EM64T)和 Windows 64 位(非 GPT)兼容。

最后但并非最不重要的一点是,任何卷上的启动管理器都可以用来启动驻留在另一个卷上的操作系统,该操作系统具有不同的启动管理器,例如 GRUB,或者具有损坏的 MBR 但分区表完好的卷。

6. 不需要特殊分区
它既不占用分区,也不放置在分区内(请参阅第 1 节)。

7. 用户友好性
启动管理器会报告它所能报告的关于机器上存在的所有卷及其分区的信息。它不依赖用户提供的配置数据,也不应该被配置。但是,即使报告是真实的,它也不会包含全部真相,比如,一个定义了但没有安装可启动操作系统的分区。启动管理器无法处理这种用户应负责任的情况,将中止并不会恢复或发出警告。

它会优雅地记忆在其中一个块(LBA 号 12)中,最后选择的用于启动所需操作系统的卷和分区,除非它是从 CD-ROM 启动的,原因很明显,或者是从软盘启动的,因为软盘被认为只用于启动操作系统,而不是真正绑定到任何机器上。

下次启动机器时,相同的操作系统会自动启动,无需用户干预。

但是,如果用户希望启动不同的操作系统,在 MBR 接管控制之前立即设置 ScrollLock 键,将暂停启动管理器的执行,并显示一个提示文本,用于选择其他选项。

在全新安装后,默认卷和分区未定义,其执行将不可避免地暂停,以便与用户交互。

它(应该!)不会损坏安装在卷第一个磁道上的其他启动管理器(GRUB、Boot-US)。

8. 无“活动”分区概念
它允许通过链加载机制启动操作系统,而不需要依赖于“活动”分区的检测(甚至不是 Windows 分区)。

发布交付中包含的材料

 1. BootManager.Text - 本文档
 2. BootManager.Asm - Nasm 语法源代码
 3. BootManager.Bin - 汇编后的启动管理器 = 阶段 1 + 阶段 2
 4. BootManager.iso - 用于刻录 CD-ROM 的 ISO 文件
 5. BootManagerNull.Bin- 512 字节帮助文件,用于生成 BootManager.iso

库存文件 BootManager.Bin、BootManagerMBR.Bin 和 BootManagerTail.Bin 可从仓库获得,https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk/source/。提交用户名 infsvn.anonymous 和密码 anonymous。创建这些文件的说明如下。

如何创建、安装和启动启动管理器

1. 使用网络汇编器语法编写汇编代码

使用 Nasm 代码编写,在实模式下运行。从 BIOS 接收控制权,接口如下:

  ▪ MBR 加载到地址 7c00h
  ▪ 寄存器 dl 包含引导卷标识符。从 CD-ROM 或 USB-FDD 启动时为 0,从已分区的卷启动时为 80h。

当启动管理器处于控制状态时,用户可以选择将控制权转交给

  ▪ 可启动分区的 PBR,以启动操作系统,假设它已正确安装,
  ▪ 或者另一个卷的 MBR(它甚至可以将控制权转交给自身)。

2. 汇编代码
2.1 在 Oberon 中,将 Oberon 文本转换为纯 ASCII,为 Windows/DOS 处理做准备,使用:Miscellaneous.MakeDOSText name.Asm => name.ASC ~

2.2a 在 DOS 中:使用网络汇编器汇编源文本 *.ASC

2.2b 在 Windows 中:在 DOS 框中使用 ansmw.exe。命令参数详细信息请参阅:nasmw -h

2.3 在 Oberon 中,使用 Backup.ReadFiles name.BIN ~ 读取 .BIN 文件

此时,您将获得 BootManager.Bin,包含 6656 字节[1]。即 13 个 512 字节块。BootManager.Bin 可从仓库获得, https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk/source/.

3. 生成安装数据
3.1 对于已分区的卷,步骤 2 中获得的 BootManager.Bin 由 WMInstaller 处理,并拆分为

  ▪ 一个块放置在 MBR 中,
  ▪ 12 个块放置在 LBA 1 到 12 的块中。

这两个部分也可以从仓库中获得,以 BootManagerMBR.Bin 和 BootManagerTail.Bin 文件的形式提供。

3.2 对于软盘,步骤 2 中获得的 BootManager.Bin 可以直接使用,无需进一步操作(转到 4.3)。

3.3 用于刻录可启动 CD-ROM 的 ISO 映像文件
与 I386.Aos.Tool 中用于创建新版本的相同流程。在 Oberon 中,执行以下命令

Configuration.DoCommands
OFSTools.Mount SYS RamFS 200000 4096 ~
System.DeleteFiles AOS:BootManager.iso ~
FileDisks.Open SYS:AosCD.Dsk 600 ~
Partitions.Format SYS:AosCD.Dsk#0 AosFS 0 BootManagerNull.Bin ~ (boot file reserve size must be multiple of 4)
Partitions.FileToPartition SYS:AosCD.Dsk#0 BootManager.Bin 0 13
FileDisks.Close SYS:AosCD.Dsk ~
Aos.Call \w IsoImages.Make AOS:BootManager.iso SYS:AosCD.Dsk ~
OFSTools.Unmount SYS
~ 

注意:BootManagerNull.Bin 是一个填充有 00h 的 512 字节文件,它取代了 AosIDE.Bin 或其他内核。

然后使用发行版中包含的 BootManager.iso 映像文件刻录可启动 CD-ROM(参见第 4.4 节)。

4. 安装启动管理器
4.1 安装规划

如果一个卷已经包含了多个操作系统,那么应该首先规划
  ▪ 收集有关当前卷组织的信息:卷大小、分区数量、操作系统类型、是否存在启动管理器。

所有这些都可以使用 Bluebottle 分区工具轻松完成:在主菜单中依次选择 > 文件 > 分区,或使用 Oberon 分区工具:执行 Partitions.Show detail ~
  ▪ 备份当前卷的 MBR,以及某些启动管理器使用的轨道 0 中的剩余块(如果需要)。

这可以使用 Bluebottle 分区工具完成,如上所述,然后选择“保存到文件”,或使用 Oberon 分区工具:执行

Partitions.PartitionToFile dev#0 MBRBackup.Bin 0 1 ~

标识符“dev”必须替换为具体的设备名称;例如“IDE0”。可能需要保存多个块。可以通过执行以下命令检查此文件

Hex.Open MBRBackup.Bin ~

如果出现问题,可以执行以下命令还原 MBRBackup.Bin 文件

Partitions.WriteMBR dev#0 MBRBackup.Bin ~

4.2 在已分区的卷上,在 AOS 中执行

WMInstaller.Open ~

并按照说明操作。

或者,在 Oberon 或 AOS 中使用以下命令。

Partitions.WriteMBR dev#0 BootManagerMBR.Bin ~
Partitions.FileToPartition dev#0 BootManagerTail.Bin 1 12 ~

当使用 hypervisor 安装 Oberon 时,可以启动新安装的系统,然后像上面那样安装 BootManager。

在 Linux 中使用 dd 命令可以达到相同的效果。在2021-07-06 的邮件列表中解释了块大小为 446。

sudo dd if=MY/BootManagerMBR.Bin  of=/dev/sdX bs=446 count=1
sudo dd if=MY/BootManagerTail.Bin of=/dev/sdX seek=1 count=12

标识符“sdx”必须替换为具体的设备名称,例如“sdf”。请谨慎操作。如果指定了错误的设备,主机设备中的数据将变得不可访问,这将立即禁用主机系统。请仔细识别设备。

4.3 在可启动 CD-ROM 上

在主菜单中依次选择 > 文件 > CD 录制器 > 工具 > 刻录 ISO 映像

然后浏览以找到 BootManager.iso 并刻录 CD-ROM。不过,不能保证这样创建的 CD_ROM 在所有机器上都能读取。最好使用第三方软件,例如 Nero。MagicISO 是另一种此类软件。

4.4 在软盘上

可能只需要暂时启用 FDD,以便在软盘上安装启动管理器,以便在 USB-FDD 上使用。

在 FDD 中插入一张 DOS 格式化的软盘,并在 AOS 中执行:Diskettes.Install ~

导航 > 文件 > 分区 > 选择一个分区 > 分区 > 从文件 >

文件名:BootManager.Bin / 偏移量:0 / 块数:13

或者在 Oberon 中

Diskettes.Install ~ Partitions.FileToPartition Diskette0#0 BootManager.Bin 0 13 ~

(13 = 1 MBR + 12 个块)

5. 启动启动管理器
启动 PC,并将其引导到它所在的卷(通过 BIOS 设置或启动菜单)。

要打开启动管理器菜单,请使用 ScrollLock 键,或按住 Ctrl、Alt 或 Shift 键,如 A2 启动顺序中的表格和脚注 (2a) 和 (5) 中所述。

6. 当安装新的操作系统时,Bluebottle 启动管理器会发生什么?
如果安装或重新安装另一个操作系统,该操作系统会覆盖/替换 MBR 用于自身目的,则 Bluebottle MBR 可以轻松恢复。例如,Windows 安装会有效地替换 MBR。因此,在重新安装 Bluebottle MBR 之前,用户需要进行处理以确保 Windows 的完整性,否则 Windows 安装将失败。如果 Ubuntu 等操作系统建议安装 GRUB,则会出现两种情况:GRUB 安装在 MBR 中,最终会覆盖 Bluebottle 启动管理器,或者安装在一个分区(可能是专用分区)中,不会造成干扰。

7. 如何恢复操作系统的原始 MBR
在 Oberon 中,执行 Partitions.WriteMBR dev#0 MBRBackup.Bin ~

8. 如何在启动 Bluebottle 时访问其他卷
通常,Bluebottle 被配置为包含它所在的卷的磁盘驱动程序,即,使用的内核是 AosIDE.Bin 或 AosUSB.Bin。因此,在需要时确保安装另一个驱动程序。命令如下:
  ▪ ATADisks.Install
  ▪ UsbHubDriver.Install 后跟 UsbUhci.Install

竞争的启动管理器

提供了多种启动管理器来控制多引导系统。以下列举了一些非详尽的枚举:Windows(所有类型)内置的启动管理器、GRUB、GAG、LILO、BootIt、Boot-US。选择合适的启动管理器并不容易,但在大多数情况下,一个或两个启动管理器是操作系统发行版的一部分。一个好的选择是将启动管理器的选择和安装委托给操作系统安装程序。在安装时,这可能不是什么大问题,但应充分了解其影响。

启动管理器争夺第一个磁道的空间,或者至少争夺 MBR。事实是,一个启动管理器可能会覆盖另一个启动管理器。一些安装程序通过将现有操作系统集成到启动菜单中来修复损坏。这是大多数 Linux 发行版提供安装 GRUB 或 LILO(检测 Windows 和其他 Linux 分区的是否存在)的情况,但 Windows 并非如此,它忽略所有操作系统,除了自身。Windows 会覆盖 MBR,而不会给出提示。不幸的是,可以理解的是,GRUB、LILO 和 Windows 都无法检测到 AOS 分区的是否存在。

在安装操作系统时,您可以选择不安装建议的启动管理器,但这假设您知道如何修剪现有启动管理器的启动菜单。对于那些不希望采用 Bluebottle 启动管理器的人,本文提供了一些说明,说明如何将 AOS 绑定到他们喜欢的启动管理器中。请参见“如何使用其他启动管理器启动 AOS”。总的来说,这些说明也适用于其他操作系统。

启动管理器以多种方式安装,总结如下

  ▪ 在 MBR (LBA=0) 和第一个磁道限制内的后续块中。GRUB 是一个例子,Bluebottle 启动管理器是另一个。LILO 占用 MBR 且不再占用其他空间。
  ▪ 在一个专用主分区中,占用 MBR 分区表中 4 个可能条目中的一个。GRUB 是一个例子。
  ▪ 在托管操作系统的分区中。Windows Vista 和其他 Windows 版本以这种方式安装其启动管理器。GRUB 也能安装在 Linux 分区中,甚至安装在交换分区中。LILO 安装在 Linux 分区中。

最终,将决定哪个启动管理器占优,最重要的是关于 MBR,将由操作系统在卷上的安装顺序决定。

建议
无论安装顺序是用户决定的还是由情况决定的,都需要一个合理的策略来对操作系统的安装进行排序。Windows 经常成为绊脚石。

安装多个操作系统的操作涉及的复杂性很高,这里只提供很少的信息。

NeoSmart 网站记录了成功实现目标所需的所有步骤,即先安装 Vista 还是后安装 Linux

  ▪ 将 Linux 添加到 Vista 启动加载程序 - https://neosmart.net/wiki/display/EBCD/linux
  ▪ 双重启动 Ubuntu Linux 和 Windows Vista - https://neosmart.net/wiki/display/EBCD/Ubuntu
  ▪ 双重启动 Fedora Linux 和 Windows Vista - https://neosmart.net/wiki/display/EBCD/Fedora

总之,只要有可能,请先安装 Windows Vista,然后再安装其他操作系统。

Bluebottle 启动管理器的多启动功能基于链式加载机制:启动管理器将启动过程交给另一个(启动管理器或启动加载程序)。它要求 Vista 启动管理器、GRUB、LILO、GAG 或其他程序完成启动过程,从而最大限度地减少配置要求并确保与各种操作系统最大限度的兼容性。

在这些条件下,可以启动

  ▪ 任何地方的 AOS
  ▪ 安装在主分区中的 Windows Vista
  ▪ 安装在 Linux 分区中的 Linux,带 GRUB、LILO、GAG 或其他程序

在安装 Linux 的过程中,请遵循 NeoSmart 文档中描述的步骤

当提示设置启动加载程序时,请确保指定将 GRUB、LILO、GAG 或其他程序安装到安装 Linux 的分区中,而不是安装到卷的 MBR 中。启动加载程序存储在 Linux 所谓的“超级块”中,位于分区开头。

如果不是这种情况,即启动加载程序放置在 MBR 中,则无法启动 Linux 分区。该分区将在 Bluebottle 启动菜单中以红色显示,并带有“没有 PBR”的提示。

要解决这种情况,请执行以下步骤

  1. - 从一个实时 CD 启动,例如 Ubuntu 或 Knoppix 的 CD
  2. - 打开一个终端
  3. - 输入:sudo grub
  4. - 对提示回复

root (hdX, Y)
setup (hdX,Y)
quit

X 是 Linux 分区所在的驱动器号 - 驱动器在启动时由 BIOS 识别并从 0 开始编号

Y 是分区号

setup 在后台使用“install”命令将 GRUB 安装到指定的目标设备中。

Bluebottle 启动管理器可以链式加载分区的 PBR。在此瞬间,控制权将转移到驻留的启动管理器,它将直接或间接地通过已准备好的启动菜单启动操作系统。人们总是会安排避免显示中间的启动菜单。

开发 Bluebottle 启动管理器的理由

有人可能会质疑开发另一个启动管理器的必要性,因为目前已经提出了很多类似的启动管理器。那么是什么让 Bluebottle 启动管理器与众不同呢?这将在下一节中进行回顾。

启动菜单完全是通过从 BIOS 在启动时检测到的所有卷的 MBR 和 PBR 中提取相关信息来构建的。

现在,外部卷很容易连接到机器(例如 USB 接口),人们可以很容易地看到其他启动管理器的启动菜单是多么不灵活。

其他启动管理器由启动菜单控制,启动菜单位于文件系统中的某个位置,由安装程序构建,然后由用户在托管操作系统的控制下进行编辑。例如,GRUB 创建 menu.lst,LILO 也这样做。

这种启动菜单的主要缺点是在添加或删除分区时,由于重新排序而被迫编辑菜单。

因此,无论是事先还是在启动时,都没有任何内容需要编辑、自定义或个性化多启动系统,也不需要超级用户(sudo)。

当分区被移动时,也会出现类似的编辑任务:另一个启动管理器再也找不到 PBR,必须重新安装。同样,在创建或删除分区后对分区重新编号,也需要编辑。对于 Bluebottle 启动管理器来说,这种修改的影响要少得多。Bluebottle 分区可能需要修改配置数据中的 BootVol1= 值,例如。

在启动菜单出现在屏幕上时,没有必要在神秘的命令中指定选项。在名为 GRUB 的部分中,出现了一些示例命令,但还有很多类似的命令。相反,TUI 是一个简单的英语提示文本,等待键盘上的单个字符回复。任何语言的键盘都可以使用,不需要鼠标。

光滑、短暂的 TUI 无法用启动画面装饰。

它严格且仅与 BIOS 驱动程序和卷标识符一起使用:00h、80h、81h,...

用户不必与各种操作系统相关的设备映射的特殊性作斗争:[hd0、hd1、hd2,...] 或 [sda、sdb、sdc,...] 或其他,具体取决于启动管理器。

托管竞争启动管理器的启动菜单的分区丢失是灾难性的。借助另一个卷上的 Bluebottle 启动管理器的帮助,大多数相同卷上的其他操作系统仍然可以启动,只要分区表没有损坏。

类似地,启动卷的 MBR 中的 rootkit 病毒入侵将被发出信号。同样,大多数操作系统仍然可以启动,直到卷被修复,可能使用 AOS。

所有其他经过测试的启动管理器都没有提供将控制权转移到不同卷上的另一个启动管理器的可能性,并使其表现得好像它是启动卷一样。从某种程度上来说,BIOS 启动菜单变得多余。其他启动管理器只允许在不同卷上启动操作系统。

恢复损坏的 MBR 可能是一件令人沮丧和头疼的事:什么是修复系统或恢复软盘?(在软盘几乎消失的时候)哪些在网上找到的文档与在很久以前安装 MBR 的操作系统版本相关?

Windows Vista 启动管理器
虽然在 Windows XP 下,编辑 boot.ini 就可以启动另一个操作系统,但 Vista 需要用户付出更多努力,才能说服其启动管理器与其他操作系统合作。相对容易配置的 boot.ini 文件被一个二进制文件替换,必须使用名为 bcdedit.exe 的控制台应用程序进行编辑。这可能被证明是一项繁琐的任务,最好使用 EasyBCD 等附加应用程序来完成。当 Bluebottle 驻留在另一个卷上时,这一点值得怀疑。

Vista 启动管理器驻留在 Vista 分区中,并具有以下怪癖(参见:http://linux.wordpress.com/2007/02/17/vista-and-solaris-express-dual-boot [过期链接])

  1.- Vista 安装程序要求卷上没有分区处于活动状态(或可启动状态)。如果找到活动分区,安装程序会提示类似“此卷不适合安装 Windows”的信息,并拒绝继续安装。

  2.- Vista 要求 Windows 分区处于活动状态才能启动。

  3.- Vista 要求磁盘签名(安装程序使用的偏移量为 1b8h 的 4 字节)存在于 MBR 中才能启动,否则它将拒绝启动,并提示 winload.exe 已损坏。这是因为 Vista 的启动加载程序会检查它。

Bluebootle 启动管理器和 GRUB 确保在写入 MBR 时,不会触碰 4 字节的磁盘签名。

更多信息请访问:http://www.windowsbbs.com/showthread.php?t=55415 [过期链接]. 微软在一篇白皮书中谈到了它,并给出了一些奇怪的原因:http://www.google.co.in/search?q=OEMBoot_Vista [过期链接].

GRUB - Grand Unified Bootloader - 遗留 - 版本 0.97 - https://www.gnu.org/software/grub
GRUB 可以启动 Windows、MS-DOS、FreeBSD、NetBSD、OpenBSD、GNU Mach,并且包含在多个 Linux 发行版中。它有两种风格:一种是简单的文本用户界面,另一种是图形界面。

从 Ubuntu 7.10 在一个卷上的测试中收集的笔记

在安装 GRUB 的过程中,用户可以选择将 GRUB 安装到启动卷的 MBR 中,或者安装到 Ubuntu Linux 分区中,或者安装到一个专用的小分区中。

当安装在 MBR 中时,GRUB 与 Bluebottle 启动管理器竞争第一个卷磁道中的空间。当它被安装(作为安装 Ubuntu 的副作用)时,它存储在 LBA=0 到 17 的块中,从而完全覆盖现有的启动管理器。LBA=18 到 63 包含全零。原始 MBR 中的两个区域被保留,分别是分区表和 Windows Vista 使用的磁盘签名。

GRUB 存储菜单文件的位置,但文件本身位于 Ubuntu 分区中。要启动另一个操作系统(例如上面的例子中的 Bluebottle),GRUB 需要先访问 Ubuntu 分区,才能找到链式加载程序命令。如果 GRUB 损坏并且无法访问它,则 Bluebottle 将无法再启动。使用 Bluebottle 启动管理器,它仍然可以启动,而无需 GRUB 的帮助。有趣的是,Ubuntu 分区的 PBR 没有有效的签名,无法启动。辅助交换分区也是如此。实际上,一个简单的 Ubuntu 安装将 GRUB 放置在 MBR 中,同时在 Linux 和交换分区的开头留出空闲块。用户还可以选择在安装过程中或之后,将 GRUB 安装到 Linux 或交换分区中。然后 PBR 将接收一个有效的签名 55aah,并被 Bluebottle 启动管理器识别为可启动的。

LILO - Linux Loader - lilo.go.dyndns.org
LILO 能够启动多个操作系统,包括 Linux、Windows、MS-DOS 等,它被用于一些 Linux 发行版中。

从 Mandriva Linux Spring 2007.1 - Mandriva Linux 和 DSL 2.4.4 中收集的笔记

在安装 Mandriva 的过程中,用户可以选择安装

  ▪ GRUB 图形菜单(参见上面的 GRUB)
  ▪ GRUB 文本菜单(参见上面的 GRUB)
  ▪ LILO 文本菜单

当安装在 MBR 中时,LILO 与 Bluebottle 启动管理器竞争 MBR 中的空间,而且不再占用其他空间。用户还可以选择将它安装到 Linux 分区中。

GAG - El Gestor de Arranque Grafico - https://gag.sourceforge.net/
GAG 可以从主分区或逻辑分区启动多达 9 个操作系统。它与 Bluebottle 启动管理器争夺第一个卷道上的空间。它不会安装在分区中。卸载 GRUB 时,只恢复 MBR,其余部分保持不变,即包含 GRUB 代码。GAG 无法访问 USB 设备 (???)。

OSL2000 - https://www.osloader.com
OSL2000 与 Bluebottle 启动管理器争夺第一个卷道上的空间。OSL2000 作为 Windows 安装/卸载程序提供。在安装过程中,除了安装在启动卷中的 LBA=0 到 57 块上之外没有其他选择,将覆盖的数据保存在备份软盘上,以便在最终卸载时恢复以前的状态,从而恢复以前的状态。

Boot-US - https://www.boot-us.de/
Boot-US 作为 Win32 程序提供,可以安装在 MBR(仅限于启动卷)、专用的小型主分区或旧式软盘上。安装在 MBR 时,它与 Bluebottle 启动管理器争夺第一个卷道上的空间。Boot-US 用自己的 MBR 替换现有的 MBR,并将它的副本放在 LBA=1 块中。这样,Boot-US 在需要时可以被移除。然后它就像 Bluebottle 启动管理器一样,它们不能共存。从 2.0.0 版本开始,它可以启动 Windows NT/2000/XP/2003,但不能启动 Vista。

BootIt NG - 下一代 - https://www.terabyteunlimited.com/bootit-bare-metal.htm
BootIt NG 将自身安装在卷的开头,即用自己的 MBR 替换 MBR,并占用启动卷上第一个轨道上的多个块。因此,它就像 Bluebottle 启动管理器一样,它们不能共存。它也可以安装在专用的主分区中,这对于最多 4 个分区来说可能是个问题。

如何使用不同的启动管理器启动 AOS

当创建并格式化一个主分区或逻辑分区来托管 AOS 文件系统 - AosFS 时,它在开头包含一个引导加载程序,负责定位和加载内核,以及其他 OS 部分。PBR 偏移量 1feh 处的“魔术值” 55aah 的存在表明分区已格式化。因此,可以通过访问 PBR 并将控制权传递给它来启动 AOS。这正是引导管理器在以下文档中说明的指令下启动 AOS 时使用的技术。在 Linux 行话中,人们称之为链式加载。

例外的是,专门用作数据存储库的 AOS 分区可以在没有内核和程序的情况下进行格式化。这样的分区不可引导,尽管存在有效的签名 55aah,仅仅是因为缺少内核(参见托管 Bluebottle 的卷)。它只能在 AOS 中挂载/卸载。一个很好的例子是一个容量很小的 USB-HDD,比如 62MB,甚至是一个软盘。在这两种情况下,功能性 AOS 都无法容纳,但都可以用作数据存储。

当以下提到的任何引导管理器在安装操作系统时安装时,可以预期 Windows 或 Linux 分区将被识别,并且这些操作系统将包含在可引导的引导菜单中。但没有一个会在 AOS 存在时采取行动,这证明了下面为准备引导管理器以启动 AOS 提供的详细信息。

1. 在安装 Ubuntu 7.10 或 Google 的 gOS 时安装的 GRUB
  ▪ 在 GRUB 菜单中永久记录启动 AOS 的选项

在 Ubuntu 中,导航到应用程序 > 附件 > 终端以打开终端,然后使用以下命令以管理员身份登录:sudo -s(在提示符处输入管理员密码)

注意:在基于 Ubuntu 的 gOS 中,导航到应用程序 > 系统工具 > UXTerm。

现在输入以下命令

vi /boot/menu.lst

将光标放在菜单中要插入新文本的位置,输入“i”开始在 menu.lst 中插入这些行。

# This is for booting AOS residing in hd0,2 = IDE0#3 for example
title		AOS on hd0,2
chainloader (hd0,2)+1

输入“:x”保存更新的菜单并退出编辑。

在 Debian Wheezy 中,附加一行,例如

menuentry "Native Oberon" { chainloader (hd0,msdos7)+1 }

到 /etc/grub.d/40_custom。然后执行“sudo update-grub”以修改 /boot/grub/grub.cfg。 "msdos" 标识分区方案,"7" 是分区号。Grub 手册有更多详细信息。

  ▪ 从 GRUB 菜单动态控制命令启动 AOS

当启动时出现 GRUB 菜单时,输入“c”以获取命令。然后按顺序输入以下命令

chainloader	(hd0,2)+1
boot

此处需要引导命令,但在解释 menu.lst 时是隐含的。

2. Windows Vista 启动管理器
优先选择 NeoSmart Technologies 的 [https://neosmart.net] 软件 EasyBCD - 当前版本 1.7.1 - 免费下载。该工具易于使用:添加一个 OS 条目,命名它,指定 AOS 所在的分区,并保存修改后的二进制文件 BCD(引导配置数据)。

虽然在 Windows XP 及更早版本中,编辑 boot.ini 以指示内置的启动管理器启动另一个操作系统很简单,但 Vista 需要用户付出更多努力才能说服其启动管理器与其他操作系统协作。boot.ini 被 BCD 二进制文件替换,在纯 Vista 中,必须使用名为 bcdedit.exe 的控制台应用程序对其进行编辑。这可能会被证明是一项繁琐的任务,最好使用 EasyBCD 等工具来完成。当然,可能还有更多此类工具。

3. GAG
从 GAG 启动卷或可引导的 GAG CD-ROM 启动 GAG,并按照 GUI 指示操作

  1. 按“s”设置 GAG
  2. 按“a”添加 AOS
  3. 按与目标 AOS 关联的字母(使用 GRUB 示例,AOS 为“c”)或按与目标卷关联的数字(“1” .. “8”)来选择目标 AOS 所在的卷
  4. 键入描述(最多 15 个字符)
  5. 键入密码或不键入
  6. 按与代表 AOS 的图标关联的字母
  7. 按“h”保存到硬盘或按“r”返回主菜单以测试此序列

外部链接
从闪存驱动器启动 - [http://www.usb-flash-drives-now.com/cheaper/Boot-From-Flash-Drive.html] [已失效链接]

从 USB 启动 - 即使 BIOS 不支持它:[https://www.plop.at/en/bootmanager/index.html]

  1. BootManager.Bin 自本文件由 André Fischer 编写以来已过时。因此,SVN 存档中的 BootManager.Bin 大小略大于 6656 字节。
华夏公益教科书