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 上有什麼不同嗎?這會影響上面的 hibernate-corruption-fix 嗎?

好的,讓我們繼續:

Windows 7 已經有一個選項“休眠”,可讓您啟動回 OS X 分割區,但 OS X 並沒有提供完全相同的功能。

在 OS X 中,可以透過更改 hibernatemode 系統變數來休眠。

OS X 10.7 之前的版本

sudo pmset -a 休眠模式 2

作業系統 X 10.7

sudo pmset -a 休眠模式 25

這會使您的 Mac 在您進入睡眠狀態時進入休眠狀態。您可以使用以下命令讓它進入睡眠狀態:

sudo shutdown -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:s 中所提到的,rEFIt 啟動選單實際上會在休眠關閉+開機後出現。這允許您改為引導 Boot Camp Windows 7 分割區。但這裡也存在問題。顯然,如果您遵循此方法,OS X 分割區會遺失其休眠標誌,這表示下次啟動 OS X 時,它將不會從休眠狀態返回。相反,它將進行乾淨的啟動。為什麼是這樣?
OS X 是否會尋找睡眠映像的存在來決定是否從休眠狀態中喚醒或進行乾淨啟動,或者是否設定了某種系統變數/標誌?

概括

當 Win 7 進入休眠狀態時,它會完全關閉,然後您可以在啟動時啟動到 OS X。然而,在OS X 上,休眠會強制您喚醒進入OS X。中喚醒?

讓我們看看我們共同能想出什麼!

答案1

按照你的想法是不可能做到這一點的。問題在於Apple的韌體和OS X的緊密整合。

當 Windows 休眠時,它將 RAM 的內容轉儲到 C:\Hiberfil.sys 並在登錄中設定一個標誌,表示電腦已休眠。當您首次啟動 Windows 電腦時,啟動磁區代碼會載入 BCD 文件,該文件會在啟動程序的早期載入註冊表的該部分,並發現系統處於休眠狀態。執行基本的健全性檢查後,它將 hiberfil.sys 載入回記憶體。這裡重要的是所有這些都包含在檔案系統中。這就是為什麼您可以自由啟動到 OS X,然後再次啟動回到 Windows,它將繼續從休眠檔案復原。

OS X 則不然。但它保存了休眠標誌在 PRAM 中,而不是檔案系統(如果您有興趣,該設定稱為 IORegistryCurrentSleepMode)。當您重新開啟 Mac 時,系統會在嘗試啟動作業系統之前讀取 PRAM 中的值。如果該標誌表明系統處於休眠狀態,它所做的第一件事就是將其恢復到正常狀態。然後韌體立即啟動系統並忽略啟動磁碟首選項和任何Option啟動嘗試。你甚至沒有聽到啟動鈴聲。在 Mac 上,韌體包含檢查檔案系統和啟動作業系統所需的所有邏輯。它不像 Windows 需要啟動程式碼。

當您將 rEFIt 添加到混合物中時,它會將自身插入到流程中。它用自己的引導程式檔案取代了普通的 /System/Library/CoreServices/boot.efi (這是 OS X 的引導程式)。這就是我覺得事情變得模糊的地方,因為這都是Apple 專有的東西,但最重要的是,當韌體啟動OS X 時,它會傳遞載入/var/vm/sleepimage 所需的任何參數,而不是正常的Darwin 核心。 rEFIt 無法在 Lion 及更高版本中正確執行此操作。但無論是舊版的 OS X 還是新版本,韌體在 rEFIt 載入之前就已經翻轉了休眠位元。這就是為什麼在第一次開機後不再可能從休眠狀態恢復 OS X 的原因。

相關內容