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/

Источник — «http://ru.gentoo-wiki.com/Suspend2»
Личные инструменты