2007年09月17日

ハイバネートの問題 - 一応の解決

Dellに移ってから、どうもスリープ(サスペンド)が安定しないので困ってきた。これに関してはだいぶと運用で乗り切れるようになってきていたのだが、その報告を書く前に(たぶんHALの)ハードウェアの認識がおかしくなって、またちょっとスリープがうまくいかなくなってきた。どうもこの子は寝るのが不得意である。けれど、モバイルでもガンガン使ったiBookとは違って、デスクノート型のこのDell Inspironは外に持ち出すことがほとんどない。だからスリープがうまくいかなくても、それほど大きな不便は感じずにすむ。そして、スリープが不調な分、iBookではできなかったハイバネートができる。作業中の状態をそのままにして電源を落とすことができるという機能だ。Dellではスリープよりもむしろこのハイバネートをよく使う。このあたりは以前に報告したとおりだ。
ところが、このハイバネートの方もけっこうトラブルが多い。 Suspend2を入れてうまくいくかと思っていたら、どうもそうでもない。そこでuswsuspを併用した。その効果があるのかないかわからないが、少なくともuswsuspを使うと、進行状況がブランクスクリーンに表示されるから、その分は安心だ。ただ、使用状況によってはけっこうしょっちゅう、進行状況が表示されず、その代わりに色とりどりの奇妙な画面が表示される。そのあとで無事にハイバネーとに入ってくれることもあれば、そのままフリーズすること、ハイバネートに入り損ねて再びシステムが動いてしまうこともある。

しばらく使って、どうやらこれはswap領域の不足なのだということがわかった。というのは、uswsuspの進行状況では、最初に「スナップショットをとっています」というメッセージがしばらく出て、その後で「イメージをディスクに書き込んでいます」というメッセージになる。このとき、イメージの大きさとswapの空き領域の大きさが表示される。つまり、作業中のスナップショットをイメージにして、それをswapに書き込むというのがハイバネートの方法らしい。
そして、このイメージの大きさが、大抵の場合、swapの空き領域よりも大きくなっていた。200M〜300Mぐらいの大きさのイメージに対して、空き領域の方は200Mぐらいしかない。少し足りない。足りなければトラブルが自動的に起こるのかというと決してそうでもなく、ときには空き領域の方が小さいのに無事にハイバネートしてくれる。ときにはフリーズしたり、再びイメージを展開させて作業中に戻ったりもする。だからswapの空き領域が問題だという確証があったわけではないのだが、まあ、おそらくそうだろうと見当を付けていた。振り返ってみればいい勘をしていたことになる。
ここで、その勘通りにswap領域を増やせば問題はなかったのだろう。ちなみに、swapの大きさはインストール時の自動設定で500Mとなっている。確か仮想メモリの大きさは物理メモリの倍ぐらいを目安にするのだと思うから、この倍あってもいいわけだ。ディスクに余裕がないわけではないし、さっさとやってればよかった。
けれど、7.04になってからどうも内蔵HDのマウント方式が変わったらしく、内蔵HDからの起動中にGpartedを使おうとしたら、パーティションが「アンマウントできません」と文句をいわれてしまう。わざわざライブCDから立ち上げるのも面倒だなと思っていたら、ある日、synapticにswapdとswapspaceというソフトを見つけた。これは別々のソフトだけれど、どちらも同じような機能で、要はswap spaceを設定しなくても、自動的にswap fileを作成してくれるというアプリケーションだ。これを入れたらswapパーティションの不足が補えるのではないか。説明によると、swap領域を優先し、不足するときに稼働するというようなことも書いてある。だったら使えるだろうと見当を付けてインストールしてみた。途中で取り替えて両方とも使ってみたが、たぶん同じようなものだろう。
で、結論からいうと、これらのswap fileを作るソフトはサスペンド時のswap領域の不足を補う働きはしないものだった。なぜなら、swap領域をゼロにして使ったら、確かに自動で必要なswapはファイルを作って確保しているのに、ハイバネートの動作に入ろうとしたら即座にswap領域不足でもとの状態に戻ってしまうからだ。書き込もうとトライさえしない。それはそうなのかもしれない。swap領域の代わりにファイルを作成するソフトそのものがシステムの上で動くのに、それはもう既にイメージ化されてしまっているのだから。やっぱり物理的なswap領域は必須だったようだ。
そこでパーティションをいじればいいものを、まだぐずぐずして、今度はウィンドウマネージャを変えてみることにした。swap領域が不足するのはつまりswapするからだ。swapするのはメモリが足りないからで、メモリが足りないのならメモリ食いのGnome環境を止めればいいというわけだ。振り返ってみたら本末転倒だと思うが、何せいっぺん経験のあるJWMに移るのは何ほどの手間でもないので(設定ファイルは以前のをそのまま流用した)、JWMをデフォルトにしてみた。そして使うこと1週間ほど。
確かに予想は正しく、JWMだとずっとスムーズにハイバネートしてくれる。久しぶりに軽量環境の感覚は悪くない。このままこれでいくかとも思ったが、やっぱりハイバネートのトラブルはゼロになったわけではないし、それにJWM環境だとスリープができない。以前のiBookならLidを閉じるという動作でスリープになったのが、DellはどうもLidにトラブルがあるからそこをオフにしてある。おまけに、冒頭に書いたトラブルから、HALの設定が今ひとつおかしく、どうもJWMからうまくスリープさせることができない。
そこである日、ついに意を決してライブCDをとりだし、改めてswap領域の大きさを変更してやった。すると、なんのことはない、実に安定してハイバネートできるようになったのだ。こうなったらもうJWMにいる必要もないので、改めてGnomeに戻ってきた。ということで、ようやく報告をこうしてまとめることができるようになった。
なんだか、無駄な足掻きをしていたのをクドクドと書いただけで恥ずかしい。要は、「ハイバネートがうまくいかない原因はswap領域の不足でした」ということ。その対策は、単純にGpartedを持ち出してパーティションの大きさを調整すること。どうやらこれに尽きたようだ。
posted by 松本 at 20:25| Comment(0) | Ubuntuでの失敗・トラブル | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。