anchor
バッテリー切れでデータを失わないためにMacのハイバネートのモードを変更する・ハイバネートスリープに入るタイミング調整する〜Low Battery Saverと組み合わせてスリープ設定を調整 MacBook Pro、MacBook Airなどのモバイルを出先で使用していてバッテリー切れになる…よくある光景だ。 その時にMacはどういう振る舞いをするか? 古いMacはそのまま起きなり落ちて、そこまでの仕掛かり中だったデータで保存していないものは全部消える…という動きをしていたが、intelMacになってOS Xもどこかのバージョンからハイバネートスリープがデフォルトになった。 このハイバネートスリープ…冬眠状態ということだが、別に昔のMacでもオンラインウエアを使って有効にする方法があったのだが、今のMacは「セーフスリープ」という名称でこのハイバネートをデフォルトで実行している。
ここでこの冬眠の仕様について。
通常のスリープはスクリーンの表示を黒に落として、バックライトを消灯する、ディスクのスピンドルを止める、CPUの活動を止めるということを実行してその目的は主に「省電力」ということになる。 目的は省電力なので作業を再開する時にはすぐに復帰して欲しい。
そこで仕掛かり中のデータは物理メモリの中に保存されたままだ。
メリットは読み出しが速いのですぐに作業を再開できる。
ただし物理メモリはRAMなので、記憶は常に電源を使用して励起していないと電源が途絶えたら消えてしまう。
昔のMacはバッテリー切れになると、作業中のワープロデータなどをスパッと素っ飛ばして落ちてくれたのはこのためだ。
これに対してハイバネートはスリープに入る前に、物理メモリの中身を一旦ハードディスクのスリープイメージ領域に書き出してから電源を落とす。
書き出しが完了したらCPUもディスプレイのHDDのスピンドルも全て止める。
勿論物理メモリの励起電源も止めるので全て消える。
要するにシステムを終了したのと同じ状態になる。 このメリットはメモリ励起も含めて完全にシステムを落とすのでバッテリーを温存できる。
さらにメモリの中身はHDDに保存されているので、もし温存しても結局バッテリーが落ちてしまったとしても次回起動時に電源さえあればHDDからメモリの中身を読み出して、まさに落ちたところから続きで作業をできる。
とても安全なスリープだと言える。 デメリットはスリープに入る時、復帰する時に時間がかかることだ。
スリープに入るたび、抜けるたびにいちいちメモリをディスクに書き出し、ディスクから読み出しをするので特にモバイルの時はふたを閉めて移動とか頻繁にあるだろうから、その度に書き込み書き出しが完了するまで待っていなくてはいけないんじゃ使えない。
ましてや最近は物理メモリも1GB、2GB…8GB、16GBとどんどん大容量化しているので、書き込み・読み出しの時間だってバカにならない。
そこでMacのセーフスリープということになる。
これは通常スリープとハイバネートの良いとこ取りといえる。 スリープに入らない時にも常時スリープイメージというファイルをとっておき、そこに常時物理メモリのバックアップを取っておく。
通常はスリープに入るとすぐにディスプレイなどを落としながらメモリに仕掛かり中のデータを励起して保存しておく。
要するに通常のスリープと同じ動きをする。
バッテリーの残量が残り少なくなったら、メモリのディスクへの書き出しを始めながらがらスリープに入る。
HDDに保存しながらメモリにも通電してデータを励起しておく。
もしバッテリーがその間無くなったとしても、HDDにはバックアップがあるのでそこから作業を再開できる。 このメリットは通常スリープと同じようにスリープに入る時、抜ける時にいちいち待たされないこと。
バッテリーが残り少ない時にユーザが意識しなくてもハイバネートに切り替えてくれるので残量に神経質にならなくてもよい。
デメリットはハイバネートと比べると、スリープ後もメモリ励起のためにバッテリー電源を使うのでスリープ中にバッテリー切れになってしまう可能性があることぐらいか。 バッテリーの寿命的には安全なのは電源を完全に落とすハイバネートの方だということになるかもしれない。
本当はバッテリーの寿命を考えると過放電は避けたいので、ここまでなるまでバッテリーを使い切らない方が良い。
しかし万一そうなっても仕掛かりデータだけは安全だということだ。
ハイバネートスリープ時のメモリのバックアップはここにある
/var/vm/にsleepimageという数GBのファイルがあってこれがメモリの中身を
コピーしているのだがよく見るとメモリの使用領域のサイズと合っていないことが分かる
常にリアルタイムでバックアップしているわけではなく
お手すきの時に随時バックアップを取っているという感じだ
そこでスリープの仕様を一通り説明したところでやっと本題だ。 このスリープのモードは変更できる。
さらにハイバネートスリープに入るタイミングも調整できる。 そんなことをする必要があるシチュエーションなのだが、上記の解説の通りバッテリー切れでデータがすっ飛ぶのが怖いか、メモリ励起中にバッテリー切れになってバッテリーの過放電が怖いか…という選択がある。 バッテリー切れでデータがすっ飛ぶなんてそうしょっちゅうあることじゃないし、ギリギリまでバッテリーを酷使してバッテリーの寿命が短くなる方がいやだ…という考え方も当然ある。 あるいはsleepimageで数GBディスク容量を常時取られているのはいやだ…バッテリー切れまで使い切ることなんて滅多にないので通常スリープのみにしたいという考え方もあるだろう。 前者のバッテリーの寿命を優先したいという場合は、セーフスリープをハイバネート(ディープスリープ)に切り替えることができる。
あるいはデフォルトよりもバッテリの残り残量がまだ余裕があるうちにスリープに落ちるようにタイミング設定をするということが考えられる。 後者のデータ保護やバッテリー保護よりもディスクスペースを優先したい場合は、ハイバネートを止めて通常スリープしかしない設定に切り替えるということも考えられる。
MacBook Proなどのモバイルを結局机のうえに固定して、デスクトップパソコンのようにして使っている人も多い。
常時電源は刺さっているのでバッテリー切れの心配なんかしなくて良いという場合は、通常スリープだけに切り替えてもいい。
またこれはバッテリーを交換する前に私のMacBook Proで起こっていたことだが、Macはセーフスリープでバッテリー切れで落ちてもデータを保護してくれる筈なのに、実際は電源を復活させてみると、データが消えてしまっているというケース。 この場合は下記のLow Battery Saverでハイバネートに入るタイミングを調整できる。
とりあえず、まずスリープのモードを変更するTerminalコマンドを紹介する。
まずデフォルトのスリープ設定を確認する
Terminalを起動してpmset -gとコマンドを打つ
パワーマネージャーの設定を確認することができる
hibernatemodeの項目が0になっている時は通常スリープのみの設定
1になっている時はディープスリープのみの設定、3がデフォルトでセーフスリープ
この設定を通常スリープのみに変更したい時には以下のコマンドをEnterする
sudo pmset -a hibernatemode 0
pmset -gするとhibernatemodeの項目が0に変わっているのを確認できる
これでハイバネートなしの通常スリープのみに設定変更された
元に戻したい時にはsudo pmset -a hibernatemode 3と打つ
ディープスリープのみにしたい時にはsudo pmset -a hibernatemode 1
セーフスリープの時にバッテリー切れの何分前にスリープに入るかという設定は不明
以前のOS Xにはautopoweroffdelayという項目があったがこれはスリープ後何分後に
ディープスリープに入るかという設定だったしMavericksではこの項目もなくなっている
感触ではデフォルトでバッテリー切れの数分前という感じがしている
なおこのキャプチャは上はAC電源時にpmset -g、下はバッテリー駆動時にpmset -gを実行
表示している項目やパラメーターが微妙に違うのが分かる
コマンドでスリープモードを変更できるのを確認できたら、次はディープスリープに入るタイミングを設定する。
anchor

