Как безопасно переводить Linux в спящий режим и в гибернацию

Этот подробный практический гид показывает, как безопасно переводить Linux в режим сна (suspend) и в гибернацию (hibernate) через командную строку. Вы узнаете, как проверить доступные режимы, какие файлы в /sys контролируют поведение, примеры простых скриптов для freeze, mem и disk, а также рекомендации по защите экрана и устранению типичных ошибок.
Быстрые ссылки
Hibernation and Sleep in Linux
Desktops Failing to Present Hibernate or Sleep?
How to Hibernate, Sleep or Freeze
Wrapping up
Гибернация и спящий режим в Linux
Гибернация сохраняет содержимое ОЗУ (RAM) на диск, обычно в раздел подкачки (swap). После записи данных питание выключается. При следующем включении система считывает содержимое swap и восстанавливает состояние приложений и рабочего стола точно с того места, где вы остановились.
Спящий режим (suspend) похож, но питание не отключается полностью. Память и иногда процессор остаются под питанием в низком энергопотреблении. При пробуждении (нажатие клавиши, движение мыши или другое событие пробуждения) система возвращается в прежнее состояние быстрее, чем после гибернации.
Важно понять одно практическое ограничение: для гибернации нужно достаточно места в swap, чтобы вместить содержимое всего ОЗУ и, возможно, ещё немного для параллельного использования. Например, если у вас 8 ГБ ОЗУ, разумно иметь swap примерно 16–20 ГБ, чтобы гарантировать успешную запись.
Если вы хотите создать или изменить swap-файл, посмотрите руководства по созданию и включению swap в Linux.
Короткие определения
- ОЗУ: оперативная память (RAM). Быстрая, энергозависимая.
- swap: раздел или файл подкачки на диске, используется в том числе для хранения снимка памяти при гибернации.
- BIOS/UEFI: базовая прошивка платы, где обычно настраиваются параметры пробуждения и энергосбережения.
Уровни приостановки энергосбережения в ядре Linux
Ядро предоставляет несколько встроенных режимов приостановки:
- freeze (s2idle) — лёгкий программный сон: пользовательское пространство «замораживается», большинство I/O устройств переводится в низкое энергопотребление.
- mem (обычно в вариантах s2idle или deep) — suspend-to-RAM: весь компьютер переводится в низкое энергопотребление, но ОЗУ остаётся под питанием.
- disk — suspend-to-disk (гибернация): содержимое ОЗУ записывается в swap, питание полностью отключается.
- standby/shallow — редкий режим, где CPU остаётся под питанием (не всегда доступен).
Доступность конкретных режимов зависит от вашей аппаратной платформы, BIOS/UEFI и сборки ядра.
Десктопы не показывают опции сна или гибернации?
Иногда графическая оболочка не отображает Sleep/ Hibernate в меню питания, даже если ядро это поддерживает. Это частая проблема на некоторых сборках дистрибутивов.

