Гид по технологиям

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

• 9 min read • Linux • Обновлено 26 Nov 2025
Безопасная гибернация и спящий режим в Linux
Безопасная гибернация и спящий режим в 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/*).

Общий шаблон:

  1. Вызвать sudo с бессодержательной командой, чтобы запросить пароль (если требуется).
  2. Заблокировать экран (команда блокировки зависит от вашей среды).
  3. Подождать 2–5 секунд, чтобы экран успел заблокироваться.
  4. Записать нужный режим в /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/state

freeze — самый быстрый и энергосберегающий из перечисленных, но он сохраняет наименьшее количество энергии.

Альтернативный системный способ (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 <имя_дистрибутива> command”.

Рекомендации по установке скриптов

  1. Сохраните скрипт, например, в ~/bin/hibernate.sh.
  2. Сделайте его исполняемым: chmod +x ~/bin/hibernate.sh.
  3. Для удобства можно переместить в /usr/local/bin/hibernate и дать права root+sudoers-право на запись в /sys, как описано выше.
  4. Создайте ярлык/шорткат в меню рабочего стола, чтобы запускать скрипт одним кликом.

Критерии приёмки

  • Скрипт блокирует экран до перехода в режим сна или гибернации.
  • Сессия успешно восстанавливается с теми же приложениями и данными после пробуждения.
  • Гибернация успешно завершается без ошибки о нехватке swap.
  • Скрипт не требует ввода пароля после блокировки (если настроен sudoers).

Устранение неполадок и частые ошибки

  1. “Cannot hibernate: insufficient swap” — проверьте размер swap (swapon --show или free -h) и увеличьте его при необходимости.
  2. “No such file or directory: /sys/power/state” — проверьте, запускаете ли вы Linux и есть ли поддержка suspend в ядре. Убедитесь, что вы не в контейнере без доступа к /sys.
  3. “System resumes в разблокированном состоянии” — убедитесь, что блокировка экрана сработала. Увеличьте время ожидания перед записью в /sys.
  4. “Драйверы не переводятся в низкое энергопотребление” — проверьте логи 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 для пользовательских скриптов).
  • Тщательно тестируйте на одном устройстве перед внедрением на рабочие станции в корпоративной среде.

Плейбук: быстрые шаги для рабочего стола

  1. Проверить поддерживаемые режимы: cat /sys/power/state и cat /sys/power/mem_sleep.
  2. Проверить размер swap: swapon --show или free -h.
  3. Составить скрипт блокировки + запись в /sys/power/state.
  4. Запустить вручную, проверить поведение.
  5. Если работает — добавить в меню и/или настроить 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 :)

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро