2008/05/03

5/03/2008
ハイバネート(hibernate)とは直訳すると冬眠という意味だが、コンピュータの機能におけるハイバネートとは、メモリイメージをディスクに退避して、終了(電源ダウン)する機能のことを言う。

Ubuntu 8.04+ATI Radionディスプレイドライバの環境にてハイバネートを行った場合、起動しているプログラムの数により、以下のエラーにてハイバネートが正常動作しない現象が発生した。

[ 510.945354] swsusp: Not enough free memory

調査したところ、ハイバネートでは、退避に必要なメモリサイズを/sys/power/image_sizeから参照しており、このサイズが500MB( 524288000 )固定であるため、スワップを含めたメモリ使用量が500MBを超えた場合に、上記エラーとなることが判明した。

ハイバネートの手続きは/etc/acpi/hibernate.sh 及び/etc/acpi/suspend.d/*で定義されているので、/etc/acpi/suspend.d/ディレクトリに/sys/power/image_sizeを現在のスワップを含めたメモリ使用量で更新する以下シェルスクリプトファイルを追加した。

FileName: /etc/acpi/suspend.d/00-image_size_upd.sh
#!/bin/sh
free | \
awk '{if($1=="-/+"){size+=$3;}if($1=="Swap:"){size+=$3;}}END{print size*1024}' \
> /sys/power/image_size

シェルスクリプトファイルを追加が終わったら、以下コマンドにて実行権を与えておく。
chmod +x /etc/acpi/suspend.d/00-image_size_upd.sh

以上の修正にて、ハイバネートが正常に動作するようになった。
同様の事象にて困っている方がおられたら参考にされたい。

0 コメント:

コメントを投稿