web-dev-qa-db-ja.com

OSXとBootcampWin7の間で休止状態

Win 7とOS Xの真の休止状態のシステム機能を使用して、2つの間の一種のインスタント切り替えを作成することは可能ですか?スリープイメージをクイックSATA-3SSDに読み書きするときにこれを想像してみてください。

Hibernate-corruption-fix:これが可能になったら、異なるパーティションが相互に書き込み可能になっていないことを確認してください。 (たとえば、Boot Camp Windows7がOSXパーティションに書き込めないようにします。その逆も同様です)。この安全対策により、システムが休止状態になっているときに、異なるシステムが相互に破損することを防ぐことができます。

編集:これが正しいかどうかわからないことに気づきましたパーティションがディスク上でどのように機能するか。休止状態のOSXカーネルは、ディスク上のブロックへの参照を持っている可能性があり、再びウェイクアップされたときに書き込みを続行します。これらのようなディスクブロックはパーティション内に含まれていますか、それとも書き込まれた後にパーティションに割り当てられていますか? HDDとSSDで違いますか?これは上記のhibernate-corruption-fixに影響しますか?

では次に進みましょう:

Windows 7には、OS Xパーティションから再起動できる「休止状態」オプションがすでにありますが、OSXはまったく同じものを提供していません。

OS Xでは、hibernatemodeシステム変数を変更することで休止状態にすることができます。

OS X 10.7より前

Sudo pmset -a hibernatemode 2

OS X 10.7

Sudo pmset -a hibernatemode 25

これにより、スリープ状態にしたときにMacが休止状態になります。あなたはそれをスリープ状態にすることができます:

Sudoシャットダウン-snow

わかりました、これまでのところとても良いです。したがって、Windows 7とOS X Lionの両方を自由に休止状態にすることができます。ちょっと待って!まだまだ問題があります。

OS Xを休止状態にすると、Macの電源を再び入れると、OS Xが自動的に起動します。これにより、パーティション間の「ホットスイッチング」に使用できなくなります。

考えられる修正:
rEFItBlesserなしで rEFIt をインストールすると、OSXの休止後にrEFItブートメニューが表示されます。ただし、OS X 10.7 Lionでは、これは完全には機能しません。代わりに、黒い画面が表示され、Macをハードシャットダウンする必要があります。でもねえ!少なくとも、OSXの自動起動が中断されますね。多分それはそこからさらに微調整することができます。

以前のOSXで述べたように、rEFItブートメニューは、休止状態のシャットダウン+電源投入後に実際に表示されます。これにより、たとえば代わりに、Boot Camp Windows 7パーティションを起動します。ここにも問題があります。この方法に従うと、OS Xパーティションは休止状態フラグを失うようです。つまり、次にOS Xを起動したときに、休止状態から戻ることはありません。代わりに、クリーンな起動を行います。 これはなぜですか?
OS Xはスリープイメージの存在を探して、休止状態から復帰するか、クリーンスタートを実行するかを決定しますか、それとも何らかのシステム変数/フラグが設定されていますか?

概要

Win 7が休止状態になると、完全にシャットダウンし、起動時にOSXを起動できます。ただし、OS Xでは、休止状態によりOS Xにウェイクアップする必要があります。これをハックして、OS Xが休止状態になった後にブートパーティションを選択し、後でOS Xに戻って休止状態からウェイクアップできるようにできますか? ?

まとめて何ができるか見てみましょう!

22
Willem

あなたが考えているようにこれを行うことは不可能です。問題は、AppleのファームウェアとOS Xの緊密な統合にあります。OSXとファームウェアは相互に連携して、コンピューターのスリープ状態を判別します。

Windowsが休止状態になると、RAM=の内容がC:\ Hiberfil.sysにダンプされ、マシンが休止状態であることを示すフラグがレジストリに設定されます。Windowsマシンを初めて起動すると、ブートセクターコードはBCDファイルをロードします。BCDファイルはブートプロセスの非常に早い段階でレジストリのその部分をロードし、システムが休止状態になっていることを確認します。基本的な健全性チェックを実行した後、hiberfil.sysをメモリにロードします。ここで重要なことはすべてこれはすべてファイルシステムに含まれているため、OS Xから自由に起動してWindowsに再度起動すると、休止状態のファイルから再開できます。

同じことはOS Xには当てはまりません。OSXが休止状態になると、RAMの内容がWindowsと同じように/ var/vm/sleepimageにダンプされます。ただし、休止フラグは保存されます- PRAM内、ファイルシステムではありません(興味がある場合、設定はIORegistryCurrentSleepModeと呼ばれます)。Macの電源をオンに戻すと、OSを起動しようとする前に、PRAMの値が読み取られます。フラグがシステムが休止状態であることを示している場合、最初に行うことは、システムを通常のステータスに戻すことです。その後、ファームウェアはすぐにシステムを起動し、起動ディスクの設定を無視します。 Option+ブート。スタートアップチャイムも鳴りません。 Macの場合、ファームウェアには、ファイルシステムの検査とOSの起動に必要なすべてのロジックが含まれています。 Windowsのようにブートコードは必要ありません。

REFItをミックスに投入すると、プロセスに挿入されます。通常の/System/Library/CoreServices/boot.efi(OS Xのブートローダー)を独自のブートローダーファイルに置き換えます。これはすべてApple=プロプライエタリのものなので、私にとって不明瞭になる場所ですが、一番下の行は、ファームウェアがOS Xを起動するときに、/ var/vmをロードするために必要な引数を渡すということです通常のDarwinカーネルの代わりに/sleepimage。rEFItはLion以降ではこれを適切に行いません。ただし、OS Xの古いバージョンであるか新しいバージョンであるかに関係なく、ファームウェアはrEFItがロードされる前にすでに休止状態ビットを反転しています。これそのため、最初の電源投入後、休止状態からOSXを再開することはできなくなりました。

18
Wes Sayeed