我有一个带有 UEFI 固件的系统,我将向其中添加两个驱动器。我希望在一个驱动器上安装 Windows 7,在另一个驱动器上安装 Linux 发行版。我希望这样设置:如果一个驱动器处于离线状态,我可以可靠地启动和操作另一个操作系统,除了有关丢失数据分区的投诉。
我的计划是先安装 Windows,只连接一个驱动器。将驱动器分区为 GPT 并安装。Windows 将创建一个 EFI 分区并添加其 UEFI 启动项。
然后连接另一个驱动器——这样两个驱动器都在线——并告诉 Linux 安装程序创建它是第二个驱动器上的 EFI 分区并在那里安装其引导加载程序。我正在决定是使用 OpenSuse Tumbleweed 还是基于 Arch 的发行版之一。他们会允许我在安装时执行此操作吗?
因此,Windows 的 UEFI 启动项指向 Drive1\EFI,而 Linux 的 UEFI 启动项指向 Drive2\EFI。这些条目应通过 UUID 识别分区。我将在启动时使用 UEFI 启动菜单来选择操作系统。
我的计划可行吗?在 Linux 中,如果只有一个驱动器,驱动器设备地址会改变 (sdb --> sda) 吗?这会造成破坏吗?
可以通过 BIOS/MBR 模式执行此操作吗?如果根本无法执行此操作,那么为什么不呢?
谢谢。
PS 我浏览了大部分相关问题,但似乎没有一个有相同的要求或情况。如果有的话,回答,请告诉我。
答案1
我认为 UEFI 可以自动处理这个问题。至少它应该找到两个 EFI 分区,就像它会找到插入的 DVD 或 USB 棒上的任何 EFI 分区一样。
您可以在 UEFI 中手动配置顺序,或者在大多数情况下,您可以在启动时按下按钮来选择要启动的内容。
是的,发行版将允许您在安装时执行此操作,但根据您安装的内容,您可能需要做更多或更少的工作。例如,Antergos 专门要求 /boot/efi 分区,如果不存在,您可以创建一个 - 如果您在安装时无法弄清楚,只需谷歌搜索,这是每个发行版都应该在某处提到的基本内容。
我不知道 BIOS/MBR,但我认为即使使用它而不是 UEFI 也是可能的。
编辑:
不需要一个接一个地连接它们。从一开始就连接两个应该就可以正常工作。
答案2
结果
有用。
每个操作系统(Windows 7 和 OpenSuse Tumbleweed)都可以启动和运行,
- 两个硬盘均在线
- 另一块硬盘离线
我做了什么
1) 在 UEFI 中禁用硬盘 2,并在硬盘 1 上安装 Windows 7。应该不需要禁用其他硬盘,但 Windows 喜欢在它能找到的任何地方植入它的标志,所以我只是想避免这种情况。HD1 格式化为 GPT。
2) 启用硬盘 2。现在两个驱动器都在线。在驱动器 2 上安装了 OpenSuse。HD2 格式化为 GPT。Suse 安装程序中为 Linux 创建的所有分区都在此驱动器上,即 EFI、Swap、OS/root 和用户分区。所有分区都通过唯一唯一标识符(重要)。驱动器 1 上没有做任何改动。选择的引导加载程序是 EFI 上的 Grub2。
3) 通过在启用两个驱动器并禁用另一个驱动器的情况下启动来测试每个操作系统。工作正常。一个小问题是,如果禁用 Windows 驱动器,Tumbleweed 需要更长的时间来初始化。这是因为有一个与交换分区相关的启动作业超时了。即使分区本身是通过 UUID 安装的,一些 systemd 作业也会通过设备地址引用该分区。启用两个驱动器后,交换设备地址为/dev/sdb2
,而仅启用 Linux 驱动器后,交换设备地址为/dev/sda2
。除了延长初始化时间外,似乎不会影响启动后的操作。正常使用时不会出现问题,因为两个驱动器都在线。会调查一下。
答案3
你提出的建议在仅使用 BIOS 启动的时代相当常见,并且在那种情况下效果相当好。不过,EFI 模式启动有一个复杂之处:在 EFI 下,引导加载程序存储在EFI 系统分区 (ESP)使用半任意文件名。为了告诉计算机使用哪个引导加载程序,引导加载程序文件名(包括它们所在的分区的标识)存储在 NVRAM 中。复杂之处在于许多 EFI 会自动删除指向不存在的文件的 NVRAM 条目。因此,一旦从计算机中删除磁盘,EFI可能删除对其引导加载程序的引用,当您重新插入该磁盘时,它将不再可引导 - 至少,如果没有某种方法恢复其 NVRAM 条目。
我想强调的是,并非所有 EFI 都会这样做;有些 EFI 会保留无效的 NVRAM 条目,这意味着在您移除并恢复硬盘后,它们会继续工作。我不确定删除 NVRAM 条目的计算机所占的比例;您只需自己检查一下即可。
解决此问题的一种可能方法是使用EFI/BOOT/bootx64.efi
ESP 上的“后备文件名”(适用于 x86-64/AMD64/x64 系统)。如果固件找不到任何其他有效的引导加载程序,则将启动具有此文件名的引导加载程序。因此,您可以将操作系统的正常引导加载程序复制或重命名为该名称以使其正常工作;或者您可以将引导管理器放在该位置。(引导经理让您选择要启动的操作系统;启动加载器将操作系统内核加载到内存中。有些程序(如 GRUB)会同时执行这两个操作。)例如我的rEFInd 启动管理器可能会对此有所帮助。理论上,将 rEFInd 置于两个磁盘的后备位置并清除 Windows 和 Ubuntu 的 NVRAM 条目应该可以很好地工作,但有一个复杂之处:许多 EFI 将 Windows 引导加载程序 ( EFI/Microsoft/Boot/bootmgfw.efi
) 视为另一个后备文件名。它可能会优先于常规后备文件名,因此如果安装了 Windows 磁盘,系统可能会启动到 Windows。
请注意,如果计算机删除了无效的 NVRAM 条目,而您又依赖后备文件名,则启动可能会变得不可预测。也就是说,计算机可能会一次进入 Windows,另一次进入 Linux,这取决于上次启动的内容、上次启动时插入的磁盘等。您应该能够使用计算机的内置启动管理器强制启动到特定的操作系统,但这些工具通常很笨拙,有时也不可靠。
所有这些都使得回答为什么您希望能够移除磁盘的问题变得重要。在 EFI 下,始终将两个磁盘插入可能比将它们换出更简单,正如您所说。如果您想降低一个操作系统破坏另一个操作系统文件的几率,最好进行良好的备份并规划每个操作系统允许读取和写入哪些分区。
根据您的需要,一个折衷方案是保留一个永久安装的磁盘,并将两个操作系统的引导加载程序都放在该磁盘上。然后,您可以根据需要拔下第二个磁盘。但请注意,许多发行版将 GRUB 配置为依赖于 Linux/boot
目录中的文件,因此如果您想使 Linux 磁盘可拔出,您可能需要/boot
在永久安装的磁盘上放置一个分区。或者,您可以成为 GRUB 专家,以便将其配置和支持文件保留在 ESP 上;或者您可以使用 GRUB 以外的其他东西。作为极端情况的替代方案,您可以使用一个带有 ESP 的非常小的磁盘(甚至是 USB 闪存驱动器),如果需要,还可以使用一个/boot
分区,并使用单独的磁盘来安装每个操作系统的大部分内容。
另一种选择是依赖兼容性支持模块 (CSM),它支持 BIOS 模式(又称“传统”)启动。您可以在 BIOS 模式下安装 Windows 和 Linux,并像十年前一样启动计算机。不过,控制 CSM 需要一些专业知识;很容易意外地以 EFI 模式而不是 BIOS 模式启动(反之亦然),如果您不熟悉它,您可能甚至没有意识到自己做了什么,直到您完全安装了操作系统,最终它没有按预期的方式启动。请参阅我的这个页面了解有关此主题的更多信息。
答案4
就像使用 UEFI 和 BIOS 固件一样,您可以在不同的硬盘上创建完全独立的 Linux 和 Windows 安装。
对于驱动器来说情况并非如此(在 Windows 术语中,驱动器通常是一个分区)。
对于新手和不太高级的用户来说,最好在空硬盘上启动操作系统安装(仅连接一个磁盘)。操作系统(Windows/Linux)将创建所有必要的分区,进行所有必要的格式化并安装操作系统。
在 UEFI 上我们有一个共同的资源 - NVRAM(非易失性存储器)!
当您安装任何操作系统时,NVRAM 中都会创建启动项(因此它可以默认启动)。当您安装两个操作系统(Linux 和 Windows)时,将有两个启动项(每个操作系统一个),其中一个将是默认启动项(通常是最后安装的操作系统的启动项)。
在 MBR 固件中,第一个磁盘是第一个引导候选,并被默认选中。如果 MBR(主引导记录)中没有引导代码且没有活动分区(仅限 Windows),则引导将失败。
安装完两个操作系统后,您可以安全地连接两个硬盘并使用启动选择键(通常是 F12 键)选择要启动的操作系统。如果您不进行选择,则将默认选择其中一个操作系统。
在 UEFI 固件上,通常应该能够(使用固件设置)重新排序 NVRAM 中的启动条目(第一个条目是默认条目)。
如果计算机有 UEFI 固件,我建议不要使用 MBR 样式的磁盘和 MBR 启动/安装。UEFI 是当今事实上的标准,具有许多优点(使用“安全启动”时可以强制执行启动链的安全性,GPT 样式的磁盘分区解决了许多 MBR 缺点)。
如果有任何不清楚的地方,请随时询问。