Suspend2
Материал из Gentoo Linux Wiki
Содержание |
[править] Описание
Software suspend2 - патч к ядру позволяющий сохранять состояние системы между аппаратными выключениями. При этом всё содержимое оперативной памяти и регистры процессора сохраняются на жесткий диск и аппаратно машина выключается. Выглядит это так: Вы проходите очень сложный уровень в supetux`е и вдруг приходят электрики и говорят, что нужно выключить свет ( вежливые и воспитанные такие электрики ). Что делать? Если выключить машину - пропадет игра и придется проходить заново, если не выключить - всё равно пропадет. Запускам sudo hibernate и машина выключается, а когда вежливые электрики уходят - включаем машину и продолжаем играть с того места, где Вас прервали.
[править] Установка
Сначала ставим исходники ядра и сопутствующие пакеты:
emerge suspend2-sources
sys-kernel/suspend2-sources - исходники ядра с патчами gentoo-sources и suspend2. sys-apps/suspend2-userui - которая показывает прогресс в виде, более понятном чем сообщения ядра sys-power/hibernate-script - скрипт для перевода системы в "заморозку"
[править] Настройка ядра
Сначала включаем собственно suspend2:
| Linux Kernel Configuration: Suspend2 |
Power Management support ->
[*] Suspend2 ->
[ ] File Writer
[*] Swap Writer
(/dev/sda2) Default resume device name
|
вместо /dev/sda2 нужно указать свой раздел подкачки ( aka swap ), который должен быть включен во время "засыпания". Если свопа нет - включайте File Writer и читайте документацию по его использованию на странице проекта. Можно переназначить с помощью параметра загрузочного параметра resume2=swap:/dev/чегонадо. Еще нужно включить алгоритм сжатия LFZ
| Linux Kernel Configuration: LZF compression |
[*] Cryptographic API <*> LZF compression algorithm |
он может использоваться для сжатия сохраняемых данных. Также их можно шифровать желаемым алгоритмом из того же раздела настройки ядра. Теперь можно собирать и грузить ядро с любимыми параметрами. Но некоторые вещи лучше отключить:
| Linux Kernel Configuration: Отключаем |
Processor type and features ---> [ ] Local APIC support on uniprocessors |
[править] Настройка скрипта hibernate
Открываем /etc/hibernate/hibernate.conf и изменяем некоторые параметры:
- UseSuspend2 yes говорим скрипту использовать именно suspend 2
- SuspendDevice swap:/dev/свой_своп - сохраняться именно сюда
- ProcSetting userui_program /home/muromsuspend2ui_text - показывать текстовый бегунок хода выключения или
- ProcSetting userui_program /sbin/suspend2ui_fbsplash - использовать для этого fbsplash. Про fbsplash читаем в руководстве
- FBSplash on
- FBSplashTheme <тема fbsplash> какую тему fbsplash использовать. Нужно указать каталог из /etc/splash
- Unmount /mnt/portage/ - чтобы /mnt/portage/ размонтировался при засыпании. Включать обязательно, если этот раздел будет монтироваться из другой системы или версии ядра.
- Mount /mnt/portage/ - чтобы монтировался обратно
- LockConsoleAs root - заблокировать рутовые терминалы. Для этого нужно установить vlock
- LockKDE yes - заблокировать kde
- DownInterfaces eth0
- UpInterfaces auto - перезапускать интерфейс eth0
- SwitchToTextMode yes - переключаться на текстовый терминал перед выключением
- UseDummyXServer yes - так и не понял, но лучше включить (-;
- UnloadModules snd_via82cxxx usb-ohci - выгружать указанные модули
- UnloadAllModules yes - выгружать все модули
- RestartServices postfix - перезапускать postfix
[править] Проблемы с nvidia
Если Вы используете ядерный модуль nvidia ( пакет nvidia-kernel ) могут возникнуть проблемы с просыпанием. Но они решаемы. Для версий 6629- 7667 ставим модуль так: ebuild /usr/portage/media-video/nvidia-kernel/nvidia-kernel-версия unpack в той директории, куда оно распаковалось ищем usr/src/nv/nv.c и изменяем его следующим образом:
switch (state)
{
+ case PM_SUSPEND_STANDBY:
case PM_SUSPEND_MEM:
то есть между "switch (state) {" и "case PM_SUSPEND_MEM:" добавляем строчку "case PM_SUSPEND_STANDBY:" и собираем модуль дальше
ebuild /usr/portage/media-video/nvidia-kernel/nvidia-kernel-версия merge
в версии 8178-r3 ( моя текущая ) всё работает без этого хака. Если не помогло - можно поставить параметр
Option "NvAgp" "1"
в секции устройства в xorg.conf
[править] GeForce FX 5200
Если Вы обладатель этой карточки, то следует отключить /dev/agpgart:
| Linux Kernel Configuration: /dev/agpgart |
Device Drivers ->
Character Devices
< > /dev/agpgart
|
Затем убрать nvidia из /etc/hibernate/blacklisted-modules, и в xorg.conf прописать:
Option "NvAgp" "0"
в секции "devices"
Для того, чтобы работли игрушки, рекомендуют включать последнюю опцию и перезапускать X'ы, а после -- выключать. ;-)
Проверено на 2.6.19-suspend2-r1 и x11-drivers/nvidia-drivers-1.0.9746
[править] Проблемные устройства
Может случиться так: всё работает - засыпает и просыпается, но некоторые устройства перестают работать после просыпания ( например всё, что торчит из USB ). Бороться с этим нужно так: собираем поддержку этого устройства модулем и добавляем в UnloadModules. Теперь при засыпании модуль будет выгружаться, а при просыпании загружаться обратно, заново инициализируя устройство.
[править] Проверяем
Грузим машину и останавливаем X-сервер. От рута запускаем hibernate. Если работает - проверяем с запущенными иксами. Если не работает - читаем на что ругается. Если не помогло - идем на страницу проекта, читаем там документацию и дополняем эту.
[править] Проблема с kswapd
Если система не засыпет и dmesg выдает примерно такое:
Stopping tasks timed out after 20 seconds (1 tasks remaining): kswapd0 Free:53649(53649). Sets:31043(31043),30660(30660). Header:6. Nosave:13154-13152=2. Storage:74472/62209(131929). Needed:-49297|-69720|0. Restarting tasks...<6>Strange, kswapd0 not stopped done.
то можно попробовать сделать так: echo 1 > /sys/power/suspend2/full_pageset2.
[править] Всё остальное
страница проекта http://suspend2.net и wiki http://wiki.suspend2.net/
