Ubuntu Gutsy(7.10)でuswsusp + hibernate-scriptによるハイバネーションを行う
Ubuntu Linux(Debianも同様)では、TuxOnIceを使用するよりも、uswsusp方式のほうが楽で、簡単に導入できる。hibernate-scriptがこれに対応していることにより、一部設定が必要な部分もあるが、TuxOnIceによる休止をhibernate-scriptで実行するのと同じ感覚で休止できる(直接s2diskを実行してもOK)。もちろん、X Window System上での作業状態も保存される。
ただし、今回の実験では、ファイルへの書き込みと、休止時のグラフィカルな進行状況表示はうまくいかなかった。
(2009/1/15)Ubuntu Intrepid(8.10)の時点では、標準で用意されているシャットダウンメニューからの「ハイバネート」から休止/復帰ができていることを確認した(Sun xVM VirtualBox上)。これがうまく動作しない場合やhibernate-scriptで細かく(休止前や復帰後の)動作を制御したい場合にはここで扱っているuswsuspを使用することになる。
uswsusp(Userspace Software Suspend)について
その名の示す通り、ユーザ空間プログラムを使用して休止状態にするパッケージ。uswsusp自体は休止/復帰の支援を行うもので、カーネルは従来のswsuspの項目を有効にしてビルドされている必要がある。Linux 2.6.17と、それ以降のバージョンで使用できる。
swsuspのユーザ空間上の支援という形のためか、全体的には、TuxOnIceよりも使いやすく、欠点も少ないような印象がある。
利点
- ユーザ空間プログラムを使用するため、カーネルへのパッチが必要なく、導入が楽
- LZO(過去のバージョンではLZF)圧縮と暗号化、イメージのチェックといったTuxOnIceと同様の機能で休止/復帰プロセスを支援
- ディスクとメモリの両方へのイメージ保存の組み合わせ(s2both)をサポート
- イメージ保存は古い方式のためか、安定している
- ユーザ空間のグラフィカルな進行状況表示(Splashy)を使用できる仕組みになっている
準備の流れ
せっかくUbuntuを使うので、わざと端末を使わない方向でやってみる。OSインストール直後の前提で、DebConfのUIの設定も含んでいる。もちろん、端末を起動して作業を行っても問題はない。
- 「システム - システム管理 - Synaptic パッケージ・マネージャ」を選択し、Synapticを起動
- 「検索」ボタンを押し、「hibernate」と入力、対象は「パッケージ名」で検索
- 「hibernate」の項目をダブルクリックしてチェック
- 同様に「uswsusp」と「splashy」をそれぞれパッケージ名検索してチェック、「splashy-themes」も入れる
- 「適用」ボタンでダウンロードとインストールを行う
- ダイアログに「利用可能なスワップ領域がありませんが、続行しますか?」とたけ出たらとりあえず進めておく(設定はされない?)
- Synapticを終了
- GNOMEパネルを右クリックし「パネルへ追加」で「アプリケーションの実行...」を追加
- 追加されたアイコンをクリックして「gksudo "gnome-terminal -x dpkg-reconfigure debconf"」と入れて実行し、キーボードの上下矢印キーで「Gnome」インターフェースを選択してEnter。*3その先の質問はそのままEnter。
- アプリ起動のアイコンから今度は「gksudo dpkg-reconfigure uswsusp」を実行し、uswsuspの設定に入る(設定後少し時間がかかる)
- 起動のアイコンから「gksudo gedit /etc/hibernate/hibernate.conf」を実行し、「TryMethod ususpend-disk.conf」を一番上に書き足す
(2008/4/24)スワップのUUID記述に関しては「uswsusp(ユーザ空間で動作する休止状態支援ツール)を使用してスワップパーティションの指定にUUIDを使用する」を参照。
休止の実行とラッパースクリプト
まずはhibernateをパスワード無しで実行できるようなsudoの設定が必要。「TuxOnIceの休止と復帰の実際(3.0-rc1の時点)」を参照。グループ名の部分は「%admin」に変更しておく。
(2007/10/24)実際の作業としては、アプリの実行から「gksudo "gnome-terminal -x visudo"」を実行し、
Cmnd_Alias HIBERNATE=/usr/sbin/hibernate %admin ALL=NOPASSWD: HIBERNATE
の2行を追加し、Ctrl+X、Y、Enterの順に押して上書き保存する。
次にラッパースクリプトを作り(内容は好みで修正)、これを実行するようなランチャをパネルなどに作成しておく。
[任意]ファイル名: ~/bin/hibernate-wrapper-gutsy
#! /bin/dash HIBERNATE_OPT="--force" VERSTYLE_OPEN="<span style='italic' weight='bold' foreground='darkred'>" VERSTYLE_CLOSE="</span>" if [ "$1" != "-f" ]; then zenity --question --title="休止状態の確認" --text "\ uswsusp:\t\t${VERSTYLE_OPEN}$(dpkg-query -W -f='${Version}\n' uswsusp)${VERSTYLE_CLOSE} hibernate-script:\t${VERSTYLE_OPEN}$(dpkg-query -W -f='${Version}\n' hibernate)${VERSTYLE_CLOSE} 休止しますか?" if [ $? = 1 ]; then exit 1 fi fi gksudo "/usr/sbin/hibernate ${HIBERNATE_OPT}" numlockx off; numlockx on
ファイルへの書き込みについて
uswsuspは、ファイルへのイメージ保存をサポートしている。手順*4通りに作業を行うことで、イメージの保存は、スワップへの書き込みと同様に進み、電源が切れるところまではいくのだが、現状では、復帰がうまくいかない。
もし、(スワップとして使用する容量 + 圧縮済みメモリイメージの容量を含めるのに)十分なサイズのスワップパーティションがあるのであればそれを使い、そうでなければ、既存のスワップパーティションをメモリイメージ保存専用にして、スワップ用途として「ファイル」のスワップを用いるという手段もあり、こちらのほうが作業が少なくて楽。
(2007/10/23)ファイルへの書き込みと復帰に成功したので修正
関連記事:
- Linux上で休止状態を実現するTuxOnIceの概要と準備(3.0-rc1の時点)
- TuxOnIceの休止と復帰の実際(3.0-rc1の時点)
- hibernate-scriptの設定ファイルと、GRUB設定の入れ替え機能について
- Ubuntu Gutsy(7.10)でuswsuspのスワップ「ファイル」からの復帰ができなかった件の対処と、ファイルへの書き込みの流れ
- Ubuntu Gutsyでのuswsuspのスプラッシュを動作させるための覚え書き
- Ubuntu Gutsy(7.10)でuswsusp関連の設定を半自動で行うスクリプトを試作
- Mandriva Linux 2009.0上のuswsuspについての覚え書き(前半)
- Mandriva Linux 2009.0上のuswsuspについての覚え書き(後半)
*1:http://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%E6%96%B9%E5%BC%8F の「デマンドページング」を参照。http://www.tuxonice.net/features にはTuxOnIceのメモリイメージ保存方式についての記述がある
*2:設定により、キャッシュを保存しないこともできる