Low Battery Saver(Freeware)
OS10.6SnowLeopard対応 OS10.7Lion対応 OS10.8Mountain Lion対応
OS10.9Mavericks対応
セーフスリープに入るタイミングを調整、またその直前に警告を出したり任意のバッテリー残量で残量警告を出したりの設定ができるメニューバーアプリ。 リチウムインフォバッテリーは、その残量をほぼ正確に表示できるのだが数年使っているとその表示に誤差が出てくる。
バッテリ残時間20分と出ているのにいきなり電源が落ちたりする。 こうなると仕掛かり中のデータも消えるしバッテリーも結局過放電でさらに容量が失われる。
私のMacBook Proの先代のバッテリーは、末期の頃こうしてどんどん充電容量を失っていき最終的には40分も保たないところまで消耗していた。
しかも残時間があるのに毎回突然落ちて仕掛かり中のデータも消えるだけでなく内蔵ディスクにもストレスをかけてしまう。 こういう場合は残時間20分前までは保つことを確認しているのだから、ハイバネーションに入るタイミングを20分前に設定すればいい。(デフォルトは多分数分前) この設定はLow Battery Saverで変更する。
こういうアプリをバッテリーを交換する前に知っていれば、もう少し先代のバッテリーを延命できたのに…とは思う。
Low Battery Saverを初回起動すると「ログイン時に起動するか?」と訊いてくる
これは「今は設定しない」を選んでもあとで変更できるので任意で
Low Battery Saverはメニューバーアプリとして常駐する
メニューバーアイコンのプルダウンで設定画面に入れる
設定項目はバッテリ残時間が何分になったらセーフスリープに入るか
その時に何秒警告画面を出すか、それとは別にローバッテリーの警告を
残時間何分の時に出すかなどの設定がある
寝落ちしてキャプチャを取り損ねたので作者サイトから
借りてきたキャプチャだがハイバネートスリープに入る前にこんな警告を出す
Low Battery Saverを使って早めにハイバネートスリープに入る設定にしておけば、バッテリーの残時間を確保できるのでスリープ中にバッテリー切れになってバッテリーを過放電にする可能性も低くなる。
そうするとバッテリーの容量消耗をいくらか遅らせることができる筈だ。 Low Battery Saverを入れなくてもデフォルトの設定で、バッテリー切れの時に仕掛かり中のデータを守ることはできると思うが、このアプリを入れておくことでデフォルトよりも早くスリープに落ちる設定にするわけだから見かけのバッテリー持続時間は少なくなるが、寿命は延ばせるということだ。
このアプリの本当のメリットはそこらだと思う。
2014年7月13日
|