Date: Wed, 8 Jan 2004 10:18:08 +0000 (UTC)
From: Maxim Chirkov <mc@opennet.ru>
Newsgroups: opennet
Subject: Мгновенная загрузка Linux через режимы Suspend to disk или Hibernate
Режим засыпания "Suspend to disk" позволяет мгновенно выключить
компьютер и так же мгновенно продолжить работать после включения, с
полным сохранением текущего состояния системы. Т.е. производится сброс
полного дампа виртуальной памяти и информации о состоянии системы на
диск, при включении состояние полностью восстанавливается.
Что требуется:
--------------
- Последнее Linux ядро 2.4.x в исходных текстах.
- ACPI патч (acpi-дата-2.4.x.diff.bz2) с сайта http://acpi.sourceforge.net
- Software Suspend (swsusp) патчи (два патча software-suspend-*-core.bz2 и
software-suspend-*-linux-2.4.x.bz2) и скрипт suspend.sh с http://swsusp.sf.net
- acpid из дистрибутивного пакета или можно скачать c http://phobos.fs.tum.de/acpi/
(swsusp входит в состав ядра 2.6.x, для 2.6.x доступно альтернативное
решение - pmdisk (СONFIG_PM_DISK) http://lwn.net/Articles/48471/)
Сборка ядра:
------------
1. Разархивируем и патчим ядро (далее на примере linux-2.4.24).
Копируем патчи в linux-2.4.24 и патчим:
2. Включаем в конфигурации ядра SWSUSP
В make menuconfig:
General setup --->
Software Suspend support --->
Image Storage (you need at least one writer) --->
[*] Swap Writer
Page Transformers --->
[*] Compress image
или
CONFIG_SOFTWARE_SUSPEND_SWAPWRITER=y
CONFIG_SOFTWARE_SUSPEND2=y
CONFIG_SOFTWARE_SUSPEND_COMPRESSION=y
3. Пересобираем и устанавливаем новое ядро
# make dep && make bzImage && make modules && make modules_install && make install
Если ядро ставится вместо родного ядра, поставляемого с Linux дистрибутивом,
рекомендую ознакомиться со списком дополнительных патчей используемых создателями
дистрибутива. Иногда патчи влияют на работу достаточно серьезных вещей и
вам придется удостовериться, что отсутствие этих дополнительных патчей не
отразится на вашей системе и принять решение, использовать патч swsusp или
пачти из комплекта дистрибутива (swsusp требует "чистого" ядра, за
редкими исключениями, описанными в документации к swsusp).
4. Активируем SWSUSP
В /etc/lilo.conf добавляем, в блоке описания загрузки текущего ядра:
append=" resume2=swap:/dev/hda6"
где, /dev/hda6 - swap раздел, размером не меньше чем на 30% превышающим
объем ОЗУ. Можно настроить дамп в свапфайл, как это сделать описано
в документе /usr/src/linux/Documentation/swsusp.txt, который рекомендуется
внимательно прочитать в любом случае.
В итоге запись в lilo.conf у меня выглядит примерно так:
image=/boot/vmlinuz
label=linux
root=/dev/hda5
vga=normal
append=" resume2=swap:/dev/hda6 ide0=autotune rootflags=data=writeback"
read-only
initrd=/boot/initrd.img-2.4.24
(не забудьте выполнить команду lilo после внесения изменений в lilo.conf)
5. Перезагружаемся: shutdown -r now
Проверка.
---------
После перезагрузки смотрим содержимое /proc/acpi/info
Если в строке "states:" присутствует S4 (swsusp), то все в порядке, иначе
смотрим причину неработы swsusp в /var/log/messages
Пробуем заснуть:
echo 4 >/proc/acpi/sleep
Для информации, S? режимы бывают следующие:
- S1 (Stopgrant, Standby) - Временное засыпание, без выключения.
На CPU подается питание, но инструкции не выполняются.
- S2 - не используется.
- S3 (Suspend to RAM) - отключение питания CPU, дамп регистров хранится в ОЗУ
- S4 (Suspend to Disk, Hibernate) - полное выключение, дамп памяти и регистров CPU
сбрасывается на диск.
- S5 - программное выключение питания.
Подробнее об ACPI можно почитать http://www.columbia.edu/~ariel/acpi/acpi_howto.txt
Настройка acpid и suspend.sh.
-----------------------------
Использование /proc/acpi/sleep слишком грубый метод, при засыпании
необходимо выгрузить некоторые модули ядра (usb, pcmcia), перезапустить
звуковую подсистему, поднять сетевой интерфейс и т.д. Для выполнения этих
операций служит скрипт suspend.sh.
- Редактируем /etc/suspend.conf в соответствии с конфигурацией системы.
- Пробуем уснуть:
# /usr/local/sbin/hibernat
Для пользователей ноутбуков полезно привязать засыпание к факту закрытия
крышки. Для этого нужно настроить acpid.
- Устанавливаем acpid из пакета или исходных текстов.
- В директории /etc/acpi/events создаем два файла lid и power:
содержимое /etc/acpi/events/lid (реакция на закрытие панели):
event=button/lid.*
action=/usr/local/sbin/hibernate
содержимое /etc/acpi/events/power (реакция на кнопку питания):
event=button/power.*
action=/sbin/shutdown -h now
- Запускаем apchid
service acpid start
Теперь при нажатии на кнопку питания будет производиться правильный shutdown,
а при закрытии крышки система будет полностью засыпать.
819 Прочтений • [Мгновенная загрузка Linux через режимы Suspend to disk или Hibernate (acpi apm suspend sleep linux kernel)] [08.05.2012] [Комментариев: 0]