OS X と Bootcamp Win 7 間の休止状態

OS X と Bootcamp Win 7 間の休止状態

Win 7 と OS X の真の休止状態システム機能を使用して、両者を瞬時に切り替えられるような仕組みを作ることは可能でしょうか? スリープ イメージを高速 SATA-3 SSD に読み書きするときにこれを想像してみてください。

Hibernate 破損の修正:これが可能になった場合は、異なるパーティションが互いに書き込み可能になっていないことを確認してください。(たとえば、Boot Camp Windows 7 が OS X パーティションに書き込めないようにし、その逆も同様にします)。この安全対策により、1 つのシステムが休止状態になったときに、異なるシステムが互いを破損することがなくなります。

編集:ディスク上のパーティションがこのように動作するかどうかはわかりません。休止状態の 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 をスリープ状態にすると休止状態になります。次の方法でスリープ状態にすることができます。

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

あなたが考えている方法では、これを実行することはできません。問題は、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 では、ファームウェアにはファイルシステムを検査して OS を起動するために必要なすべてのロジックが含まれています。Windows のようにブート コードは必要ありません。

rEFIt を混ぜると、プロセスに挿入されます。通常の /System/Library/CoreServices/boot.efi (OS X のブートローダー) を独自のブートローダーファイルに置き換えます。これはすべて Apple 独自のものなので、私にとっては不明瞭な部分ですが、要するに、ファームウェアが OS X を起動するときに、通常の Darwin カーネルの代わりに /var/vm/sleepimage をロードするために必要な引数を渡します。rEFIt は Lion 以降ではこれを適切に実行しません。ただし、OS X の古いバージョンか新しいバージョンかに関係なく、ファームウェアは rEFIt がロードされる前にすでにハイバネーションビットを反転しています。これが、最初の電源投入後に OS X をハイバネーションから再開できなくなった理由です。

関連情報