EeePCなんかでLinuxのWritebackの周期を延ばしたりため込むメモリ設定をいっぱいに設定していると、使っている間は快適ですし、SSDの寿命にもいいのですが、いいことばかりではなく、不意のリブートや電源断等でデータを失う可能性も高くなりますし、使っている最中に掃き出しが始まるとぎくしゃく一瞬止まったようになったりします。そこでコンピュータがヒマな時にsyncしてはどうかと思いやってみました。使ったPCはEeePC 901でOSはUbuntu 8.04ベースのeeeUbuntuです。
準備
sudo apt-get install xautolock
単純にユーザが使っていない時にsyncする
xautolock -time <idle 分> -locker sync
pm-utils等でガバッと長い周期とメモリ保持量に設定しておき、上のコマンドを走らせておく。本来はスクリーンセーバ起動用のソフトなのですが、単純にsyncを呼び出すだけでOK。これで無操作状態が続く限りidle分ごとにsyncが走ります。
なにか処理が走っていて負荷が高いっぽい時にはsyncしないようにする
/proc/loadavgをチェックしてユーザが操作していなくて、CPUもヒマな時だけsyncするようにする。
以下のスクリプトをsync.pl等の名前で~/bin辺りに保存してchmod +xしておく。
#!/usr/bin/perl
open(FD,"</proc/loadavg") || die "can't open loadavg";
@u = split ' ',<FD>;
close FD;
if ($u[0] < 1.0 && $u[1] < 1.0 && $u[2] < 1.0) {
system("sync");
}
これを下のようにしてxautolockを起動。
xautolock -time <idle 分> -locker "~/bin/sync.pl"
私は1〜5分程度の短い時間に設定してみました。特にメモリの少ない方やバッテリーが低いとき、ちょっとした隙に書き出しをしてくれて安全。メモリが多い方は長めにとってもいいかもしれません。
どれだけDirtyバッファがたまっているか調べるには
egrep "Dirty|Writeback" /proc/meminfo
納得のいく時間設定が出来たら[システム]->[セッション]から自動起動に追加する。
ほんとはI/O負荷もcheckしたいところだけど、今回はまあよしとすることに。