Что такое 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 maverick 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Далее говорим ядру (на самом деле, tuxonice'у), откуда он(о) будет пытаться продолжить работу. Скармливаем ядру параметр resume=/dev/swap (раздел со свопом)
2.6.28-12-generic #44+tuxonice2-Ubuntu SMP Sun Apr 26 23:28:12 UTC 2009
$ grep defoptions /boot/grub/menu.lstПосле этого делаем # update-grub и убеждаемся, что в конфиге все не-recovery ядра обрели такую опцию.
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash resume=/dev/sda5
Тот же раздел со свапом надо скормить скрипту 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
prereqs)
exit 0
;;
esac
modprobe lzo
if [ -d /sys/power/tuxonice ]; then
echo > /sys/power/tuxonice/do_resume
case $1 in
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 можно настроить разнообразные твики, от гашения звука до рестарта сервисов и удаления/подгрузки драйверов.
Теоретически можно прикрутить графический интерфейс для отображения статуса, но это отдельные пляски, от которых, ИМХО, больше возможных глюков, чем реальной пользы.
Теперь пересобираем initrd (команда update-initramfs -u).
Пробуем: если с ГУЕм не ладится, от имени рута выполняем команду hibernate и читаем, на что она ругается.
Выглядеть должно примерно так:
К сожалению, некоторые драйверы не очень дружат с таким режимом, наиболее опасные из них — видео. Заведомо могут работать свежие intel и nvidia (180+), про ATI и другую экзотику ничего не скажу.
В файле /etc/hibernate/common.conf можно настроить разнообразные твики, от гашения звука до рестарта сервисов и удаления/подгрузки драйверов.
Теоретически можно прикрутить графический интерфейс для отображения статуса, но это отдельные пляски, от которых, ИМХО, больше возможных глюков, чем реальной пользы.
Комментариев нет:
Отправить комментарий