跳转到内容

启动管理器

来自Wikibooks,开放世界中的开放书籍

启动管理器和本文档由André Fischer编写,现在在ETH SVN存储库中根据ETH许可证维护。那里相关的七个文件名称以“BootManager”开头。

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

启动机制理论的简要介绍

[编辑 | 编辑源代码]

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

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

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

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

备注

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

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

启动操作系统的传统方法是加载并执行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.4GB边界以下。32位LBA模式使得可以寻址2TB的存储空间。不支持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。

功能概述

[编辑 | 编辑源代码]

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

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

使用Bluebottle安装,也可以从Live CD安装,就像用于安装Bluebottle一样,安装在各种卷上

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

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

不需要专用的分区。

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

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

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

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

本文档详细介绍了它与一些其他竞争对手的启动管理器的关系以及如何与它们共存。

功能详解

[编辑 | 编辑源代码]

Bluebottle启动管理器围绕传统MBR设计,大多数机器上都有传统MBR,在分区表中为四个16字节的分区表条目提供空间。一个条目可由扩展分区使用,逻辑分区可以以任意数量链接到该分区。没有考虑像Ranish分区管理器这样的具有其他分区表组织的启动管理器来打破4的限制。也没有考虑提议的英特尔EFI标准。

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

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

2. 可以安装它的卷

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

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

承载Bluebottle分区的卷

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

这里值得一提的是一种特殊情况:在一个非常小的卷上,例如64或128MB,不仅设想多个分区是不合理的,而且单个工作的Bluebottle也只会刚好适合,没有空间用于用户数据。在这种情况下,最好格式化一个不包含内核和程序的单个分区。然后,此分区仅可作为数据存储使用,并且永远不可引导。但是,它会在分区列表中显示。

BIOS卷检测和枚举
在引导管理器控制下,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。

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

从CD-ROM(模拟FDD)引导

CD-ROM必须符合El Torito可引导CD格式,使用CD上的文件模拟软盘。BIOS将引导卷识别为00h,它位于其组中的第一个且唯一的卷,后面跟着ATA HDD和USB-HDD。包含的BootManager.iso文件是分发Bluebottle引导管理器的最佳工具。

从USB-FDD引导

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

从内部P-ATA HDD引导

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

从外部USB-HDD或USB-ZIP引导

BIOS将引导卷识别为80h,然后是ATA HDD,最后是其余的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. 用户指南
这是一个示例菜单,可以在BootManager启动时访问。

======================================================
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(用“Foreign”表示)引导管理器的存在。因此,无需在所有卷上安装Bluebottle引导管理器。其他现有的MBR和引导管理器仍然可以调用并且完全可以运行。这可以通过对提示文本响应“s”来完成,这同样适用于引导管理器本身。

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

  ▪ 已安装的PCI设备列表(在响应提示时输入“i”)

文本显示在50行80个字符的行上,相比于默认的25行布局。输入“l”可切换行数。引导管理器强制执行50行模式而不是默认的25行模式。经验表明,切换实际上没有必要,除非图形控制器不支持50行模式(这种情况尚未遇到)。

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

总之,它指导用户

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

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

TUI允许选择卷并选择启动哪个操作系统,而无需考虑其他类似系统中通常定义的启动顺序。操作系统通过访问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运行(原因很明显),或者从FD运行,因为FD被认为仅用于启动操作系统,而不是真正绑定到任何机器。

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

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

全新安装后,默认卷和分区未定义,其执行将必然停止以与用户交互。

它不会(应该不会!)损坏安装在卷的第一轨道上的外部引导管理器(GRUB、Boot-US)。

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

发行版中包含的材料

[编辑 | 编辑源代码]

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

库存文件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文件

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

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

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

这两个部分也可从存储库中作为文件BootManagerMBR.Bin和BootManagerTail.Bin使用。

3.2 对于FD,步骤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 Partitions工具完成:按照主菜单>文件>分区或使用Oberon Partitions.Tool:执行Partitions.Show detail ~
  ▪ 备份当前卷的MBR,并在必要时备份某些引导管理器使用的轨道0中的其余块。

这可以通过上述Bluebottle Partitions工具完成,然后选择“ToFile”,或者使用Oberon Partitions.Tool:执行Partitions.PartitionToFile dev#0 MBRBackup.Bin 0 1 ~可能需要保存多个块。可以通过执行以下命令检查此文件: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 ~

4.3 在可启动CD-ROM上

在主菜单中,依次选择>文件>CDRecorder>工具>刻录ISO映像

然后浏览以找到BootManager.iso并刻录CD-ROM。尽管如此,创建的CD_ROM不能保证在任何机器上都可读。最好使用Nero等第三方软件。MagicISO是另一种此类软件。

4.4 在软盘上

可能只需要临时启用FDD才能将引导管理器安装到软盘上,以便在USB-FDD上使用。

将DOS格式化的FD插入FDD,并在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设置或启动菜单)引导到其所在的卷。

要打开BootManager菜单,请使用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。残酷的事实是一个引导管理器可以抹掉另一个引导管理器。一些安装程序通过将现有操作系统集成到引导菜单中来修复损坏。对于大多数提供安装GRUB或LILO(检测Windows和其他Linux分区的存在)的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分区中的GRUB、LILO、GAG或其他引导加载程序的Linux

在Linux安装过程中,请按照NeoSmart文档中描述的步骤操作

当系统提示设置引导加载程序时,请确保指定将GRUB、LILO、GAG或其他引导加载程序安装到正在安装Linux的分区中,而不是安装到卷的MBR中。引导加载程序存储在Linux称为“超级块”的分区开头。

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

要解决此问题,请按以下步骤操作

  1. - 从Live CD启动,例如Ubuntu或Knoppix的Live 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加载程序 - 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 - Next Generation - https://www.terabyteunlimited.com/bootit-bare-metal.htm
BootIt NG 将自身安装在卷的开头,即用自己的 MBR 替换 MBR,并在引导卷上的第一个磁道上占用多个块。因此,它的行为就像 Bluebottle 引导管理器一样,并且不能与之共存。它也可以安装在专用主分区中,这在最多 4 个分区的情况下可能会成为问题。

如何使用其他引导管理器启动 AOS

[编辑 | 编辑源代码]

当创建并格式化主分区或逻辑分区以承载 AOS 文件系统(AosFS)时,它在开头包含一个引导加载程序,负责定位和加载内核以及操作系统的其余部分。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 - 免费下载。该工具易于使用:添加一个操作系统条目,命名它,指定 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 示例“c”表示 AOS)或按与目标 AOS 所在卷关联的数字(“1”到“8”)
  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 字节。
华夏公益教科书