6年もののネットブックを余ったSDカードで高速化してみる・続報 スリープ・ハイバネート不具合への対処

(ご注意) 現時点でも対処は継続中です。良好な結果が出次第、本エントリは随時更新されます。

以前のブログの記事にて、ネットブックに余ったSDカードを挿入し、それをスワップ領域として活用することで高速化を図るやり方を紹介した。ところが、この方法を採用すると、スリープやハイバネートが効かなくなるという問題点がある。
今回はそのための対処の方法である。(参考サイト: http://afrivirt.wordpress.com/2010/06/04/4/)

まず、内蔵ハードディスクのスワップ領域が残っていることを確認する。
スワップが内蔵ハードディスクの場合にスリープやハイバネートが正常であり、SDカードをスワップ領域にするとうまくいかないという場合には、スリープやハイバネートのときに、このSDカードのスワップ領域を使用停止にするとよい。もちろん、回復するときには改めて有効にすることも必要である。

そのために行うのは、/etc/pm/sleep.dというディレクトリの下に、ちょっと特別なファイルを作成することである。

端末から、

sudo gedit /etc/pm/sleep.d/11_sdcardswap

(ファイル名は任意だが、先頭の11_はあまり変えない方がいいだろう)と打ち込み、ファイルを作成する。このファイルは以下のような内容とする。

#!/bin/bash

case $1 in

hibernate)

echo “Turning off sdcard swap …”

swapoff /dev/mmcblk0p1

;;

suspend)

echo “Turning off sdcard swap …”

swapoff /dev/mmcblk0p1

thaw)

echo “Turning on sdcard swap …”

swapon -p 10 /dev/mmcblk0p1

;;

resume)

echo “Turning on sdcard swap …”

swapon -p 10 /dev/mmcblk0p1

;;

*)

echo “Wrong operation”

;;

esac

さらに、このファイルは実行可能にしておかなければならない。端末から以下のコマンドを打ち込む。

sudo chmod +x /etc/pm/sleep.d/11_sdcardswap

先ほど作成したファイルは、スリープ時やハイバネート時にSDカードへのスワップをOFFにし、逆にレジューム時やハイバネートからの回復時にはSDカードへのスワップを再びONにするものである。
ただ、このままでは、スリープやハイバネートのときにスワップがなくなってしまう(そうなると特にハイバネートのときにはたいへん困ったことになる)。そこで、改めてハードディスクのスワップ領域を有効にしておく。これは、/etc/fstabで記述する。
このときに、なるべくSDカード側のスワップ領域が使われるよう、スワップの優先度を変更しておくとよい。

/dev/mmcblk0p1    swap    swap   sw,pri=10  0   0

/dev/sda3               swap    swap   sw,pri=0   0   0

上記は、/etc/fstabにおけるスワップの部分だけの抜粋である。
オプション領域で「sw,pri=…」と記述されているのが、スワップ領域の優先度である。この場合にはSDカード領域(/dev/mmcblk0p1)の方をハードディスク(/dev/sda3)より高く設定している。

以上の作業が終わった時点で再起動し、設定を有効にすれば大丈夫なはずである。

…はずなのだが、現時点では、スリープはまぁまぁ動作する(しない場合もあるが、コマンドラインでsudo pm-suspendとするか、メニューから選ぶとほぼ間違いない)ものの、ハイバネートはほとんどダメである。
ひょっとして、Ubuntu 14.04だとうまくいく、ということもあるのかも知れないが、さすがにもう6年にもなるネットブックをいまさらアップデートするのも何なので、とりあえずUbuntu 12.04のままで対処方法を探ってみているところである。