Сейчас у меня установлено ядро 2.6.24-7 из репов ленни.
Как оказалось, последняя версия патча TuxOnIce есть в Дебиановских репозиториях. Пакет зовется linux-patch-tuxonice. Однако, его установки не достаточно для начала работы TuxOnIce. Это всего-лишь патч. Нужно скачать еще и исходники ядра (можно из репозиториев стянуть, получим исходники того ядра, на котором система и работает). Далее, патчим исходники... для этого переходим в корневую папку исходников (у меня это /usr/src/linux-source-2.6.24) и оттуда от имени рута выполняем
../kernel-patches/all/apply/tuxonice
Теперь открываем конфигуратор ядра и там смотрим опции, которые нам нужны. Все настройки находятся разделе Power management -> Hibernation -> Enchanced Hibernation. Там можно включить/выключить хранение образа памяти в файле или в свопе, поддержку сжатия ;) , поддержку сплеш-картинки, а также включить по-умолчанию TuxOnIce и заменить старый метод гибернации. Себе я включил запись в своп, сжатие и замену старого метода, плюс оставил включенной опцию "Checksum pagaset2" (как я понял, это нужно для проверки целостности образа памяти). Пока не пробовал подключать сплеш-картинку, но обязательно попробую позже...
После этого собираем ядро в дебиан-пакет командой
make deb-pkg
и ждем. Процесс не быстрый. После этого устанавливаем полученный пакет. Если все прошло так же, как у меня, то пакет не заменит старую версию ядра, а поставит еще одну, также модули установятся в отдельную папку.
А теперь самое интересное. Для работы этого чуда нужно:
- добавить скрипт в initramfs для пробуждения системы, иначе после усыпления при загрузке системы не будет восстановлен образ памяти, а система загрузится как ни в чем не бывало (за исключением отвалившегося свопа с сообщением "Unable to find swap-space signature")
- собрать initrd с новыми модулями и добавленным скриптом
- настроить загрузчик на новое ядро, initrd и указать устройство для хранения образа памяти.
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
if [ -d /sys/power/tuxonice ]; then
echo 1 > /sys/power/tuxonice/do_resume
fi
нужно положить в файл /etc/initramfs-tools/scripts/local-premount/tuxonice
Самая веселая шутка в том, что имя файла должно содержать только цифры, буквы и символ подчеркивания. Если назвать файл как-нибудь так: "tuxonice.sh", то ничего не сработает. ;) Ну и не забываем сделать файл исполняемым:
chmod ugo+x /etc/initramfs-tools/scripts/local-premount/tuxonice
Далее, собираем initrd. Для этого делал я следующее. Для удобства переходим в консоли в папку /boot, затем оттуда от рута выполняем:
mkinitramfs -o initrd.img-2.6.24 2.6.24
Подробнее о параметрах:
- -o <имя образа> - это выходной файл, думаю можно указывать что душе угодно, главное - затем загрузчику указать тот же файл.
- <версия ядра> - это версия ядра, для которой мы собираем initrd. Если его не указывать, то программа возьмет модули от текущей версии ядра и система может не стартовать вообще.
update-initramfs -u
Теперь настраиваем загрузчик. Сам я использую GRUB, поэтому и настройку привожу для него. Вот как выглядит запись для нового ядра:
title Debian GNU/Linux, kernel 2.6.24 Custom Kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.24 root=/dev/sda1 ro vga=791 resume=swap:/dev/sda5
initrd /boot/initrd.img-2.6.24
Просто скопируйте строчку, с помощью которой загружаетесь в данный момент и измените 3 параметра:
- /boot/vmlinuz-2.6.24 - это образ ядра, он устанавливается из deb-пакета, который сгенерирован системой сборки ядра. Подставляйте свой файл.
- resume=swap:/dev/sda5 - это параметр для TuxOnIce. Он говорит, куда записывать и откуда брать образ памяти. У меня это своп-раздел /dev/sda5. Выяснить, что вам нужно здесь вписывать поможет "fdisk -l", тип какого устройства swap, такой адрес и пишите. Здесь также можно указать и файл, но я не пробовал, поэтому советовать не буду... читайте документацию на официальном сайте.
- /boot/initrd.img-2.6.24 - это ваш initrd.
На этом базовая настройка заканчивается... и начинаются танцы с бубном. Если система пишет, что на второй стадии ей чего-то там не хватило, что у вас установлено extra_pages_allowance в 500, а ей нужно больше, то методов решения тут несколько. Нужно изменить этот параметр настолько, чтоб вашей системе хватило (он напишет, например, 764/500, вот вам нужно больше, чем 764, себе выставляю на 1000, поэтому далее в методах решения буду использовать эту цифру). Методы:
- Одноразовый метод. Нужно выполнить
echo 1000 > /sys/power/tuxonice/extra_pages_allowance
это увеличит параметр до очередной перезагрузки. - Изменить конфигурационный файл /etc/hibernate/suspend2.conf, добавить в него строчку
ProcSetting extra_pages_allowance 1000
Есть только одно НО: этот метод у меня не работает, надо еще исследовать... может конфиг переименовать в tuxonice.conf ... - Жесткий метод. Нужно найти в пропатченых исходниках ядра эту константу, изменить на желаемое значение, пересобрать ядро и initrd. Будьте аккуратны с этим, отмена патча после изменения будет работать криво.
Обновление от 15 апреля 2009
В версии 3.0.1 по-умолчанию используется сжатие lzo. А вот модуль для работы с этим сжатием не включается в initrd. Исправляется это добавлением в файл /etc/initramfs-tools/modules строчки:
lzo
Не забудьте обновить initrd:
update-initramfs -u
Комментариев нет:
Отправить комментарий