- В GNU/Linux режим гибернации сохраняет всё состояние оперативной памяти в файл подкачки и выключает компьютер, в то время как режим приостановки сохраняет память в оперативной памяти с низким энергопотреблением.
- Для надежной работы режима гибернации необходима поддержка ядра и достаточное пространство подкачки, будь то раздел подкачки или правильно настроенный файл подкачки.
- Различные инструменты (systemd, pm-utils, uswsusp и PolicyKit) позволяют включать, контролировать или отключать режимы гибернации и приостановки в зависимости от дистрибутива и сценария использования.
- Выбор между приостановкой, спящим режимом или перезапуском с восстановлением сессии зависит от того, какой баланс вы ищете между экономией энергии, скоростью возвращения к работе и стабильностью системы.
Режим гибернации в GNU/Linux остается одной из тех функций, о которых все слышали, но которую не всегда хорошо понимают или правильно настраивают. Многие пользователи обращаются сюда с проблемами, связанными с неожиданным выключением Windows или ноутбуков, и хотят точно знать, что делает каждый режим питания и как им управлять в своем дистрибутиве Linux.
В последних версиях ядра и основных дистрибутивах ситуация значительно улучшилась, но остаются важные нюансы между режимами гибернации, приостановки и завершения работы с повторным открытием документов , а также технические детали, такие как использование файла подкачки (раздела или файла), которые стоит понимать. Давайте спокойно, но ясно и практично разберем все это.
Режимы гибернации, приостановки и перезапуска с восстановлением сессии: чем они отличаются.
Прежде чем что-либо менять в настройках, важно понять, для чего нужен каждый режим энергосбережения , поскольку понятия часто путают, и в итоге это приводит к потере данных или разрядке батареи.
Когда мы говорим о гибернации в операционных системах, мы имеем в виду процесс, который замораживает всё состояние системы : открытые программы, документы, службы, параметры рабочего стола, буферы и т. д. Всё это содержимое из оперативной памяти сохраняется в постоянном хранилище (обычно в файле подкачки), и машина полностью выключается.
Это означает, что гибернация — это не то же самое, что просто оставить файлы открытыми и выключить компьютер, и это не то же самое, что приостановка работы. Она медленнее, чем приостановка работы с сохранением данных в оперативную память, но значительно экономит энергию, поскольку компьютер полностью выключен и не потребляет электроэнергию.
С другой стороны, некоторые системы предлагают нечто похожее на «перезапуск с повторным открытием документов», когда система завершает работу в обычном режиме, но при перезапуске открытые приложения автоматически запускаются заново . В GNU/Linux многие дистрибутивы имитируют такое поведение среды рабочего стола, но это не гибернация: это всё ещё холодная загрузка со всеми службами, запущенными с нуля.
Преимущество режима гибернации перед перезагрузкой с восстановлением приложений заключается в том, что ядро и пользовательское пространство не перезагружаются с нуля ; вместо этого восстанавливается полный образ предыдущего состояния. Поэтому, когда все работает правильно, вы можете продолжить работу с того места, где остановились, без повторного открытия документов или перенастройки окон.
Что такое приостановка работы системы в Linux и почему её стоит использовать?
В спящем режиме операционная система создает образ текущего состояния (ваших программ, документов, рабочего стола), но вместо записи на диск оставляет его в оперативной памяти, которая является энергозависимой.
Когда система переходит в спящий режим, ядро отключает практически все аппаратные устройства: диск, экран, большую часть чипсета… Единственными компонентами, которые остаются под напряжением, являются оперативная память и минимально необходимый компонент материнской платы для «пробуждения» при нажатии клавиши, движении мыши или открытии крышки ноутбука.
Этот режим отлично подходит, если вам нужно практически мгновенно вернуться к рабочему столу и вас не слишком беспокоит энергопотребление в режиме ожидания. Современный ноутбук может находиться в спящем режиме от одного до трех дней от батареи, но в течение этого времени он потребляет некоторое количество энергии для поддержания работы оперативной памяти.
Обычный спящий режим особенно рекомендуется, если у вас более 2 ГБ оперативной памяти и ограниченное дисковое пространство (например, на небольших SSD-накопителях) или если вы планируете снова использовать компьютер в ближайшее время. Обычно это происходит, например, когда вы закрываете крышку на несколько минут между занятиями или делаете перерыв на обед.
Гибридная подвеска: сочетание оперативной памяти и дискового пространства.
Существует третий, менее известный режим: гибридная приостановка . В этом случае система выполняет весь процесс гибернации (записывает содержимое памяти на диск, обычно в пространство подкачки), но вместо полного выключения переходит в состояние приостановки в оперативной памяти.
Это создает неоднозначную ситуацию: если заряда батареи хватит, система выйдет из спящего режима так же быстро, как и в обычном режиме ; но если заряд батареи закончится, сохраненный образ диска позволит восстановить сессию так, как если бы она перешла в спящий режим.
Недостатком этого режима является то, что для его входа и выхода требуется больше времени , чем для обычной приостановки работы, поскольку он записывает данные на диск и одновременно поддерживает питание оперативной памяти. По этой причине он часто используется на серверах или рабочих станциях, требующих дополнительного уровня защиты от потери состояния.
Как работает режим гибернации внутри GNU/Linux
При переходе системы GNU/Linux в спящий режим ядро выполняет ряд четко определенных шагов для захвата и восстановления полного состояния машины . Это не просто "сохранение данных из оперативной памяти в файл" и на этом всё заканчивается.
Типичный процесс приостановки работы системы и сохранения данных на диск осуществляется в следующей общей последовательности:
- Пользовательские процессы остановлены чтобы заморозить его состояние и предотвратить дальнейшее изменение памяти во время захвата данных.
- Аппаратные устройства блокируются или останавливаются, чтобы предотвратить изменения в памяти, связанные с контроллерами и DMA.
- Создается образ спячки: Копируется всё содержимое оперативной памяти. с отключенными прерываниями.
- Аппаратные устройства активируются контролируемым образом.
- Изображение написано в место обмена, которая затем считается зоной приостановки (swsusp или linux-suspend).
- Наконец, все устройства отключаются, и компьютер полностью выключается.
После перезагрузки система загрузки проверяет наличие действительного образа для режима гибернации :
- Да, есть, Он не запускается нормально.но считывает изображение из файла подкачки.
- Устройства снова блокируются, чтобы предотвратить помехи.
- Образ копируется из файла подкачки в оперативную память, и повторная активация процессов и устройств такими же, какими они были до того, как впали в спячку.
Одна любопытная деталь, замеченная в ходе реального тестирования, заключается в том, что после перехода в спящий режим бывший «раздел linux-swap» отображается в таких инструментах, как GParted или parted, как linux-suspend или swsusp . Это изменение типа раздела является одним из признаков, используемых системой для определения необходимости восстановления из спящего режима или выполнения чистой загрузки.
Важность обмена предметами во время спячки
Весь этот механизм основан на ключевом требовании: для перехода в спящий режим в Linux необходимо достаточное пространство подкачки , как по размеру, так и по конфигурации. Без подкачки системе негде будет хранить образ оперативной памяти.
Обмен может быть следующим:
- Una выделенный раздел с системным типом linux-swap.
- Un файл обмена находится в обычной файловой системе (например, в /swapfile).
В практических целях ядро прозрачно рассматривает оба варианта как пространство подкачки. Однако для использования файл подкачки в качестве места назначения для гибернации Вам необходимо передать ядру через загрузчик такие параметры, как... resume= (устройство) и resume_offset= (смещение внутри файла). Если этого не сделать, система загрузится с нуля и не восстановит образ, даже если он будет записан на диск.
Что касается размера, классическая рекомендация для надежного перехода в спящий режим заключается в том, что пространство подкачки должно быть как минимум равно размеру физической оперативной памяти . Действительно, если система находится под сильной нагрузкой, иногда можно перейти в спящий режим с немного меньшим пространством подкачки, но это не гарантирует успеха и не должно быть общим правилом. На системах с 32 ГБ или 64 ГБ оперативной памяти и более многие администраторы не рекомендуют переходить в спящий режим вообще из-за ограничений по времени и объему памяти.
Также стоит помнить, что такие механизмы, как zram или zswap, создают сжатую область подкачки внутри самой оперативной памяти. Они отлично подходят для повышения производительности в системах с ограниченным объемом памяти, но не годятся для режима гибернации: будучи энергозависимыми, образ системы исчезнет при отключении питания.
Переход в спящий режим на разделе подкачки против использования файла подкачки
В течение многих лет наличие выделенного раздела подкачки считалось практически обязательным условием для беспроблемного перехода в спящий режим. Поведение ядра и таких инструментов, как initramfs, во многом основывалось на этой классической модели.
Однако многие современные дистрибутивы, такие как последние версии Ubuntu, по умолчанию перешли на использование файла подкачки вместо раздела . Это не означает, что вы теряете возможность перехода в спящий режим; это просто меняет место сохранения состояния системы.
В обоих случаях лежащий в основе процесс один и тот же: Образ из оперативной памяти помещается в постоянное пространство подкачки.Разница заключается в том, что при использовании файла подкачки системе необходимо знать точный блок на диске, где начинается файл (отсюда и параметр). resume_offset) чтобы иметь возможность прочитать изображение на ранней стадии запуска.
Практические эксперименты на машинах с Debian и системами на базе Debian показали, что форматирование или удаление раздела подкачки , где хранился образ гибернации, приводит к чистой загрузке, как если бы гибернации никогда не было. Это подтверждает, что образ действительно хранится в разделе подкачки, а не где-либо ещё на диске.
Требования к ядру и поддержка в дистрибутивах
Помимо пространства подкачки, ядро Linux должно поддерживать режим гибернации . Если вы скомпилируете собственное ядро и отключите эту опцию, то независимо от того, сколько настроек вы измените в дистрибутиве, вы не сможете перейти в режим гибернации.
На практике большинство дистрибутивов используют ядро, упакованное самим проектом, и в этих случаях режим гибернации обычно включен по умолчанию вместе с остальными обычными функциями управления питанием и драйверами.
Однако не во всех дистрибутивах кнопка «Гибернация» всегда отображается в графическом меню. В некоторых, например, в Ubuntu в определенных версиях, эта опция по умолчанию скрыта на рабочем столе, даже несмотря на то, что ядро и инфраструктура гибернации полностью работоспособны.
Как включить режим гибернации в Ubuntu с помощью PolicyKit
В системах Ubuntu, где опция гибернации отсутствует в меню выключения, её можно относительно легко повторно включить, изменив некоторые правила PolicyKit. Идея заключается в том, чтобы разрешить обычным пользователям запускать действия гибернации, выполняемые upower и logind.
Типичная процедура включает в себя создание конфигурационного файла, например. com.ubuntu.enable-hibernate.pklaс содержимым, аналогичным этому (адаптированным к синтаксису, используемому вашими инструментами):
Идентичность = Unix-пользователь: *
Действие = org.freedesktop.upower.hibernate
ResultActive = да
Идентичность = Unix-пользователь: *
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultActive = да
После создания файла его необходимо поместить в /etc/polkit-1/localauthority/50-local.d/Для этого вы можете открыть файловый менеджер от имени администратора (например, с помощью команды `file manager`). gksudo nautilus (в средах, которые все еще поддерживают это) и вставьте его в эту директорию.
После перезагрузки системы на рабочем столе Ubuntu рядом с опциями выключения, перезагрузки и приостановки отобразится опция гибернации . Разумеется, для этого по-прежнему требуется достаточно большой объем подкачки и ядро с поддержкой гибернации.

