Ubuntu(Hardy)のサスペンドとハイバネート その2 改訂

Ubuntu(Hardy)のサスペンドとハイバネートで紹介したスクリプトが大分前から動作しなくなっていたので見直した。

復帰時にswap領域が認識されず、「Unable to find swap-space signature」と表示される件については、「/etc/initramfs-tools/conf.d/resume」というファイルに、

RESUME=LABEL=SWAP

と書いて保存し、


# []mkswap -L SWAP /dev/[]sdaX
でswapパーティションに「SWAP」とラベルを付ければ正しく動作する用になった。


他のパーティションLinuxをインストールし/bootとswapを共有する場合に必用になる、ハイバネートで電源を落とした後復帰時に表示されるGrubメニューを変更するスクリプト「/etc/pm/sleep.d/95-grub-changemenu.sh」に関しては、変更するターゲットを「/boot/grub/menu.lst」から「/boot/grub/grub.conf」に変更する。

#!/bin/bash

. /usr/lib/pm-utils/functions

TARGET="/boot/grub/grub.conf"

grub_modify() {
  UNAME_R=$(uname -r) ;
  test -w $TARGET || return 1 ;
  local -i gdefault=0 ;
  local ttl rest ;

  grep '^title' $TARGET | while read ttl rest ; do
    if [ -z "$(echo $rest |fgrep $UNAME_R)" ] ; then
      gdefault=$gdefault+1 ;
    else sed -i~ -r "\
                     s/^(default\s+)[[:digit:]]/\1${gdefault}/;\
                     s/^(timeout\s+)5/\11/;\
                     s/^#\s*(hiddenmenu)/\1/;\
                     " $TARGET ;
      return 0 ;
    fi
  done
  return 1 ;
}

grub_resume() {
  cp -a ${TARGET}~ $TARGET ;
  return 0 ;
}

case "$1" in
        hibernate)
                grub_modify;
                ;;
        thaw)
                grub_resume;
                ;;
        *)
                ;;
esac

exit $?

再度説明すると、引数がhibernateの場合、grub.confをgrub.conf~にバックアップし、sedで書き換える。
具体的には、Ubuntuの現在のカーネルをdefaultにし、timeoutを5から1にし、hiddenmenuのコメントアウトを取り払っている。
引数がthawの場合はgrub.conf~をgrub.confに書き戻す。