воскресенье, 2 января 2011 г.

Поддержка ждущего и спящего режимов

Первую заметку нового года я хотел бы посвятить главной линукс-победе года уходящего: своему долгожданному успеху в настройке поддержки ждущего (suspend to ram) и спящего (suspend to disk, hibernation) режимов. Сразу замечу, что "из коробки" они у меня не заработали ни в Squeeze, ни когда-то в Lenny.

Про эти два режима написано в интернете немало, и я не вижу смысла подробно их освещать, лишь кратко опишу, как это выглядит в Debian.

Suspend-to-ram: информация о состоянии системы записывается в оперативную память, при отключении питания она, естественно, теряется. Индикатором ждущего режима традиционно является мигающая лампочка на системном блоке. При нажатии на кнопку включения весьма быстро загружается ОС в том виде, как была оставлена перед активацией режима - со всеми запущенными приложениями, открытыми окнами и т.д.

Suspend-to-disk: информация о состоянии системы записывается в swap-раздел жесткого диска, при отключении питания она не теряется. Компьютер, фактически, выключается. При нажатии на кнопку включения проходятся все этапы загрузки: BIOS,  grub, Debian; но по завершении операционная система, опять же, предстанет в том виде, в каком была оставлена перед активацией режима.

Проблема состояла в следующем: при попытке войти в ждущий/спящий режимы компьютер как положено "затухал", но после этого уже не включался. В спящем режиме был просто чёрный экран, а в ждущем появлялся мигающий курсор...и тишина. В обоих случаях помогала только физическая перезагрузка. Хотя решение я собирал как мозаику, долго и по кусочкам, излагать буду по порядку, поднимаясь "снизу вверх".

1) Настройки BIOS
В BIOS должна быть включена поддержка ACPI.

Power Management -> ACPI 2.0 Support -> Enabled

И соседние опции, если они есть, так как набор настроек несколько варьируется в зависимости от версии BIOS.

2) SWAP-раздел
Он должен присутствовать, и размер его должен быть не меньше объема оперативной памяти, иначе вы не сможете стабильно использовать спящий режим.

3) Настройки ядра
В ядре должна быть включена поддержка ACPI и сопутствующих опций. Здесь я должен отметить, что у меня не ноутбук, а стационарный PC, и поэтому все специфические для лаптопов настройки отключены. Вам всё равно точно потребуется нижеперечисленное, плюс, возможно, что-то ещё (читайте описания настроек, особенно посвященных продукции вашей фирмы-производителя). Для удобства выкладываю скриншот своей конфигурации.

??????? 02.01.2011 ? 16:24:59

Обратите внимание на выделенную строку (справа)- в ней следует указать путь к swap-разделу, который будет использоваться при возобновлении из спящего режима. Если swap-разделов у вас почему-то несколько, то лучше указывать первый. Если вы не знаете, на каком разделе расположена подкачка, это можно посмотреть в /etc/fstab, по команде blkid от суперпользователя или в программах для работы с дисками (например, gparted).

??????? 02.01.2011 ? 16:33:33

На скриншоте выше конфигурация ACPI, владельцам ноутбуков обязательно понадобятся отключенные у меня Battery и AC Adapter.
В целях энергосбережения есть смысл также сконфигурировать управление частотой процессора (CPU Frequency scaling) в следующей секции (потребуется также пакет cpufrequtils).

4) Системные пакеты
Наконец, кое-что должно присутствовать и в самой системе. Список пакетов взят отсюда, большинство пакетов уже наверняка стоит:

hal, hal-info, pm-utils, powermgmt-base, acpid


Вроде всё. ;-) Для входа в ждущий режим я использую меню графической среды, консольные команды не искал.

3 комментария:

  1. а через какую утилиту идет настройка ядра у Вас на скринах?

    ОтветитьУдалить
  2. в какой директории?
    пробовал в /usr/src/linux-headers-2.6.32-5-686

    # make xconfig
    /usr/src/linux-headers-2.6.32-5-common/scripts/Makefile.build:44: /usr/src/linux-headers-2.6.32-5-common/scripts/basic/Makefile: Нет такого файла или каталога
    make[3]: *** Нет правила для сборки цели `/usr/src/linux-headers-2.6.32-5-common/scripts/basic/Makefile'. Останов.
    make[2]: *** [scripts_basic] Ошибка 2
    make[1]: *** [sub-make] Ошибка 2
    make: *** [all] Ошибка 2

    ОтветитьУдалить