我的 PC 上有 Linux 和 Windows 7 双启动设置,我想配置操作系统,以便在使用一个操作系统时,我可以休眠(将状态保存到磁盘),重新启动,使用另一个操作系统,完成后再次重新启动,然后从上次中断的地方继续使用第一个操作系统。这里的关键因素是,我希望每个操作系统在将其状态保存到磁盘后重新启动,而不是关闭电源;否则,我必须在中间重新打开计算机,这非常烦人。我很清楚配置 Linux 来做到这一点很简单(请参阅这个问题)。 然而,我不知道如何告诉 Windows 7 我希望它做同样的事情:即在将内存内容保存到磁盘后重新启动 PC,而不是像在休眠情况下正常关闭电源。
有什么办法可以做到这一点?
答案1
您无法做您想做的事情,因为 Windows 始终假定您的机器上没有其他非 Windows 操作系统。
只要 Windows 引导加载程序(NTLDR 或 BOOTMGR,无论)已安装到 MBR,休眠后(重新)启动计算机将始终从磁盘上的休眠数据恢复,并且不会提示您选择要从中启动的操作系统。这是因为从任何其他操作系统或环境安装已在休眠操作系统中安装的卷都是未定义的行为。在最好的情况下,当您在 Linux 或另一个 Windows 安装中安装其卷之一后尝试启动休眠操作系统时,将检测到休眠数据无效并拒绝从中启动。在最坏的情况下,它将从休眠存储启动,并且内存中的文件系统数据与磁盘上的文件系统数据不一致,并且您的卷可能已损坏且无法修复(这是我的经验之谈)。
因此,Windows(在某种程度上是正确的)认为休眠后重新启动(而不是关闭)是没有意义的,因为它只会导致机器处于休眠前的状态,不会实现任何操作,还会浪费 5 分钟的时间。
当然,现在如果在 MBR 上安装了非 BOOTMGR/NTLDR 引导加载程序,您可以实现 Windows 休眠并启动不同的操作系统(但您不能修改现在休眠的操作系统下安装的任何卷,否则可能会有严重的数据丢失风险)。但 Windows 对此一无所知(是否故意忽略这一点是另一天的话题)。所以简而言之,我们试图做的事情如果没有某种(半)虚拟化环境就不可能实现。
如果您经常在操作系统之间切换并尝试返回到原来的位置,请考虑使用 VMware 工作站甚至 ES(I|X) 一次启动多个操作系统。否则,像 @WillGunn 建议的那样的 KVM 解决方案也是一个不错的选择。
答案2
我也一直在寻找一种干净的方法来做到这一点,但还没有找到。不过,我发现了一些其他人可能会感兴趣的技巧……
破解的关键是微软的 xbootmgr 工具。此工具主要供开发人员收集时间信息,以找出导致启动速度变慢的原因。作为额外的好处,它会将系统连接起来,以便在您休眠后自动重新启动。该工具是 Windows 性能工具的一部分,您可以通过Windows SDK。至少在我的系统上,系统需要大约一分钟才能从挂起状态唤醒,这有点烦人,但它确实有效。YMMV。
正如其他人提到的,休眠后不要尝试在 Linux 中挂载 NTFS R/W。
我的经验是基于 UEFI 的引导。理论上,这应该适用于基于 MBR/BIOS 的引导加载程序,但您必须使用 GRUB 或 MBR 中的其他非 Windows 引导加载程序,以避免该引导加载程序的“自动恢复”功能(每当它检测到休眠系统时,它都会忽略您可能为 Linux 添加的任何其他引导选项。)如果您选择 grub/MBR 路线,请查看 grub-reboot 命令以弹出到 Windows 进行一次引导周期。
UEFI 与 Windows 为主
如果你大部分时间都在使用 Windows,并将其设置为默认启动选项,那么你需要一个 Windows 端的工具来将 Linux 安装切换为“一次启动” - 类似于简易UEFI。当您想要休眠并重新启动到 Linux 时,您可以将其切换为启动一次。
切换一次启动标志后,以管理员身份运行:
xbootmgr -trace hibernate
如果您正确连接,您应该只会进入一次 Linux 环境,一旦再次重新启动,您就会发现自己回到了 Windows,并从之前的休眠状态恢复。
以 Linux 为主的 UEFI
如果您大部分时间都在使用 Linux,并将其设置为主要启动选项,则可以跳过上面描述的 Windows 端的 UEFI 工具。您可以改用 efibootmgr 之类的工具。首先,您需要确定哪些启动项映射到 Windows。只需运行
sudo efibootmgr
你会看到类似这样的内容:
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0001
Boot0000* ubuntu
Boot0001* Windows Boot Manager
然后,要将 Windows 设置为启动一次,您需要使用与以下内容匹配的数字(在我的示例中为 0001):
sudo efibootmgr --bootnext 0001
然后继续从 Linux 休眠/重新启动,您将进入 Windows 一次,当您准备返回 Linux 时,在 Windows 端运行 xbootmgr 以在那里休眠,您就可以愉快地在两者之间来回切换。
答案3
如果您大部分时间都在使用 Linux,但是您在其上进行的工作并不繁重,那么您可以使用带有 KVM 切换器的辅助计算机在两者之间切换。
休眠 (S4) 将内存内容写入硬盘。如果断电,它可以从休眠文件中恢复。您可以强制断电,即在关机进入休眠后断开连接,然后在启动时选择 Linux。
答案4
这个问题问了好多年了,但我仍然想写下我的“复杂”解决方案。我的设置如下:
- 电脑通过grub2启动,默认启动到Fedora。
- 在 Fedora 中,我可以进行一次 grub 菜单项更改,以便计算机下次重新启动进入 Windows。
- 无论是windows还是linux都可以给出休眠的命令。
- 为了打开电脑,我有一个 ESP8266 电路,它与电脑的电源按钮并联。ESP8266 从电源的 +5V 待机电压获取电力。连接到本地网络的 Raspberry Pi 向其发送一个 wifi 信号,按下电源按钮,短按唤醒或长按硬重置。
有了这个基础设施,我可以切换操作系统并在本地和远程启动。