#topicpath

#contents

*サスペンド・ハイバネーション の FAQ [#w647edf2]

-[[ACPI - Debian Wiki>https://wiki.debian.org/ACPI]]
-[[Suspend - Debian Wiki>https://wiki.debian.org/Suspend]]
-[[Hibernation - Debian Wiki>https://wiki.debian.org/Hibernation]]
--[[Hibernate Without Swap Partition - Debian Wiki>https://wiki.debian.org/Hibernation/Hibernate_Without_Swap_Partition]]
-[[Off and On again - Debian Wiki>https://wiki.debian.org/OffAndOnAgain]]

----

[[サスペンド>http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AA%E3%83%BC%E3%83%97_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29]]とは、
処理中のプロセスイメージをメモリに保持し低電力状態で維持、電源再投入後元のプロセス状態に書き戻す (これをレジュームという) 処理です。~
(他 OS で スリープ・スタンバイ とも呼称されます。)~
[[ハイバネーション>http://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%90%E3%83%8D%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3]]とは、
イメージをブロックデバイス (通常はスワップパーティションまたはスワップファイル) に書き出し、シャットダウン、
電源復帰後レジュームする処理です。~
(他 OS で休止状態とも呼称されます。)

ラップトップ、ノートパソコンの多くはサスペンド、ハイバネーション機能を備えていますが、
Debian で実現する方法について説明します。

最近のノートパソコン、ラップトップならば、[[ACPI>#suspend_with_acpi]] が機能します。~
古い機種だと [[APM (しかも BIOS でちゃんと有効になるもののみ)>#suspend_with_apm]] でしか機能しないものもあります。

*APM BIOS 準拠のマシンの場合 &aname(suspend_with_apm); [#q1e48c50]

**''1. カーネルコンフィグ'' [#d78d4e75]

まずは、/boot/config-(カーネルバージョン) ファイルに
 CONFIG_APM=m または y
があることを確認します。

**''2. ハイバネーション領域の作成'' [#l0552a1e]

次に APM 用のハイバネーション領域を作る必要があります。~
 # fdisk /dev/hda
などを実行して 'IBM Thinkpad hibernation' (0xA0) というタイプのパーティションを
作成します。~
確認するには、
 # fdisk -l /dev/hda
 
 Disk /dev/hda: 76.8 GB, 76832039424 bytes
 240 heads, 63 sectors/track, 9924 cylinders
 Units = cylinders of 15120 * 512 = 7741440 bytes
 
    Device Boot      Start         End      Blocks   Id  System
 /dev/hda1   *           1        2032    15361888+  83  Linux
 /dev/hda2            2033        3386    10236240    c  W95 FAT32 (LBA)
 /dev/hda3            3387        3420      273105   A0  IBM Thinkpad hibernation
 (以下省略)

**''3. ハイバネーション領域の初期化'' [#be5da005]

次にこのパーティションを初期化します。~
各マシンのベンダが DOS/Windows 用のユーティリティを配布している場合があります。(PHDISK.EXE という名前のものなど。)~
Linux 上では [[lphdisk>pkg:lphdisk]] というものがあります。
パーティションの変更を行うのでドキュメントを良く読んだ上で作成してください。

**''4. apm コマンドの実行'' [#r2d82b7c]

次に [[apmd>pkg:apmd]] をインストールしてから、
 # apm -s
で Suspend to Disk 状態に移行することができます。復帰するには電源を再投入してください。

*ACPI Software Suspend の場合 &aname(suspend_with_acpi); [#df5b054e]
参考: ~
-[[JF: Linux Kernel 2.6 Documentation: swsusp.txt>http://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/power/swsusp.txt.html]]
-[[JF: Linux Kernel 2.6 Documentation: states.txt>http://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/power/states.txt.html]]
-[[JF: Linux Kernel 2.6 Documentation: interface.txt>http://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/power/interface.txt.html]]
-[[JF: Linux Kernel 2.6 Documentation: swsusp.txt>https://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/power/swsusp.txt.html]]
-[[JF: Linux Kernel 2.6 Documentation: states.txt>https://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/power/states.txt.html]]
-[[JF: Linux Kernel 2.6 Documentation: interface.txt>https://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/power/interface.txt.html]]
-[[Software Suspend - Features>http://tuxonice.net/features]] (各実装の比較)
-[[LinuxノートPCのサスペンドとハイバネーション>http://osdn.jp/magazine/06/06/08/0250241]]
-[[改訂版: LinuxノートPC上でサスペンド/ハイバネーションする方法>http://osdn.jp/magazine/07/02/20/0144246]]
-[[LinuxノートPCのサスペンドとハイバネーション>https://osdn.jp/magazine/06/06/08/0250241]]
-[[改訂版: LinuxノートPC上でサスペンド/ハイバネーションする方法>https://osdn.jp/magazine/07/02/20/0144246]]
//-http://en.opensuse.org/S2ram

まずは、

-[[uswsusp>#uswsusp]]
-[[TuxOnIce>#tuxonice]]

を用いた方法を述べます。

続いて従来からある、
-[[swsusp>#swsusp]]

とその他の情報について述べます。

**''1.'' uswsusp &aname(uswsusp); [#e6805c51]

[[uswsusp>pkg:uswsusp]] はユーザ空間における swsusp の実装で、
バージョン 2.6.17-rc1 以上のカーネルで動作します。~
2.6.17-rc1 以上のカーネルには既に必要なインターフェースが取り込まれており、
また Debian (etch 以降) では標準の linux-image-2.6 カーネルで適切なカーネルコンフィグ (後述) がなされているので、
パッケージインストール後すぐに使用可能です。

以下の手順は、
-カーネルバージョン v2.6.36, v2.6.37-rc7
-initramfs-tools 0.98.7
-uswsusp 0.8-1.2+b1
-splashy 0.3.13-5.1+b1

で動作確認済。

***''1.1 カーネルコンフィグ'' [#q3dd6e30]

まずは /boot/config-(カーネルバージョン) に
 CONFIG_SOFTWARE_SUSPEND=y (2.6.17-rc1 〜 2.6.22)
または
 CONFIG_SUSPEND=y (2.6.23 〜)
 CONFIG_HIBERNATION=y
さらに
 CONFIG_BLK_DEV_INITRD=y
があることを確認します。
なければ[[カーネルコンフィグ>Software/LinuxKernel#config]]、
[[カーネル再構築 (initramfs 方式)>Software/LinuxKernel#build_with_initramfs]] が必要です。~
他にも推奨するコンフィグがあるので、詳細は uswsusp を
インストールした後で /usr/share/doc/uswsusp/HOWTO.gz を見てください。

***''1.2 initramfs-tools のインストール'' [#p242ff2d]

initramfs-tools をインストールします。(etch 以降はデフォルトでインストールされています)~
postinst スクリプトによって /etc/initramfs-tools/conf.d/resume ファイルに次のようにスワップパーティションが記述されていることを確認します。
 RESUME=/dev/hda3
(/dev/hda3 がスワップパーティションの場合)
もしくは UUID 形式で、
 RESUME=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
記述がない、スワップパーティションではないものが記載されている場合は適宜修正して下さい。~
スワップパーティションの UUID のチェック方法は [[Software/LinuxKernel#libata]] を参照して下さい。

***''1.3 uswsusp のインストール'' [#tc346a59]

uswsusp をインストールします。~
debconf に従って、 MD5 チェックサム、LZF 圧縮、暗号化、スプラッシュイメージ (splashy) などの有効・無効を設定できます。

-[[KMS>Software/LinuxKernel#kernel_modesetting]] 有効時には splashy は上手く動作しないので、どちらかを無効にすること。

/etc/uswsusp.conf に次のようにスワップパーティションが記述されていることを確認します。
 resume device = /dev/hda3
もしくは、 UUID 形式で、
 resume device = /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
他のオプションについては
 $ man uswsusp.conf
などを参照してください。~
[[メンテナスクリプト>Glossary#Maintainer_Scripts]]によって初期 RAM ディスク (initrd/initramfs) が再生成されていることを確認します。
再生成されていなければ、
 # update-initramfs -u -k all
(もしくは)
 # update-initramfs -u -k (対象カーネルのバージョン)
を実行してください。

***''1.4 コマンドの実行'' [#rd0c01de]

まず、
 # s2ram -n
を実行してください。
既知のサポートされているマシンならば、
 Machine matched entry xxx:
 ...
と出力されます。
 # s2ram
で Suspend to RAM (Sleep State は S3)
 # s2disk
で Suspend to Disk (Hibernate: Sleep State は S4) 状態に移行できます。
電源を再投入することでレジュームします。~
 # s2both
というコマンドを実行すると、ディスクに状態を書き込みます (= s2disk) が電源は切らずに Suspend to RAM 状態に移行します。

サポートされていなければ、
 Machine is unknown.
 ...
と出力されます。この場合は、
 # s2ram -f
というオプションを付すと、
サポートされていなくともサスペンド/レジュームが可能な場合もあります。

s2disk, s2both を実行しシャットダウンした後、電源を再投入する際には必ず、
''サスペンド時と同じカーネル''で起動してください。(カーネルコマンドラインは無視されます。)
他のカーネルで起動した場合はレジュームせずに通常の起動処理を行ってしまうでしょう。
(結果的に作業中のデータは消失します。)~
GRUB Legacy の場合、/boot/grub/menu.lst 上で
 default         saved
 ...
 title           Debian GNU/Linux, kernel 2.6.18-1-686
 root            (hd0,0)
 kernel          /boot/vmlinuz-2.6.18-1-686 root=/dev/hda1 ro
 initrd          /boot/initrd.img-2.6.18-1-686
 savedefault
 ...
というように default コマンドと savedefault コマンドを利用すれば、
前回起動したカーネルが選択されるようになるので間違って起動することが減るかと思います。~
よく忘れがちなのが、''カーネルパッケージを更新した後にサスペンドするとレジューム出来ない''という事例です。
サスペンド時のカーネル (= 起動時に読み込まれた、メモリ上にある更新前のカーネルイメージ) と
電源を再投入した後読み込まれるカーネル (= 更新後のもの) は異なっているからです。
カーネルパッケージを更新した後はすぐさま再起動しましょう。~
スワップパーティションを暗号化している場合は再起動時にパスフレーズの入力が要求されます。

**''2.'' TuxOnIce &aname(tuxonice); [#z00b7861]

[[TuxOnIce>http://tuxonice.net/]] (以前は Suspend 2 for Linux と呼んでいました) は先進的なハイバネーション機構です。~
これは、従来の swsusp よりもはるかに高機能なもので、最終的には swsusp を置換することを目標としています。
([[参照>http://tuxonice.net/features]])~
TuxOnIce はカーネルに新たな機構を組み込むため、カーネルへのパッチの形として存在します。~
したがって導入には若干敷居が高くなります。~
上流のカーネルソースツリーに未だ取り込まれておらず、
また今後の開発見通しも不明で、
Debian においても現時点ではサポートは全くありません。~
使用には十分注意して下さい。

以下の手順は、
-カーネルバージョン v2.6.36, v2.6.37-rc7
-initramfs-tools 0.98.7
-TuxOnIce v3.2-rc2 (/sys/power/tuxonice/version)
-Swap Partition モード
-tuxonice-userui ([[git tree>http://git.tuxonice.net/?p=tuxonice-userui.git;a=summary]] version)

で動作確認済。

***''2.1 カーネルパッチの取得・適用'' [#v9d35a5a]

[[TuxOnIce>http://tuxonice.net/]] のページの ''Source'' セクションにある、
対応するカーネルのパッチを取得して下さい。~
ただし、TuxOnIce は目下開発中フェーズのため、これらのパッチでは不具合が出る場合もあります。~
そのような場合は、最新の [[git tree>http://git.kernel.org/?p=linux/kernel/git/nigelc/tuxonice-head.git]] を利用してください。~
(このツリーからパッチを生成する方法は適宜 
[[git のマニュアル>http://www8.atwiki.jp/git_jp/pub/git-manual-jp/Documentation/user-manual.html#generating-diffs]]
等を見てご自分で考えてみてください。)

-各バージョンのツリーもあり。(例: [[2.6.28>http://git.kernel.org/?p=linux/kernel/git/nigelc/tuxonice-2.6.28.git]])

-Debian のカーネルソース用パッチパッケージは [[linux-patch-tuxonice>pkg:linux-patch-tuxonice]] です。

パッチを取得したら、カーネルソースに適用します。

***''2.2 カーネルコンフィグ'' [#y3797b69]

パッチを適用したら、カーネルの[[コンフィグレーション>Software/LinuxKernel#config]]と[[構築>Software/LinuxKernel#build]]を行います。~
設定例:
 CONFIG_HIBERNATION=y
 CONFIG_TOI_CORE=m
 CONFIG_TOI_FILE=m
 CONFIG_TOI_SWAP=m
 CONFIG_TOI_CRYPTO=m
 CONFIG_TOI_USERUI=m
 CONFIG_TOI_USERUI_DEFAULT_PATH=""
 # CONFIG_TOI_KEEP_IMAGE is not set
 CONFIG_TOI_REPLACE_SWSUSP=y
 # CONFIG_TOI_IGNORE_LATE_INITCALL is not set
 CONFIG_TOI_DEFAULT_WAIT=25
 CONFIG_TOI_DEFAULT_EXTRA_PAGES_ALLOWANCE=2000
 CONFIG_TOI_CHECKSUM=y
 CONFIG_TOI=y
 CONFIG_TOI_EXPORTS=y
 CONFIG_CRYPTO_LZF=m

-CONFIG_HIBERNATION=y としないと TuxOnIce は有効になりません。
-CONFIG_TOI_CORE はコアモジュールです。 これは必ず =y または =m としてください。=y としたときはカーネル組み込み、=m としたときはモジュールとなります。
モジュールにした場合、ハイバネーションが不要となったタイミングでモジュールを外すということも可能です。ただし、モジュールの場合 initramfs は必須となります。

以下の項目は CONFIG_TOI_CORE=m の時は =m, CONFIG_TOI_CORE=y の場合は =y に自動で設定されます。
-CONFIG_TOI_FILE はスワップファイルにイメージを書き込むモジュールで必須です。
-CONFIG_TOI_SWAP はスワップパーティションにイメージを書き込むモジュールで必須です。
-CONFIG_TOI_CRYPTO は暗号化を使用する場合必須です。
--CONFIG_CRYPTO_LZF は暗号化モジュールです。上記暗号化機能を有効化する場合は必須です。
-CONFIG_TOI_USERUI はユーザインターフェース (tuxonice-userui) を使用する場合必要です。
tuxonice-userui はユーザー空間のコマンドで進捗メータを表示するツールです。これは別途用意する必要があります。
デフォルトでは何もインターフェースがないので、ハイバネーション状況の進捗度が分かりません。

以下はオプションです。
-CONFIG_TOI_USERUI_DEFAULT_PATH にはユーザインターフェースのコマンドパスを指定して下さい。
空白にした場合、ハイバネーション前に /sys/power/tuxonice/user_interface/program にパスを書き込む必要があります。
-CONFIG_TOI_KEEP_IMAGE はレジューム時に毎回同じ起動状態を維持するためのオプションです。
公衆端末 (Kiosk System?) を対象としているようで、通常は =n で問題ありません。
-CONFIG_TOI_REPLACE_SWSUSP は従来の swsusp インターフェースを乗っ取ります。
よって、従来の swsusp にしか対応していなかったツールがこれで動作します。こちらは適宜 =y にしてください。
-CONFIG_TOI_IGNORE_LATE_INITCALL : =y とすると "late initcall' を無視します。
通常は初期 RAM ディスク (初期ルートファイルシステム) の起動を待ってからレジュームを行いますが、=y にするとそれよりも前にレジュームを行います。
適宜設定して下さい。
-CONFIG_TOI_DEFAULT_WAIT は間違ったカーネルで起動した場合の動作までの待機時間 (単位:秒) です。適宜設定して下さい。
通常間違ったカーネルで起動してしまった場合、スワップに保存されているディスクイメージを削除しブートを続行します。-1 とすると、永遠に待ちつづけます。
0 とすると待機せず処理に移ります。
-CONFIG_TOI_DEFAULT_EXTRA_PAGES_ALLOWANCE は "atomic copy" 時に使用するメモリ量
(単位: [[ページ>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]])。
デフォルト値で問題ありません。
-CONFIG_TOI_CHECKSUM はディスクイメージのチェックサムを取得し、レジューム時にこれをチェックします。適宜有効にしてください。

-CONFIG_TOI と CONFIG_TOI_EXPORTS は自動で =y または =m となるので設定不要です。

コンフィグ終了後、[[カーネルパッケージを構築>Software/LinuxKernel#build]]
(=m の場合は、[[--initrd>Software/LinuxKernel#build_with_initramfs]] で構築) して下さい。~

***''2.3 TuxOnIce の有効化とスワップデバイスの指定'' [#yf69344f]

再構築したカーネルをインストールする前に、準備が必要です。~

''2.3.1 カーネル組み込みにした場合''

GRUB 2 の場合は、/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に
>GRUB_CMDLINE_LINUX_DEFAULT="...''resume=/dev/xdx''..."
<
というオプションを追加します。~
resume=にはスワップパーティションを指定します。~
GRUB Legacy では /boot/grub/menu.lst, LILO では /etc/lilo.conf に同様のオプションを追記してください。~

''2.3.2 モジュール化した場合''

initramfs が必須となります。

''2.3.2.1 スワップパーティションの指定''

initramfs-tools の postinst スクリプトによって 
/etc/initramfs-tools/conf.d/resume ファイルに次のようにスワップパーティションが記述されていることを確認します。
 RESUME=/dev/hda3
(/dev/hda3 がスワップパーティションの場合)
もしくは UUID 形式で、
 RESUME=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
記述がない、スワップパーティションではないものが記載されている場合は適宜修正して下さい。

''2.3.2.2 フックスクリプトの追加''

初期 RAM ディスクマウント時にモジュールをロードするためのフックスクリプト /etc/initramfs-tools/hooks/tuxonice を用意します。~
例:

 #! /bin/sh
 
 PREREQ=""
 
 prereqs()
 {
   echo "$PREREQ"
 }
 
 case $1 in
   # get pre-requisites
   prereqs)
     prereqs
     exit 0
     ;;
 esac
 
 . /usr/share/initramfs-tools/hook-functions
 
 # Check for tuxonice support
 TOI_OK=$(grep CONFIG_TOI\=y /boot/config-${version})
 if [ -z ${TOI_OK} ] ; then
   echo "OK, TOI support skipping."
 elif [ "x${TOI_OK}" = "xCONFIG_TOI=y" ] ; then
 # Loading lzf modules
   if [ ! -f ${MODULESDIR}/kernel/crypto/lzf.ko ] ; then
     LZF_OK=$(grep CONFIG_CRYPTO_LZF\=y /boot/config-${version})
     if [ "x${LZF_OK}" = "xCONFIG_CRYPTO_LZF=y" ] ; then
       echo "INFO: OK, lzf in kernel."
     else 
       echo "WARNING: lzf NOT in kernel."
       echo "WARNING: Is it compiled in kernel or unsupported?"
       echo "WARNING: If you compile lzf neither in kernel nor as module,"
       echo "WARNING: TuxOnIce doesn't work properly."
       echo "WARNING: Please check settings before reboot."
     fi
   else
     force_load lzf
   fi
 # Loading tuxonice modules during boot.
 # tuxonice_core and tuxonice_bio are automatically loaded.
   for i in tuxonice_compress tuxonice_swap tuxonice_file tuxonice_userui ; do
     if [ ! -f ${MODULESDIR}/kernel/kernel/power/$i.ko ] ; then
       echo "WARNING: $i module NOT found."
       echo "WARNING: Is it compiled in kernel or unsupported?"
       echo "WARNING: Please check settings before reboot."
     else
       force_load $i
     fi
   done
 # Copy splash images
   if [ -d /etc/splash ] ; then
     cp -ar /etc/splash ${DESTDIR}/etc
   fi
 else
   echo "Un-huh, What?"
 fi

ファイルには実行権限をつけてください。

***''2.4 レジューム用スクリプトの追加'' [#jdf972c9]

-/etc/initramfs-tools/scripts/local-premount/tuxonice
-/etc/initramfs-tools/scripts/nfs-premount/tuxonice

というスクリプトを追加します。

ファイルには実行権限をつけてください。

例:

 #! /bin/sh
 
 PREREQ=""
 
 prereqs()
 {
   echo "$PREREQ"
 }
 
 case $1 in
   # get pre-requisites
   prereqs)
     prereqs
     exit 0
     ;;
 esac
 
 # Set the user interface command path
 # on /sys/power/tuxonice/user_interface/program
 if [ -x /usr/lib/tuxonice-userui/tuxoniceui ] ; then
   if [ -f /sys/power/tuxonice/user_interface/program ] ; then
     if [ -d /etc/splash/tuxonice ] ; then
       echo "/usr/lib/tuxonice-userui/tuxoniceui -f" > /sys/power/tuxonice/user_interface/program
     else
       echo "/usr/lib/tuxonice-userui/tuxoniceui" > /sys/power/tuxonice/user_interface/program
     fi
   fi
 fi
 
 # Do resume
 if [ -f /sys/power/tuxonice/do_resume ] ; then
   echo 1 > /sys/power/tuxonice/do_resume
 fi

***''2.5 ユーザーインターフェースのインストール、スプラッシュイメージのコピー (オプション)'' [#a266ef12]

以下のツールをインストールします。
-[[tuxonice-userui>pkg:tuxonice-userui]]

但し、tuxonice-userui はメンテナンスが止まっている様なので、復活までの間は自前でビルドしてください。~
[[こちらの*.diff.gz>uploader#tuxonice_userui]] と
[[ソース>http://git.tuxonice.net/?p=tuxonice-userui.git;a=summary]] からビルドできます。~

スプラッシュイメージは [[UserUI/Themes>http://wiki.tuxonice.net/UserUI/Themes]] よりダウンロードし、
/etc/splash ディレクトリ以下にコピーします。~
コピー後、/etc/splash/tuxonice というシンボリックリンクを張ります。
 # ln -fs /etc/splash/<スプラッシュイメージのディレクトリ> /etc/splash/tuxonice

***''2.6 確認作業、再起動、テスト'' [#z8ac91f8]

各種ツール類を準備したのち、TuxOnIce 対応のカーネルをインストールします。~
インストール後、
 $ lsinitramfs /boot/initrd.img-(バージョン) | pager
を実行し initrd 内に
-/etc/splash/
-/lib/modules/(バージョン)/kernel/crypto/lzf.ko
-/lib/modules/(バージョン)/kernel/kernel/power/tuxonice_*.ko
-/scripts/local-premount/tuxonice
-/scripts/nfs-premount/tuxonice
-/usr/lib/tuxonice-userui/tuxoniceui

が存在することを確認します。~
なければ、スクリプトを見直すなどして、
 # update-initramfs -k (対象カーネルのバージョン) -u

問題なければブートローダの設定を再確認し、再起動します。

再起動後、
 # /usr/lib/tuxonice-userui/tuxoniceui --test
を実行すると、テストできます。
 # /usr/lib/tuxonice-userui/tuxoniceui --test -f [--theme [tuxonice|<other themes>]]
を実行すると、スプラッシュイメージモードでテストできます。

&ref(tuxonice_userui_001.png,[[uploader]],50%); &ref(tuxonice_userui_002.png,[[uploader]],50%);~
上記はテキストモードテスト画面です。

***''2.7 実行'' [#nc5cb9c6]

テストで問題なければ、
 # echo > /sys/power/tuxonice/do_hibernate
を実行すると、ハイバネーションされます。
>CONFIG_TOI_REPLACE_SWSUSP=y
<
の場合は、
 # echo disk > /sys/power/state
も同じ動作をします。~
電源再投入後、''必ず同じカーネル''で起動します。すると通常の起動処理ではなく、レジューム処理が走ります。~
(違うカーネルで起動するとエラーになり、データはロストします。
また一度ハイバネーションに失敗すると、次回から "BIG FAT WARNING!!" との警告が出るようになります。)

2.4 のスクリプトで tuxoniceui に -f オプションを渡しているため、
ハイバネーション時、スプラッシュイメージモードで処理されますが、~
もしテキスト方式にしたい場合は、
 # echo "/usr/lib/tuxonice-userui/tuxoniceui" > /sys/power/tuxonice/user_interface/program
としてください。

**''3.'' swsusp &aname(swsusp); [#v5b4168d]

swsusp (Software Suspend) とはカーネル 2.6 の初期からあるサスペンド・ハイバネーションの機構です。

***''3.1 /proc/acpi/sleep を使用する方法 (カーネルバージョン 2.6.13 まで)'' [#f1e01719]

/boot/config-(カーネルバージョン) に
 CONFIG_ACPI_SLEEP_PROC_SLEEP=y
がある場合は、
 # echo 4 > /proc/acpi/sleep
で Suspend to Disk (Sleep State は S4) 状態に移行できます。~
しかし、カーネルバージョン 2.6.13 から非推奨、 2.6.27 からはコード自体削除されているようです。~

***''3.2 /sys/power/{disk,state} を使用する方法'' [#v1e633ac]

''3.2.1 確認''

まず、
 CONFIG_SOFTWARE_SUSPEND=y (2.6.0 〜 2.6.22)
または
 CONFIG_SUSPEND=y (2.6.23 〜)
 CONFIG_HIBERNATION=y
を有効化してカーネルをビルドします。~
(Debian のストックカーネルならば有効化されています。)

カーネルインストール後
 $ cat /sys/power/disk
を実行します。

>[platform] test testproc shutdown reboot
<

という結果が表示された場合、
[[ACPI S4>http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AA%E3%83%BC%E3%83%97_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29]] 
がサポートされています。

 $ cat /sys/power/state
を実行して、
>mem disk
<
となっている場合、サスペンド (mem)・ハイバネーション (disk) 双方に対応しています。~
どちらに対応しているか事前に確認して下さい。

''3.2.2 resume= オプションの追加''

initramfs-tools の postinst スクリプトによって 
/etc/initramfs-tools/conf.d/resume ファイルに次のようにスワップパーティションが記述されていることを確認します。
 RESUME=/dev/hda3
(/dev/hda3 がスワップパーティションの場合)~
もしくは UUID 形式で、
 RESUME=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
記述がない、スワップパーティションではないものが記載されている場合は適宜修正し、
 # update-initramfs -k (対象カーネルのバージョン) -u
を実行して下さい。

initramfs を使用しない場合は、
カーネルコマンドラインに resume= オプションを追加するよう、ブートローダの設定ファイルを編集します。
>...''resume=/dev/hda3''...
<

''3.2.3 実行''

再起動を行い、
 # echo mem > /sys/power/state
でサスペンドします。
 # echo disk > /sys/power/state
でハイバネーションします。

**''4.'' ヘルパーツール [#sf5fede0]

以下のツールは単純な操作でサスペンド・ハイバネーションできます。

CLI ツールとしては~
-[[pm-utils>pkg:pm-utils]]

などがあります。~
インストールすると、
 # pm-hibernate
 # pm-suspend
などを実行できます。~
各種サービスの停止と再開後の復旧措置やモジュールのアンロードと再開後のロードを行うこともできます。

KDE (Kicker, Kickoff - PowerDevil) や GNOME デスクトップ (gnome-power-manager) にはサスペンド・ハイバネーション用
のボタンがあるかもしれませんが、こちらは [[swsusp>#swsusp]] のみに対応していることが多いと思われます。

[[TuxOnIce>#tuxonice]] では
 CONFIG_TOI_REPLACE_SWSUSP
を有効にすると、上記ツールでも動作するようになります。

**''5.'' 注意 [#y2a2b02f]

[[uswsusp>#uswsusp]] について:
-現時点ではレジューム時のスプラッシュ処理は splashy にのみ対応しています。
Plymouth, usplash ([[Bootsplash>Software/bootsplash]]) については未対応のため関連するパッケージを削除してください。

[[TuxOnIce>#tuxonice]] について:
-現時点ではレジューム時に処理が競合するため、[[Bootsplash>Software/bootsplash]] に関する処理を無効にし、
関連するパッケージをすべて削除してください。

*サスペンドしてから指定の時間に復帰させるには? [#y3a8cbe6]
参照:
-rtcwake(8)
-[[Wake Your Linux Up From Sleep for a Cron Job>http://www.osnews.com/story/24111/Wake_Your_Linux_Up_From_Sleep_for_a_Cron_Job]]

-rtc(4)
-[[Documentation/rtc.txt>http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/rtc.txt;hb=HEAD]]

rtcwake コマンドを使いましょう。

このコマンドはハードウェアに搭載されているリアルタイムクロック (RTC) の アラーム割り込み機能と
ACPI を組み合わせて動作します。~
コマンドを叩くとサスペンド (ハイバネーションも可) し、指定時間後にレジュームします。

動作には、以下の設定を有効にした Linux カーネル 2.6.22 以降と lenny 以降の
[[util-linux>pkg:util-linux]] が必要です。
 CONFIG_ACPI=y
 CONFIG_ACPI_SLEEP=y
 CONFIG_SUSPEND=y
 CONFIG_HIBERNATION=y
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y (sysfs の rtc クラスを有効化)
 CONFIG_RTC_HCTOSYS=y (起動時にリアルタイムクロックを同期)
 CONFIG_RTC_HCTOSYS_DEVICE="rtc0" (リアルタイムクロックのデバイスファイル名)
 CONFIG_RTC_INTF_SYSFS=y (sysfs インターフェース)
 CONFIG_RTC_INTF_PROC=y (/proc インターフェース)
 CONFIG_RTC_INTF_DEV=y (デバイスファイルのインターフェースを有効化)
(Debian のストックカーネルならば適切に設定されています。)

udev が正常に機能しており、以下のファイルが見えれば問題ないでしょう。

('''N''' は 0 以上の整数のいずれか。大抵 0 です。)

-/dev/rtc'''N'''
-/proc/acpi/alarm または /sys/class/rtc/rtc'''N'''/wakealarm

考えにくいですが、見えてなければカーネルモジュールとして、rtc-* ドライバがあるのでロードしてください。

以下オプションを説明します。

~-m オプションで指定の ACPI State で処理を行います。~
指定可能な例:
-standby (ACPI S1)
-mem (ACPI S3)
-disk (ACPI S4)

次にシステムのタイムゾーンを確認します。

システムのタイムゾーンは Debian のインストール時に設定しています。~
忘れた、[[変更した>Tips#change_timezone]]が忘れた人は、
 $ cat /etc/timezone
 Asia/Tokyo
などを実行して確認してください。

念のため hwclock が /etc/adjtime ファイルに適切に書き込んでいるか確認します。~
以下のコマンドを叩いて、最下行の文字列を確認するとタイムゾーンが分かります。
 $ cat /etc/adjtime

実行結果:

ローカルタイム  (今いる地域のタイムゾーン)
>-X.XXXXXX NNNNNNNNNN 0.000000
>MMMMMMMMMM
>''LOCAL''

UTC
>-X.XXXXXX NNNNNNNNNN 0.000000
>MMMMMMMMMM
>''UTC''

上記のように
-/etc/adjtime ファイルが適切に設定されているならば、-a

考えにくいですが、適切に書き込まれていない場合は以下の 2 つのどちらかを選択します。

-リアルタイムクロックがローカルタイムに設定しているならば -l
-UTC ならば -u

としてください。

以下のオプションはどちらか一方を使用します。
-~-s オプションの引数にレジュームまでの時間 (単位: 秒) を与えます。
-~-t オプションの引数にはレジュームさせたい時刻 (但し、UNIX time で指定) を与えます。

実行例:~

サスペンド後'''約''' 10 分後に起動させたい場合は、
 # rtcwake -a -m mem -s 600

システムのタイムゾーンがローカルタイムでサスペンド後'''約''' 3 分後に起動させたい場合は、
 # rtcwake -l -m mem -s 180

サスペンド後 2011/01/01 09:00 '''頃'''に起動させたい場合は、~
まず該当する時刻を UNIX time に変換
 $ date +%s --date "2011-01-01 09:00"
 1293840000
そして
 # rtcwake -a -m mem -t 1293840000

一挙に実行する場合は、
 # rtcwake -a -m mem -t `date +%s --date "2011-01-01 09:00"`

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS