OS X和Bootcamp Win 7之间的Hibernate

Modified on: Mon, 18 Mar 2019 21:40:02 +0800

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

Hibernate-corruption-fix:如果可以做到这一点,请确保不同的分区不能互相写入。 (例如,使Boot Camp Windows 7无法写入OS X分区,反之亦然)。当一个人暂停进入休眠状态时,这种安全措施应该使你的不同系统不可能互相腐败。

编辑:我意识到我不确定这是分区在磁盘上的工作方式。休眠的OS X内核可以引用磁盘上的块,当它再次被唤醒时它将继续写入。这些磁盘块是否包含在分区中,或者在写入分区后分配给分区? HDD和SSD有什么不同吗?这会影响上面的hibernate-corruption-fix吗?

好的,让我们继续前进:

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

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

Pre OS X 10.7

  

sudo pmset -a hibernatemode 2

OS X 10.7

  

sudo pmset -a hibernatemode 25

当你让它进入睡眠状态时,这会让你的Mac进入休眠状态。
你可以通过以下方式让它入睡:

  

sudo shutdown -s now

好的,到目前为止一切顺利。因此,我们可以随意将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上,hibernate会强制你唤醒到OS X.你可以破解它,这样你就可以在OS X休眠后选择启动分区,并且仍然可以稍后返回到OS X并从休眠状态唤醒它?

让我们看看我们共同提出的建议!

作者:,Willem

最佳答案

不可能按照你的想法去做。问题在于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时,在尝试引导到OS之前,将读取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的原因。

作者:Wes Sayeed

相关问答

添加新评论