試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

TuxOnIceとhibernate-scriptに関する追加メモ(Ubuntu 11.04時点)

Ubuntu 11.04における個人的なメモ

Ubuntu 11.04上でPPAの「tuxonice」なカーネルを用いずにカーネルソースから手動でパッチを当ててTuxOnIceを有効にしたカーネルをビルドした際のメモとなる。
休止時の書き込み先はスワップパーティションとし、かつ、OSインストール時にはスワップパーティションは作成しなかった(後から手動で追加した)ものとする。また、PPAのカーネルは使用していないが、同PPAのhibernate-scriptとtuxonice-useruiについてはバージョンが最新なので使用している。

パッチの適用失敗部分について

通常はUbuntuのカーネル向けのパッチが置いてあるのだが、11.04向けのものがなかったのでLinux 2.6.38向けのパッチ(tuxonice-3.2-for-2.6.38.patch.bz2)を適用しようとしたのだが、一箇所うまく適用されない部分が出た。しかし、適用できなかった部分の内容を見ると
[転載]ファイル名: linux-source-2.6.38/include/linux/swap.h.rej

--- include/linux/swap.h
+++ include/linux/swap.h
@@ -342,11 +345,15 @@
 extern int free_swap_and_cache(swp_entry_t);
 extern int swap_type_of(dev_t, sector_t, struct block_device **);
 extern unsigned int count_swap_pages(int, int);
+extern sector_t map_swap_entry(swp_entry_t entry, struct block_device **);
 extern sector_t map_swap_page(struct page *, struct block_device **);
 extern sector_t swapdev_block(int, pgoff_t);
+extern struct swap_info_struct *get_swap_info_struct(unsigned);
 extern int reuse_swap_page(struct page *);
 extern int try_to_free_swap(struct page *);
 struct backing_dev_info;
+extern void get_swap_range_of_type(int type, swp_entry_t *start,
+		swp_entry_t *end, unsigned int limit);
 
 /* linux/mm/thrash.c */
 extern struct mm_struct *swap_token_mm;

上の通り、追記部分しかなかったため、手動でlinux-source-2.6.38/include/linux/swap.hに「+」の行を追記する形で適用はでき、ビルドも通った。

カーネルの設定

TuxOnIce関係の設定項目とLZF圧縮に関する設定はカーネル組み込みとした。

初期RAMディスクイメージ(initrd/initramfs)内の設定

ビルドしたカーネルを使って試したが何故かうまく復帰ができず、色々と調べていた中で
http://debian.fam.cx/index.php?Software%2FSuspend#z00b7861
を見つけ、ここに貼り付けられている

  • /etc/initramfs-tools/scripts/local-premount/tuxonice
  • /etc/initramfs-tools/hooks/tuxonice

の2ファイルを(管理者権限で)用意/配置した上で(カーネル組み込み時向けの)復帰のための設定を
[一部]ファイル名: /etc/default/grub

GRUB_CMDLINE_LINUX="resume=UUID=[スワップパーティションのUUID]"

上のように記述した上でupdate-grubとupdate-initramfsを管理者権限で実行することでうまく復帰もできるようになった。

pm-utilsからhibernate-scriptを用いる

デスクトップ環境のメニュー項目「ハイバネート」やpm-hibernateコマンドからhibernate-scriptを用いて休止/復帰を行うには、SLEEP_MODULEの値に「hibernate」を指定すればよいということが分かった。
[任意]ファイル名: /etc/pm/config.d/00sleep_module

SLEEP_MODULE=hibernate

これで、上記操作を行ったときにもhibernate-scriptを用いて休止/復帰時の動作を細かく制御できるようになった。

関連記事:

使用したバージョン:

  • Linux 2.6.38.2
  • TuxOnIce 3.2
  • pm-utils 1.4.1
  • hibernate-script 2.0.git20100603