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に「+」の行を追記する形で適用はでき、ビルドも通った。
初期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を用いて休止/復帰時の動作を細かく制御できるようになった。
関連記事:
- UbuntuでTuxOnIceを用いる(Ubuntu 10.10時点・前半)
- UbuntuでTuxOnIceを用いる(Ubuntu 10.10時点・後半)
- Debian/Ubuntuでカーネルソースパッケージからカーネルパッケージを作成する(前半)
- Debian/Ubuntuでカーネルソースパッケージからカーネルパッケージを作成する(後半)
使用したバージョン: