在 OS X 和 Bootcamp Win 7 之间休眠

在 OS X 和 Bootcamp Win 7 之间休眠

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

休眠损坏修复:如果可以的话,请确保您的不同分区之间没有相互写入权限。(例如,使 Boot Camp Windows 7 无法写入 OS X 分区,反之亦然)。此安全措施应能使您的不同系统在其中一个系统进入休眠状态时,不会相互破坏。

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

好的,我们继续:

Windows 7 已经有一个“休眠”选项,允许您启动回到 OS X 分区,但 OS X 并不完全提供相同的功能。

使用 OS X 可以通过改变 hibernatemode 系统变量来进入休眠状态。

OS X 10.7 之前版本

sudo pmset -a 休眠模式 2

OS X 10.7

sudo pmset -a 休眠模式 25

这会使 Mac 在睡眠时进入休眠状态。您可以使用以下方法让 Mac 进入睡眠状态:

sudo 关机-s现在

好的,到目前为止一切顺利。这样我们就可以随意将 Windows 7 和 OS X Lion 置于休眠状态。但是等等!还有更多问题等着我们。

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

可能的修复:
如果您安装改装如果没有 rEFItBlesser,您将在 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 并将其从休眠状态唤醒?

让我们看看我们能共同想出什么!

答案1

按照你的想法,这是不可能的。问题在于苹果固件和 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 还是新版 OS X,固件在 rEFIt 加载之前就已经翻转了休眠位。这就是为什么在第一次开机后无法再从休眠状态恢复 OS X 的原因。

相关内容