Команды перехода в спящий режим и приостановки работы из терминала.
Если вы предпочитаете терминал или используете облегченные среды (Fluxbox, IceWM, Openbox, JWM и т. д.), где нет предварительно настроенных кнопок питания, вы можете управлять режимами гибернации и сна напрямую с помощью команд.
Использование pm-utils
Во многих классических дистрибутивах Debian/Ubuntu пакет pm-utils предоставляет несколько простых команд:
- pm-suspendЭто переводит работу машины в режим ожидания, сохраняя данные в оперативной памяти. Большинство устройств отключаются, а состояние сохраняется в памяти. Потребление энергии значительно снижается, но она всё ещё расходуется.
- pm-hibernateЭта команда переводит систему в спящий режим, сохраняя данные из оперативной памяти на диск (в файл подкачки) и полностью выключая компьютер.
- pm-suspend-hybridОна переводит диск в спящий режим и, вместо выключения, переводит оперативную память в спящий режим, обеспечивая таким образом «гибридный сон».
В основном, это будет выглядеть так:
sudo pm-suspend
sudo pm-спящий режим
sudo pm-suspend-hybrid
В системах на базе Arch Linux и других дистрибутивах, поддерживающих эту библиотеку в своих репозиториях, вы также можете использовать эти команды, хотя во многих современных дистрибутивах pm-utils был заменен на systemd.
Использование systemd (systemctl)
В дистрибутивах с systemd (OpenSUSE, многие версии Arch и производных, современный Debian и т. д.) рекомендуется использовать systemctl :
- приостановить работу systemctl: приостанавливает работу оперативной памяти.
- systemctl hibernate: переходит в спящий режим и сохраняет данные на диск.
- systemctl hybrid-sleep: активирует гибридную подвеску.
Например, в OpenSUSE или любой типичной системе systemd вы можете напрямую вызвать:
sudo systemctl спящий режим
Во многих дистрибутивах, если вы предпочитаете сохранять совместимость со старыми инструментами, pm-hibernate по-прежнему доступен и просто делегирует управление systemd или сосуществует с ним в зависимости от конфигурации.
Используем uswsusp: s2ram, s2disk и s2both
Ещё одно семейство инструментов, менее распространённое в наши дни, — это uswsusp , предоставляющее команды s2ram, s2disk и s2both. Оно было доступно в Debian и Ubuntu до определённых версий (Debian 10; Ubuntu 20.04 и более поздние версии отказались от него).
- s2ram: приостанавливает работу системы в оперативной памяти (режим S3). Эквивалентно командам pm-suspend или systemctl suspend.
- s2disk: сохраняет полное состояние на диск и выключает машину (классический режим гибернации).
- s2both: сочетает в себе оба подхода: запись образа на диск, а затем приостановка работы в оперативной памяти, обеспечивая гибридное поведение.
Команды будут следующими:
sudo s2ram
sudo s2disk
sudo s2both
Для работы этих утилит требуется правильная настройка initramfs, чтобы при запуске вызывался механизм возобновления работы и образ восстанавливался, если он существует.
Как отключить спящий режим и режим гибернации в системах GNU/Linux
В некоторых условиях, например, в классах, на общих компьютерах или общедоступных рабочих местах, спящий режим и режим гибернации могут вызывать неожиданные выключения, проблемы с сетью или зависания, которые трудно объяснить пользователям . В таких случаях иногда наиболее практичным решением является полное отключение этих функций.
Отключить использование systemd (маска целевого объекта)
Если в вашей системе используется systemd, просто замаскируйте цели, связанные со сном и гибернацией, так, чтобы их нельзя было активировать ни из графического меню, ни из терминала:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Это перенаправляет эти целевые устройства в /dev/null , символически отправляя их «в корзину». После перезагрузки любая попытка приостановить или перевести систему в спящий режим завершится без ошибок.
Если позже вы захотите восстановить нормальное поведение, вам потребуется использовать только:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
Отключите кнопки гибернации и приостановки работы с помощью PolicyKit.
Другой, более удачный вариант — использовать PolicyKit удаляет разрешения на приостановку/переход в спящий режим. Всем пользователям. Например, вы можете создавать файлы в /etc/polkit-1/localauthority/90-mandatory.d/ как:
/etc/polkit-1/localauthority/90-mandatory.d/disable-suspend.pkla
Идентичность = Unix-пользователь: *
Действие = org.freedesktop.upower.suspend
ResultActive=no
ResultInactive=no
ResultAny=no
Идентичность = Unix-пользователь: *
Действие = org.freedesktop.login1.suspend
ResultActive=no
Идентичность = Unix-пользователь: *
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=no
А что касается спячки :
/etc/polkit-1/localauthority/90-mandatory.d/disable-hibernate.pkla
Идентичность = Unix-пользователь: *
Действие = org.freedesktop.upower.hibernate
ResultActive=no
ResultInactive=no
ResultAny=no
Идентичность = Unix-пользователь: *
Action=org.freedesktop.login1.hibernate
ResultActive=no
Идентичность = Unix-пользователь: *
Action=org.freedesktop.login1.hibernate-multiple-sessions
ResultActive=no
После перезагрузки кнопки приостановки и перехода в спящий режим исчезнут из графического меню, что предотвратит их случайное нажатие пользователем.
Блокировка сочетаний клавиш и прямых команд
Даже если вы скроете кнопки, на некоторых рабочих столах и клавиатурах есть специальные клавиши спящего режима/гибернации , которые могут по-прежнему работать. В старых средах с классическим GNOME это можно было настроить с помощью таких команд, как:
gconftool -s /apps/gnome-power-manager/buttons/hibernate -t string interactive
Кроме того, вы можете создавать скрипты в /etc/pm/sleep.d/Как /etc/pm/sleep.d/000cancel-hibernate-suspend, что просто Отмените любые попытки приостановления или перевода в спящий режим. Возврат управления системе. Типичная схема будет выглядеть следующим образом:
#! / Bin / ш
# предотвращает переход в спящий режим и приостановку работы
. «$PM_FUNCTIONS»
случай «${1}» в
приостановить|впасть в спячку)
препятствовать
;;
возобновление|размораживание)
выйти из 0
;;
ESAC
Не забудьте предоставить ему права на выполнение:
chmod 0755 /etc/pm/sleep.d/000cancel-hibernate-suspend
Когда уместно впадать в спячку, а когда нет?
После изложения всей теории остается практический вопрос: когда действительно стоит переходить в спящий режим в GNU/Linux? Единого ответа нет, но есть несколько разумных рекомендаций.
Если для вас первостепенное значение имеет экономия энергии (например, на ноутбуке, который вы оставляете без использования на много часов) и у вас достаточно места на диске для образа памяти, то режим гибернации — очень привлекательный вариант; вы можете прочитать, как выбрать между выключением, приостановкой или гибернацией вашего ПК . Энергопотребление в режиме гибернации равно нулю, а при возобновлении работы компьютер загружается гораздо быстрее, чем при холодном запуске.
Если вам нужна максимальная скорость при возвращении к рабочему столу и вы планируете оставлять компьютер в режиме ожидания лишь на короткое время , то переход в спящий режим с сохранением данных в оперативную память может быть более удобным. При этом компьютер всё равно будет потреблять некоторое количество энергии батареи, но возобновление работы произойдёт практически мгновенно.
На компьютерах с большим объемом оперативной памяти или в системах, где стабильность после возобновления работы не гарантируется (некоторое необычное оборудование, экзотические драйверы и т. д.), часто целесообразнее отказаться от режима гибернации и выбрать хороший спящий режим с чистой перезагрузкой и восстановлением документов при необходимости.
В конечном итоге, понимание того, как они используют файл подкачки, что делает ядро под капотом и как управлять ими с помощью таких инструментов, как systemd, pm-utils, uswsusp или PolicyKit, позволяет рассматривать режимы гибернации и приостановки как инструменты, которые вам полезны , а не как загадочные функции, которые иногда работают, а иногда оставляют ноутбук «зависшим» без видимого объяснения.
