我最近读了一些关于 boot.ini 的内容,有点困惑。据我所知,boot.ini 的工作方式类似于 GRUB 的 menu.lst(或 GRUB 所需的任何其他文件)。那么,如果 boot.ini 在计算机启动到 Windows(或任何其他操作系统)之前出现,是否可以使用它来代替 GRUB?如果是这样,boot.ini 就不是什么“Windows 的东西”,不是吗?(因为它可以完全独立于 Windows 使用)。也许我遗漏了什么,我在这里说的完全是废话。有人能给我解释一下吗?谢谢!
答案1
该文件boot.ini
是NTLD 目录,Windows NT 到 XP 和 Sever 2003(即到 NT 内核主版本 5)中使用的引导加载程序。它非常像“Windows 的东西”,因为它随 Windows 一起分发,并且设计为与 Windows 一起使用。但是,它确实具有链式加载 GRUB 和任何其他引导加载程序的能力。
较新版本的 Windows(Vista、7)使用引导程序,它依赖于 BCD(引导配置数据)存储,而不是简单的boot.ini
文本文件。它可以再次用于链式加载 GRUB 或其他引导加载程序。事实上,EasyBCD 和 Visual BCD Editor 等程序提供了一个非常简单的过程来为 GRUB 添加条目。
链式加载基本上可以描述为引导加载程序在内存中用另一个引导加载程序替换自身。如果引导加载程序支持链式加载,您基本上可以指示它加载它可以读取的任何文件(对于 Windows 的引导加载程序,则在 FAT/NTFS 文件系统上)并执行它,就好像该文件是原始引导加载程序一样。理论上,您实际上可以形成一个循环,其中一个引导加载程序加载另一个加载原始引导加载程序,依此类推...
维基百科文章对启动过程进行了很好的描述这里。
答案2
默认情况下,Windows 引导加载程序安装在第一个可引导驱动器的主引导记录中。
引导过程使用 boot.ini 文件来配置引导时要显示的选项。
与 GRUB 相比,Windows 引导加载程序非常简单。
Boot.ini 确实与 menu.lst 有几分相似,但是这种相似更多的是趋同演化,而不是其他什么。
让 Windows 引导加载程序触发另一个操作系统是可能的,尽管并非完全简单。要实现这一点,您需要另一个操作系统的引导驱动器的引导记录副本,然后您可以在 boot.ini 中添加对该引导记录的引用,以便执行该引导记录来加载另一个操作系统。请参阅此讨论中的最后一篇文章更多细节。
即使 GRUB 并没有真正尝试启动 Windows,它只是将其交给(链接)Windows 引导加载程序。
答案3
据我了解,IBM 兼容 PC 的启动过程如下:
- 计算机运行开机自检。
- 计算机 BIOS 定位启动设备并加载和运行 MBR(主引导记录)。
现代系统可能有 EUFI 而不是 BIOS。UEFI 可以加载 MBR 和 GPT 驱动器。我暂时先忽略这些。 - MBR 包含磁盘的分区表。其中一个分区将被标记为“活动”。BIOS 将引导扇区从该活动分区加载到内存中,然后执行它。
- 如果这是较旧的 Windows 启动扇区然后引导扇区中的程序将启动并初始化NTLDR文件,即操作系统加载程序。
- NTLDR 使用 boot.ini 来提供选项
您可以将 NT 加载程序 (ntldr) 指向其他安装。例如,如果您的旧 boot.ini 如下所示:
[引导加载程序] 超时=10 默认值 = 多 (0) 磁盘 (0) rdisk (0) 分区 (1) \WINNT [操作系统] 多 (0) 磁盘 (0) rdisk (0) 分区 (1) \WINNT="Windows NT Workstation 版本 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation 版本 4.00 [VGA 模式]" /basevideo /sos C:\=“MS-DOS”
然后您可以添加一行并将C:\bootsect.lnx="Boot Linux
linux 引导扇区放入文件 c:\bootsect.lnx 中。然后您可以使用相同的菜单在 windows 引导选项和 linux 之间进行选择。选择 linux 引导选项将触发该文件中的任何命令,可能是 GNU/Linux 引导加载程序。这将为您提供第二个(可能不需要的)菜单供您选择。
这意味着 nltdr 实际上除了 Windows 之外并不启动任何东西,但您可以让它将启动过程交给另一个启动加载程序。