Вы можете проверить, какие режимы поддерживает ваш текущий установочный образ, выполнив:
cat /sys/power/stateОжидаемый вывод содержит один или несколько вариантов: freeze, mem, disk, иногда standby. Например: freeze mem disk.
Для проверки режимов памяти выполните:
cat /sys/power/mem_sleepТам будет список возможных режимов для mem, и текущий выбранный будет заключён в квадратные скобки, например [deep].
Что делают режимы в доступных файлах
- Запись
freezeв/sys/power/stateинициирует лёгкий вариант приостановки (s2idle). - Запись
memв/sys/power/stateпереключится в suspend-to-RAM или suspend-to-idle в зависимости от значения/sys/power/mem_sleep. - Запись
diskв/sys/power/stateинициирует гибернацию (suspend-to-disk) — если есть достаточный swap.
Можно также напрямую записать deep или s2idle в /sys/power/mem_sleep, а затем писать mem в /sys/power/state. Но проще оставить mem_sleep в состоянии deep и управлять freeze, mem, disk через /sys/power/state.
Почему важна блокировка экрана перед приостановкой
Если вы просто запустите команду перехода в режим сна без блокировки экрана, система может «подключиться» к вашей сессии и остаться в разблокированном состоянии после пробуждения. Это риск безопасности для ноутбуков и рабочих станций.
Поэтому во всех скриптах ниже мы сначала блокируем экран, ждём несколько секунд и только потом начинаем приостановку.
Как безопасно Hibernate, Sleep или Freeze — базовый подход
Задача: простой скрипт, который блокирует экран и затем переводит систему в нужный режим.
Предположения:
- Вы используете дистрибутив с Xfce (в примерах — xflock4). Для GNOME, KDE и других сред команды блокировки будут другими.
- У вас есть sudo (потребуются права root для записи в /sys/power/*).
Общий шаблон:
- Вызвать sudo с бессодержательной командой, чтобы запросить пароль (если требуется).
- Заблокировать экран (команда блокировки зависит от вашей среды).
- Подождать 2–5 секунд, чтобы экран успел заблокироваться.
- Записать нужный режим в /sys/power/*.
Пример: скрипт для гибернации (hibernate.sh)
sudo sleep 0.1 # To get auth
xflock4
sleep 3
echo disk | sudo tee /sys/power/state # Requires sufficient swap spaceПояснения:
sudo sleep 0.1— пустая команда, которая вызывает sudo. Это позволяет в дальнейшем не спрашивать пароль после блокировки экрана.xflock4— обобщённый скрипт блокировки для сред на основе Xfce. Для других окружений используйте их команды (см. ниже).sleep 3— даёт время на отображение экрана блокировки.echo disk | sudo tee /sys/power/state— записываетdiskв файл состояния, инициируя гибернацию.
Пример: скрипт для сна в память (sleep.sh)
sudo sleep 0.1 # To get auth
xflock4
sleep 3
echo deep | sudo tee /sys/power/mem_sleep
echo mem | sudo tee /sys/power/stateМы явно записываем deep в /sys/power/mem_sleep, чтобы гарантировать suspend-to-RAM, а не s2idle.
Пример: скрипт для лёгкого «замораживания» (freeze.sh)
sudo sleep 0.1 # To get auth
xflock4
sleep 3
echo freeze | sudo tee /sys/power/statefreeze — самый быстрый и энергосберегающий из перечисленных, но он сохраняет наименьшее количество энергии.
Альтернативный системный способ (systemd)
В большинстве современных дистрибутивов systemd предоставляет удобные команды:
systemctl suspend
systemctl hibernate
systemctl hybrid-sleepПреимущество systemctl: он учитывает политики логин-менеджера и сессии (logind) и чаще корректно взаимодействует с окружением рабочего стола. Однако даже с systemctl блокировку экрана нужно выполнять отдельно.
Настройка sudo так, чтобы не вводить пароль при записи в /sys
Чтобы скрипты работали без постоянного запроса пароля, можно ограничить привилегии sudo в /etc/sudoers через visudo. Это безопаснее, чем делать весь скрипт setuid.
Пример записи в visudo (от имени root через visudo):
username ALL=(root) NOPASSWD: /bin/tee /sys/power/state, /bin/tee /sys/power/mem_sleepЗамените username на своё имя пользователя. Это позволит указанному пользователю выполнять именно эту операцию без пароля, но не даст полного доступа root к системе.
Важно: используйте visudo для редактирования, чтобы избежать ошибок в синтаксисе sudoers.
Блокировка экрана: команды для популярных окружений
- Xfce: xflock4
- GNOME: gnome-screensaver-command -l или
gnome-screensaver/loginctl lock-session - KDE/Plasma: qdbus org.kde.screensaver /ScreenSaver Lock
- i3 / sway: i3lock, swaylock (часто устанавливаются отдельно)
Если вы не уверены, найдите команду блокировки для вашего окружения: “lock screen <имя_дистрибутива>
Рекомендации по установке скриптов
- Сохраните скрипт, например, в
~/bin/hibernate.sh. - Сделайте его исполняемым:
chmod +x ~/bin/hibernate.sh. - Для удобства можно переместить в
/usr/local/bin/hibernateи дать права root+sudoers-право на запись в /sys, как описано выше. - Создайте ярлык/шорткат в меню рабочего стола, чтобы запускать скрипт одним кликом.
Критерии приёмки
- Скрипт блокирует экран до перехода в режим сна или гибернации.
- Сессия успешно восстанавливается с теми же приложениями и данными после пробуждения.
- Гибернация успешно завершается без ошибки о нехватке swap.
- Скрипт не требует ввода пароля после блокировки (если настроен sudoers).
Устранение неполадок и частые ошибки
- “Cannot hibernate: insufficient swap” — проверьте размер swap (
swapon --showилиfree -h) и увеличьте его при необходимости. - “No such file or directory: /sys/power/state” — проверьте, запускаете ли вы Linux и есть ли поддержка suspend в ядре. Убедитесь, что вы не в контейнере без доступа к /sys.
- “System resumes в разблокированном состоянии” — убедитесь, что блокировка экрана сработала. Увеличьте время ожидания перед записью в /sys.
- “Драйверы не переводятся в низкое энергопотребление” — проверьте логи dmesg и journalctl на предмет ошибок драйверов.
Команды для диагностики:
dmesg | tail -n 100
journalctl -b -1 -e # логи предыдущей загрузки, полезно при проблемах с возобновлением
cat /proc/cpuinfo
free -h
swapon --show
cat /sys/power/state
cat /sys/power/mem_sleepКогда это не сработает
- Если материнская плата или BIOS не поддерживают соответствующие ACPI‑режимы.
- Если вы запускаете Linux в виртуальной машине, многие режимы энергосбережения могут быть недоступны или моделироваться хостом.
- Если swap слишком мал или отсутствует — гибернация невозможна.
- Если драйверы аппаратуры имеют ошибки при переводе в спящий режим.
Альтернативные подходы
- systemctl suspend/hibernate — более интегрированные команды в systemd.
- pm-utils (устаревшие по сравнению с systemd, но всё ещё встречаются).
- Использовать менеджер питания окружения рабочего стола (GUI) — удобно для интерактивных пользователей.
Безопасность и лучшие практики
- Всегда блокируйте экран до сна или гибернации.
- Не давайте скрипту полномочий больше, чем нужно. Ограничьте NOPASSWD только на команды записи в /sys.
- Храните скрипты в защищённых каталогах и с корректными правами доступа (обычно 700 для пользовательских скриптов).
- Тщательно тестируйте на одном устройстве перед внедрением на рабочие станции в корпоративной среде.
Плейбук: быстрые шаги для рабочего стола
- Проверить поддерживаемые режимы:
cat /sys/power/stateиcat /sys/power/mem_sleep. - Проверить размер swap:
swapon --showилиfree -h. - Составить скрипт блокировки + запись в /sys/power/state.
- Запустить вручную, проверить поведение.
- Если работает — добавить в меню и/или настроить sudoers для автоматического запуска.
Роли и чеклисты
Для пользователя (Desktop):
- Проверить доступность xflock4 или аналогичной команды.
- Убедиться, что экран блокируется перед сном.
- Проверить восстановление сессии после пробуждения.
Для администратора (Sysadmin):
- Проверить поддержку ACPI на целевых машинах.
- Оценить необходимость увеличения swap.
- Настроить безопасные правила sudoers при необходимости.
- Обезопасить скрипты и развернуть через конфигурационный менеджер.
Для удалённого администратора:
- Использовать systemctl suspend/hibernate для удалённых машин, если доступна.
- Протестировать восстановление через KVM/IPMI, если требуется удалённый доступ после восстановления питания.
Decision flowchart (Mermaid)
flowchart TD
A[Проверить /sys/power/state] --> B{Есть disk?}
B -- Да --> C[Проверить размер swap]
C --> D{swap достаточно?}
D -- Да --> E[Готово: можно использовать disk]
D -- Нет --> F[Увеличить swap или использовать mem]
B -- Нет --> G{Есть mem?}
G -- Да --> H[Пробовать mem 'suspend-to-RAM']
G -- Нет --> I[Использовать freeze или обновить BIOS/ядро]Примеры сценариев применения и приёмы
- Ноутбук: гибернация удобна для длительных остановок без питания, но требует большого swap. Suspend-to-RAM быстрее, но разряд батареи может повредить сессии.
- Серверы: гибернацию редко применяют на серверах из-за требований доступности, но для тестовых стендов гибернация может ускорить восстановление состояния.
- Виртуальные машины: хост может не позволять полноценную гибернацию гостевой ОС.
Совместимость и миграция
- На старых дистрибутивах без systemd используйте pm-utils или скрипты, специфичные для дистрибутива.
- При переходе на systemd проверьте, что
logindнастроен и не блокирует управление питанием.
Галерея крайних случаев
- Устройство входит в гибернацию, но после восстановления зависает — причина может быть в драйвере графики.
- Гибернация проходит, но при старте система сообщает о неверной подписи ядра — проверьте Secure Boot и initramfs.
- При попытке выполнить запись в /sys/power/state возникает ошибка — проверьте права и SELinux/AppArmor политики.
1‑строчное глоссарий
- s2idle: лёгкий «замороженный» режим (suspend-to-idle).
- deep: режим mem, при котором ОЗУ остаётся под питанием, а остальная система — нет.
- swap: пространство на диске для подкачки и хранения снимка памяти при гибернации.
Часто задаваемые вопросы
Можно ли использовать systemctl вместо записи в /sys?
Да. systemctl suspend/hibernate/hybrid-sleep работает на systemd-системах и учитывает правила logind. Но блокировать экран всё равно нужно отдельно.
Как проверить, что у меня достаточно swap для гибернации?
Выполните free -h и сравните общий объём swap с объёмом ОЗУ (либо имейте запас). При 8 ГБ ОЗУ рекомендуется swap 16–20 ГБ для надёжной гибернации.
Какие риски при автоматическом включении гибернации?
Риск утечки сессии, если экран не заблокирован. Риск потери данных, если swap повреждён или неправильно сконфигурирован. Поэтому сначала блокируйте экран и тестируйте.
Как вернуть машину, если она не проснулась из гибернации?
Смотрите логи предыдущего запуска: journalctl -b -1 -e и dmesg для поиска ошибок. Возможно, потребуется подключение через консоль KVM/IPMI или принудительная перезагрузка.
Завершение и рекомендации
Перевод в спящий режим и гибернация — мощные инструменты для экономии энергии и сохранения рабочего состояния. Важнее всего:
- Правильно проверить доступные режимы и состояние swap.
- Всегда блокировать экран перед переводом в режим энергосбережения.
- Настроить минимально необходимые привилегии для автоматизации через sudoers.
Экспериментируйте сначала на одной машине, фиксируйте наблюдения в логах и только потом внедряйте изменения массово.
Важно: перед изменением BIOS/UEFI создайте резервные копии нужных настроек и ознакомьтесь с документацией вашей платной платы.
Спасибо за внимание! Наслаждайтесь более экономным и удобным использованием вашей Linux‑системы.
Disclaimer: No computers where hurt in the various experiments made for this guide :)
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента