在 OS X 和 Bootcamp Win 7 之间休眠

Wil*_*lem 25 windows-7 hibernate multi-boot boot-camp macos

是否可以使用 Win 7 和 OS X 的真正休眠系统功能在两者之间创建一种即时切换?想象一下在快速 SATA-3 SSD 读取/写入睡眠图像时的情况。

Hibernate-corruption-fix:如果可以这样做,请确保您的不同分区没有相互写入启用。(例如,使 Boot Camp Windows 7 无法写入 OS X 分区,反之亦然)。这一安全措施应该可以使您的不同系统在一个暂停进入休眠状态时不会相互破坏。

编辑:我意识到我不确定这就是分区在磁盘上的工作方式。休眠的 OS X 内核可以引用磁盘上的块,当它再次被唤醒时它将继续写入。像这样的磁盘块是包含在分区中还是在写入后分配给分区?HDD和SSD有区别吗?这是否会影响上述休眠损坏修复?

好的,让我们继续:

Windows 7 已经有一个选项“休眠”,它允许你引导回你的 OS X 分区,但 OS X 并不完全相同。

使用 OS X 可以通过更改 hibernatemode 系统变量来休眠。

OS X 10.7 之前的版本

须藤 pmset -a 休眠模式 2

OS X 10.7

须藤 pmset -a 休眠模式 25

这将使您的 Mac 在您进入睡眠状态时进入休眠状态。你可以让它入睡:

sudo 关机 -s 现在

好的,到目前为止一切顺利。所以我们可以随意让Windows 7和OS X Lion都进入休眠状态。可是等等!前面还有更多问题。

当您将 OS X 置于休眠状态时,它会在您再次打开 Mac 电源时自动重新启动到 OS X。这使得我们无法将其用于分区之间的“热切换”。

可能的修复:
如果您在没有 rEFItBlesser 的情况下安装rEFIt,您将在 OS X 休眠后获得 rEFIt 启动菜单。然而,在 OS X 10.7 Lion 上,这并不能完全正常工作,而是出现黑屏并且必须硬关闭 Mac。但是嘿!至少它会中断自动 OS X 启动,对吗?也许它可以从那里进一步调整。

正如之前在 OS X 中提到的:在休眠关机 + 开机后,rEFIt 启动菜单实际上确实出现了。这允许您改为启动 Boot Camp Windows 7 分区。不过这里也有问题。显然,如果您遵循此方法,OS X 分区将丢失其休眠标志,这意味着下次启动到 OS X 时,它将不会从其休眠状态返回。相反,它将进行干净的启动。为什么是这样?
OS X 是否寻找睡眠映像的存在来确定是从休眠状态唤醒还是重新启动,或者是否设置了某种系统变量/标志?

概括

当 Win 7 进入休眠状态时,它会完全关闭,然后您可以在启动时启动到 OS X。然而,在 OS X 上,休眠会强制你唤醒进入 OS X。你能破解这个吗,这样你就可以在 OS X 休眠后选择启动分区,并且稍后仍然能够返回到 OS X 并将其从休眠状态唤醒?

让我们看看我们集体能想出什么!

Wes*_*eed 20

按照您的想法这样做是不可能的。问题在于 Apple 的固件和 OS X 的紧密集成。OS X 和固件相互配合以确定计算机的睡眠状态。

当 Windows 休眠时,它会将 RAM 的内容转储到 C:\Hiberfil.sys 并在注册表中设置一个标志,表明机器已休眠。当您第一次启动 Windows 机器时,启动扇区代码会加载 BCD 文件,该文件会在启动过程的早期加载注册表的那部分,并看到系统处于休眠状态。执行基本的健全性检查后,它将 hiberfil.sys 加载回内存。这里重要的是所有这些都包含在文件系统中。这就是为什么您可以自由启动到 OS X,然后再次启动回 Windows,它将继续从休眠文件中恢复。

OS X 并非如此。当 OS X 休眠时,它会以与 Windows 相同的方式将 RAM 的内容转储到 /var/vm/sleepimage。但它将休眠标志保存在 PRAM 中,而不是文件系统中(如果您感兴趣,该设置称为 IORegistryCurrentSleepMode )。当您重新打开 Mac 时,PRAM 中的值会在尝试启动操作系统之前被读取。如果该标志表明系统处于休眠状态,它所做的第一件事就是将其翻转回正常状态。然后固件会立即启动系统并忽略启动磁盘首选项和任何Option+boot尝试。你甚至没有得到启动铃声。在 Mac 上,固件包含检查文件系统和启动操作系统所需的所有逻辑。它不像 Windows 那样需要启动代码。

当您将 rEFIt 投入混合时,它会将自己插入到流程中。它用自己的引导加载程序文件替换了正常的 /System/Library/CoreServices/boot.efi(这是 OS X 的引导加载程序)。对我来说,这就是事情变得模糊的地方,因为这都是 Apple 专有的东西,但最重要的是,当固件启动 OS X 时,它传递加载 /var/vm/sleepimage 所需的任何参数,而不是普通的 Darwin 内核。rEFIt 无法在 Lion 及更高版本中正确执行此操作。但无论是旧版本的 OS X 还是更新的版本,固件都已经在 rEFIt 加载之前翻转了休眠位。这就是为什么在第一次开机后无法再从休眠状态恢复 OS X 的原因。