![同时双启动](https://linux22.com/image/1377399/%E5%90%8C%E6%97%B6%E5%8F%8C%E5%90%AF%E5%8A%A8.png)
假设我有一台 Linux 主机,Windows-7 安装在同一驱动器的一个分区中。
是否可以启动 Linux,将其状态保存到内存(本质上是休眠状态),然后在其旁边启动 Windows,完成后关闭窗口并恢复 Linux(无需重新启动)。
目标是使用 Linux 作为我的主要操作系统,当我需要 Windows 应用程序时,使用快照软件加载 Windows 系统状态快照以使用该应用程序,然后当我完成后关闭它并继续在 Linux 中工作。
我正在不惜一切代价避免使用虚拟化技术,因为我也使用 Windows 安装来运行游戏(除非你能找到一个可以 100% 访问主机硬件的开源虚拟解决方案,没有任何如果、和或但是)否则请避免建议虚拟技术。
答案1
也许“kexec”就是您要找的。kexec 只是加载一个新内核 + 参数和一个可选的 initrd,然后跳转到内核执行点。应该可以软启动 Grub(至少是 Grub4Dos)。
看一下https://wiki.ubuntu.com/RapidReboot#Reboot_into_GRUB
脚本可能需要进行一些调整才能进入休眠而不是重新启动,但这大致满足了你的要求:软启动另一个操作系统/内核
这可能只适用于一个方向,即从 Linux 到 Windows。另一个方向即使不是不可能,也会稍微复杂一些。
答案2
“在计算领域,kexec(内核执行)是 Linux 内核的一种机制,允许在当前正在运行的内核上“实时”启动新内核。kexec 跳过引导加载程序阶段(固件或 BIOS 的硬件初始化阶段),直接将新内核加载到内存中,并立即开始执行。这避免了与完全重启相关的长时间,并且可以通过最大限度地减少停机时间来帮助系统满足高可用性要求。” -维基百科
但我希望它不支持 NT 内核,尽管资源这里指出kexec loader支持Linux/multiboot。
我希望没有任何完善的机制可以无需重启即可启动 linux 和 nt 内核。
如果您更喜欢通过热启动,如果您在同一个驱动器上同时拥有 linux/windows 分区并且如果您使用 windows 加载器,它将恢复 windows 而不显示启动菜单。
由于我还没有测试过 Linux 加载器,因此我不能说存在同样的情况。一旦我发现,我将立即更新。
如果您更喜欢热启动,并且可以为每个分区使用两个独立的磁盘,则您可以使用挂起到磁盘,据我所知,这是唯一可以成功运行的方法。(只要您不喜欢可视化技术。)
答案3
主要问题将是Windows:
在 Vista 下(我还没有在 Windows 7 下测试过)有以下行为:
如果您使用 Windows 启动管理器在 Linux 和 Windows 之间切换,则 Windows 将在休眠 Windows 后自动启动。这意味着:您无法休眠 Windows 并切换到 Linux。
当使用 GRUB 作为启动管理器时,Windows(Vista,但可能还有 7)拒绝进入休眠状态。只有当 MBR 包含“标准 MBR”(启动活动分区)并且活动分区是 Windows 分区时,休眠才能起作用。
然而,有一个解决方法我的系统:
- GRUB 安装在(主)Linux 分区中,而不是 MBR 中
- 休眠之前我激活了 Windows 分区(使用“diskpart”命令)
- 然后我运行了“bcdedit”,没有命令行参数。这是 Vista 所必需的,以便“看到”Windows 分区处于活动状态(因此不会拒绝休眠)
- 我将活动分区切换回 Linux 分区(使用“diskpart”)
- 由于没有再次运行“bcdedit”,Vista 没有提到 Windows 分区不再处于活动状态
- 结果:休眠成功并且下次启动了 GRUB!
我编写了一个程序来执行所有这些步骤,但它非常特定于我的系统。不幸的是,我不知道这个解决方法是否适用于 Windows 7 或仅适用于 Vista。
机器进入“休眠”状态。我不知道这是否符合“无需重新启动”的要求。
答案4
可以拥有同一个 Windows 分区,可以在 VKM 下虚拟化运行,也可以作为 GRUB 启动选项本地运行。
因此,在正常情况下,您会在虚拟机中同时运行 Linux 和 Windows。当您想要运行 Windows 游戏时,只需重新启动 PC 并在 GRUB 启动菜单中选择 Windows 即可。
这可能会使您避免使用虚拟化技术的理由失效。