Linux - the Best!

Your Explorer by Linux links...

Денис Колисниченко

Linux Советы

http://www.dkws.org.ua/

Совет №12. Пусть Linux поспит

Как вы догадались, сейчас речь пойдет о реализации спящего режима в Linux. В Windows спящий режим давно стал чем-то привычным, попробуем реализовать эту чудо в Linux. Для чего используется спящий режим? Спящий режим позволяет сохранить содержимое памяти на жесткий диск. После сохранения содержимого памяти, питание компьютера выключается. После включения питания полностью восстанавливается состояние операционной системы - будут запущены программы, открыты все файлы (даже несохраненные) - вы просто сможете продолжить свою работу, причем продолжить работу сразу, а не ждать, пока все загрузится.

Спящий режим поддерживается во всех ядра 2.6. Ядро 2.4 для поддержки спящего режима нужно пропатчить, но мы этот вариант рассматривать не будем - почти все современные дистрибутивы основаны на ядре 2.6, поэтому в большинстве случаев вам не нужно ничего делать со своим ядром. Но, скорее всего, вам придется увеличить раздел подкачки. Сохранение содержимого памяти происходит в раздел подкачки. Ясно, что размер раздела подкачки должен быть равен, как минимум, размеру оперативной памяти, а еще лучше, чтобы он превышал размер оперативной памяти. Например, если у вас 512 Мб оперативной памяти, лучше, чтобы размер раздела подкачки был хотя бы 640 Мб (512 + 128 Мб). Для загрузки сохраненного содержимого памяти нужно передать ядру параметры resume2=имя_раздела, или просто resume=имя_раздела - параметр зависит от вашего ядра, поэтому нужно поэкспериментировать. Имя раздела - это имя раздела подкачки, например, /dev/hda3. Данный параметр нужно прописать в файле конфигурации вашего загрузчика LILO/GRUB, чтобы ядро использовало его по умолчанию. После этого алгоритм работы ядра будет такой: если найден сохраненный образ памяти, ядро загрузит его, если не найден, то будет продолжена обычная загрузка.

Рассмотрим одну неприятную ситуацию. Существует способ загрузить систему с нуля, даже если сохранен образ памяти. Для этого просто уберите параметр resume (resume2), но при следующей загрузке опять будет обнаружен образ и система попытается его загрузить. Но поскольку вы уже работали с системой в прошлый раз, может быть повреждена файловая система. Ведь при переходе в спящий режим не сбрасывается дисковый кэш, поэтому при "пробуждении" системы на дисках, на которые производилась запись, пока система "спала" (когда вы загрузили ее с нуля), будет разница между тем, что уже записано и тем, что есть в дисковом кэше, сохраненном при переходе в спящий режим. Так что, если вам пришлось загрузиться без пробуждения системы, вам нужно очистить раздел подкачки с помощью команды командой mkswap /dev/hdXX. После этого можно уже не удалять каждый раз параметр resume при загрузке системы. К чему все это было сказано? Ведь если я использую спящий режим, мне он нужен и не будет необходимости загружаться с нуля. На самом деле все немного не так. Необходимость будет. Спящий режим в Linux - пока штука не достаточно надежная, и в некоторых случаях система может просто-напросто не "проснуться". Вот тогда вам и понадобится загрузка без resume. К тому же спящий режим в Linux не работает на многопроцессорных машина, пока не умеет работать со SCSI и имеет ряд других ограничений. А и еще: если у вас загружен модуль nvidia (поддержка видеокарт от nVidia), первая версия спящего режима (swsusp, когда вы вводите параметр resume, а не resume2) не работает.

Сейчас проверим, работает ли у вас спящий режим. Если вы выполнили все вышеприведенные рекомендации, для перехода в спящий режим вы можете использовать одну из двух команд:

# echo 4 > /proc/acpi/sleep

# echo disk > /sys/power/state

Если в вашей системе есть сценарий hibernate, то корректнее использовать именно его - тогда вам не придется гадать, какая команда лучше.