当我打开计算机时,哪个软件会选择启动哪个操作系统,以及在有多个选项时它如何决定?
更具体地说,如果我的计算机在同一个磁盘上安装了多个操作系统,该怎么办?如果我有外部驱动器,该怎么办?它会搜索所有存储设备的每个分区以查找它能识别的格式吗?
据我所知,每个磁盘都有自己的引导扇区,其中包含有关计算机应引导哪个分区的信息。但是,如果我连接了多个磁盘,每个磁盘都有不同的引导扇区,它会加载哪一个呢?
在尝试研究这个主题时,我遇到了一些困惑,因为并非所有技术的行为都相同(例如,有些人说可引导标志很重要,而另一些人则说它被忽略了)。如果能澄清不同系统的工作方式,我将不胜感激。
答案1
不幸的是,随着计算机的发展,这变得更加复杂。
最初(即第一台 PC)有一个固定的顺序(取决于布线)。
几乎所有计算机仍具有默认启动顺序,该顺序可由 BIOS 控制/影响。较新的计算机使用 UEFI 补充此功能,UEFI 在某种程度上取代了 BIOS。
对于 BIOS 启动,有一个优先顺序。BIOS 会检查每个驱动器是否有可启动的启动扇区,并尝试加载这些扇区,然后逐一选择,直到找到一个可以启动的扇区。
对于 UEFI,磁盘上有一个文件系统(标记为 UEFI 的小型 fat 分区,其中包含第一阶段引导加载程序和指令。在某些情况下,这会通过编入 UEFI 的指令进行补充(即,存储在 nvram 中的设置类似于 BIOS)
一旦找到引导加载程序/UEFI 分区,程序就会接管引导过程,这可能提供引导到不同模式或操作系统的能力。
答案2
正如其他人所说,它变得有点复杂,但我的理解方式是:
当计算机首次启动时,硬盘根本不重要。主板上的芯片中有一个特殊的软件,它会首先加载,然后 CPU 开始执行该软件。这被称为 BIOS 或 UEFI(UEFI 实际上是 BIOS 的后继者)。
此代码会做一些工作来初始化硬件的各个部分,然后开始寻找下一个要将控制权移交给的对象。现在,具体是什么取决于很多因素。有很多可能的选择 - 您的内置硬盘、外部驱动器、网络适配器、RAID 控制器、附加卡等。
BIOS/UEFI 还具有确定检查这些选项的顺序的设置。它将按照配置的顺序检查每一个选项,并询问“您可以继续启动吗?”设备会说“是”或“否”。第一个说“是”的设备可以继续。然后,该设备向 BIOS 提供一段加载到内存中的代码,CPU 会继续执行该代码。
对于硬盘驱动器来说,磁盘本身并不知道它是否可以启动。因此,BIOS 所做的就是读取驱动器的第一个扇区(通常为 512 字节),并检查扇区特定位置的几个特殊字节。如果它们包含值 55 AA(十六进制),则该扇区将作为代码执行。否则,它会继续检查下一个磁盘。
现在,512 字节并不是很多空间,但足以做一些简单的事情。例如,经典 DOS 在其中放置了一些代码,该代码会找到标记为“可引导”的分区,然后加载那分区然后执行它。下一个扇区包含足够的代码来加载更多扇区,然后开始解析文件系统,并从中加载文件,等等。
但实际上,没有任何东西可以说明此代码必须做什么。它也可以不加载活动分区,而是加载磁盘上其他一些包含更多代码的扇区。然后该代码可以为您提供一个菜单,允许您在多个可启动分区或操作系统或其他内容中进行选择。
无论如何,驱动器第一个扇区中的代码称为“引导加载程序”。市面上有不同的引导加载程序。如今的 Linux 世界严重依赖 grub,Windows 有自己的引导加载程序,等等。引导加载程序真正前操作系统,但它确实需要知道如何将操作系统加载到内存中并将控制权交给它。
这样是不是更清楚一点?
答案3
启动时,主板将为与其连接的所有(或大多数)电子元件供电。其中之一就是硬盘或 SSD,也称为系统驱动器,因为主操作系统位于其上。除非您将 BIOS 或 (U)EFI 设置为从其他外部驱动器(无论是 USB、FireWire 还是网络)启动,否则将首先使用该驱动器。
在此驱动器上,有一个主引导记录分区(为了简化),通常是只读的(但可以通过 bcdedit.exe 命令集进行编辑),它将检查驱动器上所有可用的操作系统。其中一个已被设置为默认,由您设置,或在安装时自行设置,无论是在工厂还是在您重新安装/升级主操作系统时。
Windows 不允许您从 USB 启动硬盘或 SSD. 您可以通过 USB 启动钥匙,它承载特定的 USB 控制器,但 Windows 不允许从通过电缆连接的 USB 驱动器启动。直到第一个 Windows 服务和进程(smss.exe 和 crss.exe)已加载之后,才会加载必要的驱动程序,这意味着 Windows 本身已启动。
答案4
计算机中内置有软件,您可以对其进行配置以指示哪个磁盘应首先放置、第二个(如果第一个磁盘不可用)、第三个磁盘等。
这曾经是“bios”,存储在 eeprom 中(由电池供电)。但目前它变得更加复杂,甚至基于 Linux 的操作系统也内置在硬件中(这可能会使您的计算机容易受到外部攻击)。
每个磁盘都有一个分区表,不一定有一个引导扇区。