Pull to refresh

TuxOnIce в *ubuntu 9.04

Reading time 3 min
Views 4.7K
Что такое TuxOnIce? Это проект, ранее называвшийся suspend2, пытающийся сделать быстрый и стабильный hibernate для Linux.
Что такое hibernate? Если вы не знаете, что это, то hibernate = спящий режим (Win XP) = гибернация (гыгы) (Vista). Это запись содержимого физической памяти на жесткий диск и полное выключение компьютера, после которого можно запустить систему и продолжить работу.
Подробнее о Tux On Ice можно почитать на официальном сайте

В этой статье я хочу рассказать, как заставить работать TuxOnIce на популярном ныне дистрибутиве Ubuntu (с его модификациями, естественно).
Надо заметить, что из коробки в Убунте работает hibernate (просто suspend-to-disk), при том достаточно стабильно. Тут описано, как вместо него начать использовать более фичастый TuxOnIce, основной профит от которого — ускорение процесса и возможность наблюдения за происходящим.


Disclaimer: Если не понимаете, что происходит на каждом шаге — не делайте. Никому не нужны чужие проблемы из-за бездумного копипаста.

Приступим.

Для начала нам нужно ядро с наложенным патчем. Есть путь правильный (пересборка) и простой (установка из репозитория). Оставим правильный гентушникам и остальным не вполне нормальным людям. (Кстати, в Gentoo установка TuxOnIce проще).

Прописываем репозиторий с tuxonice-enabled ядром, добавляем ключ, апдейтим:
$ sudo -i
# echo deb http:\/\/ppa.launchpad.net/tuxonice/ppa/ubuntu jaunty main >> /etc/apt/sources.list
# gpg --keyserver hkp://subkeys.pgp.net --recv-keys DAC45EC9DEC8FAAC
# gpg --export DAC45EC9DEC8FAAC|apt-key add -
# apt-get update


Обновляем, новое ядро должно поставиться из свежепрописанного репозитория. Заодно ставим вспомогательные вещи:
# apt-get dist-upgrade
# apt-get install tuxonice-userui


Перезагружаемся, убеждаемся, что ядро работает.
$ uname -rv
2.6.28-12-generic #44+tuxonice2-Ubuntu SMP Sun Apr 26 23:28:12 UTC 2009


Далее говорим ядру (на самом деле, tuxonice'у), откуда он(о) будет пытаться продолжить работу. Скармливаем ядру параметр resume=/dev/swap (раздел со свопом)
$ grep defoptions /boot/grub/menu.lst
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash resume=/dev/sda5

После этого делаем # update-grub и убеждаемся, что в конфиге все не-recovery ядра обрели такую опцию.

Тот же раздел со свапом надо скормить скрипту hibernate. Для этого в файле /etc/hibernate/suspend2.conf выставляем параметр SuspendDevice.

Теперь самое интересное. Если вы попробуете уйти в hibernate, а потом восстановиться из него, то вас, возможно, ждет разочарование. TuxOnIce по умолчанию сжимает содержимое памяти алгоритмом LZF, для чего ему нужен соответствующий модуль ядра. В убунте из коробки я такого не нашел :)
Выхода два — не использовать сжатие или использовать, например, LZO и подгружать модуль до возобновления. Поскольку первый путь может привести к нехватке места при замораживании системы, мы пойдем вторым путем.
Открываем все тот же /etc/hibernate/suspend2.conf и правим параметр Compressor — вместо lzf пишем lzo.
Итак, при взлете ядра TuxOnIce пытается возобновить работу системы из указанного раздела (swap). Но не может это сделать, поскольку образ сжат недоступным на тот момент алгоритмом. Далее монтируется initrd и загрузка идет своим обычным путем.
Наша задача — сделать такой initrd, init в котором подгрузит модуль lzo и отдаст команду на повторную попытку восстановления.
# echo lzo >> /etc/initramfs-tools/modules
Так мы добавили модуль в список сборки initrd. Далее — скрипт для восстановления. Должно получиться так:
# cat /etc/initramfs-tools/scripts/init-top/00resume
#!/bin/sh
case $1 in
prereqs)
exit 0
;;
esac

modprobe lzo

if [ -d /sys/power/tuxonice ]; then
echo > /sys/power/tuxonice/do_resume
fi

Не забываем дать всем права на исполнение этого файла: chmod +x /etc/initramfs-tools/scripts/init-top/00resume

Теперь пересобираем initrd (команда update-initramfs -u).

Пробуем: если с ГУЕм не ладится, от имени рута выполняем команду hibernate и читаем, на что она ругается.

Выглядеть должно примерно так:


В результате имеем ноутбук (или не ноутбук, но я не вижу смысла в hibernate в других случаях) с модным быстрым hibernate.

К сожалению, некоторые драйверы не очень дружат с таким режимом, наиболее опасные из них — видео. Заведомо могут работать свежие intel и nvidia (180+), про ATI и другую экзотику ничего не скажу.
В файле /etc/hibernate/common.conf можно настроить разнообразные твики, от гашения звука до рестарта сервисов и удаления/подгрузки драйверов.
Теоретически можно прикрутить графический интерфейс для отображения статуса, но это отдельные пляски, от которых, ИМХО, больше возможных глюков, чем реальной пользы.
Tags:
Hubs:
+24
Comments 63
Comments Comments 63

Articles