не работает гибернация linux
Спящий режим
Содержание
Что это и как это работает?
Спящий режим (hibernate) – энергосберегающий режим операционной системы компьютера, позволяющий сохранять содержимое оперативной памяти на энергонезависимое устройство хранения данных (жесткий диск) перед выключением питания.
При засыпании все данные процессов вытесняются в swap файл, а также в swap сохраняются некоторые настройки устройств, и после этого система переходит в режим с полным отключением питания.
При включении компьютера система начинает загружаться как обычно, но если в процессе загрузки ядро обнаруживает образ памяти сохраненный в swap, то загрузка в нормальном режиме прекращается и начинается восстановление состояния оперативной памяти из swap-а. Кроме этого восстанавливаются настройки устройств (видеоадаптер, сетевые карты, и пр.).
И вот именно с восстановлением работоспособности устройств компьютера и связаны все основные проблемы с режимом сна. Не всегда драйвера устройств позволяют осуществить необходимые действия по сохранению и восстановление настроек после сна. И это может приводить к зависанию компьютера после попытки проснуться.
Еще одна неприятность этого режима проявляется при больших объемах оперативной запоминающей памяти компьютера. Речь идет об объемах оперативной памяти от 8Gb и выше (что в последние годы встречается все чаще). Если памяти много, то и много придется сохранять в swap при засыпании и соответственно вычитывать из swap при просыпании. Из за этого засыпание и просыпания могут занять довольно значительное время. Может оказаться, что вам проще и гораздо быстрее все-таки сохранить свою работу и выключить нормально компьютер, а потом, после обычной загрузки, открыть свои рабочие файлы заново.
Именно из-за озвученных выше особенностей режима сна в последних версиях Ubuntu по умолчанию этот режим энергосбережения отключен.
Настройка
Для поддержки работы данного режима у вас должен присутствовать swap-раздел или (рекомендуется) swap-файл.
Рекомендации по созданию swap-раздела можно просмотреть здесь. Вариант со swap-файлом является более удобным в использовании (но чуть более сложным при создании) т.к. он не занимает отдельный раздел, легко удаляется, его размер можно легко изменить (без необходимости менять разметку диска и двигать/изменять размеры других разделов).
Но учтите, не на любой файловой системе можно создать (и использовать) swap-файл: из за некоторых особенностей организации размещения файлов на диске swap-файл нельзя использовать на файловой системе btrfs (без специальных ухищрений).
Создание swap-файла
Про рекомендуемый размер swap-файла можно узнать здесь.
Создайте файл размером 4 ГБ в корневом каталоге (убедитесь, что у вас хватает свободного места):
Дайте файлу необходимые права и создайте в нем область подкачки:
Вручную подключите файл как swap:
Допишите строку в fstab, чтобы созданный swap подключался автоматически при запуске системы.
Настройка гибернации в swap-файл
Узнайте UUID корневого раздела (с помощью mount можно узнать, какой из разделов является корнем):
Укажите первый физический блок swap-файла. Его можно узнать с помощью swap-offset из пакета uswsusp :
Запишите ваши параметры в файл настроек initramfs:
В строку GRUB_CMDLINE_LINUX_DEFAULT добавьте параметры без кавычек и знаков > pm-hibernate из пакета pm-utils :
На вопрос «Продолжить без работоспособного пространства подкачки?» в случае использования swap-файла отвечаем «Да», пространство подкачки в диалоге указываем по UUID (/dev/disk/by-uuid/ ), раздел не шифруем (иначе может случиться подобное описанному здесь). После этого автоматически будет сформирован uswsusp.conf с необходимыми параметрами. Пробуем опять:
Если заработало, заменяем вызов pm-hibernate на s2disk :
Снова проверьте гибернацию (возможно, перед этим потребуется перезагрузка):
Если гибернация заработала, то остается только активировать кнопку «Спящий режим» в меню выключения. Для этого:
Найдите блоки, посвященные hibernate:
и измените в них параметр ResultActive с no на yes.
Для решения этой проблемы внесите правки в конфигурационный файл:
Замените в нём параметр ExecStart с
Как включить гибернацию?
В Ubuntu 12.04 и новее гибернация по умолчанию отключена в policykit. Как я могу включить это обратно?
10 ответов
Если этот ответ не работает в Ubuntu 13.10, см. Здесь альтернативный ответ
Вы можете следить за официальной документацией здесь. Гибернация была отключена 12.04 для машин, которые не сертифицированы с Ubuntu.
Чтобы включить гибернацию, нужно проверить, правильно ли она работает, запустив sudo pm-hibernate в терминале. Система попытается перейти в спящий режим. Если вы можете запустить систему снова, то вы более или менее можете добавить переопределение.
Для этого начните редактирование:
Заполните это этим:
Или в 14.04 и позже:
Перезагрузка и гибернация возвращается!
Или беги killall unity-panel-service просто сбросить меню.
Некоторым пользователям нужно будет запустить sudo update-grub чтобы опция гибернации была доступна в меню питания. Некоторым пользователям также может потребоваться, по крайней мере, выйти из системы, а затем войти в нее, чтобы она появилась в меню питания (вверху справа).
Сначала нужно проверить, поддерживает ли ваша машина спящий режим. Проверьте это с помощью команды:
Ubuntu 16.04 и выше
Для включения в интерфейсе вам необходимо запустить sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla и заполните:
Ubuntu 14.04 и 15.04
Для включения в интерфейсе вам необходимо запустить sudo nano /etc/polkit-1/localauthority.conf.d/52-enable-hibernation.conf для Ubuntu 14.04 и 15.04 и заполните:
Он имеет несколько строф, так как у вас может быть несколько пользователей (так что это не зависит от нескольких пользователей или от администратора как администратора, а не от login1)
Кроме того, для тех, кто хочет отключить кнопку приостановки (по разным причинам), действуйте аналогично.
Выберите любое имя файла, но оно является подробным / условным:
Заполните это этим:
Не нужно перезагружать, он должен исчезнуть, как только вы войдете в меню выключения.
После этого появляется экран:
Убедитесь, что вы проверите Hibernate, как и я.
Во-первых, я рекомендую вам проверить, поддерживает ли ваш ноутбук режим гибернации, потому что причина, по которой гибернация по умолчанию отключена, заключается в том, что на некоторых компьютерах она иногда приводит к фатальным результатам. Проверьте свою машину
Ctrl + Alt + T, а затем sudo pm-hibernate
Ваша машина должна быть в спящем режиме. Разбудите свой компьютер после спящего режима и наблюдайте, ведет ли он себя плохо или работает ли он нормально. Если после спящего режима у вас возникнут какие-либо нарушения, я советую вам не продолжать следующую процедуру. Однако, если все работает нормально, продолжайте активировать спящий режим
Отредактируйте открытый файл и добавьте следующие строки:
После этого перезагрузите компьютер, и после входа в систему вы увидите опцию гибернации в правом верхнем углу настроек.
Если ответ с /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla не работает, как в моем случае, не забудьте удалить файл:
И попробуйте использовать TuxOnIce.
Сначала убедитесь, что у вас достаточно свопа. Он должен быть того же размера или больше, чем объем вашей оперативной памяти. Используйте команду
Правило Swap > Mem. Если это не так, увеличьте размер свопа. Затем установите TuxOnIce
Затем вы можете попробовать выполнить тестовый режим:
Не забудьте сохранить свою работу, прежде чем сделать это.
Если все прошло нормально, ваш компьютер выключится. После его включения рабочий стол будет переведен в состояние, в котором он находился до режима гибернации.
Спящий режим в Ubuntu
1. Режим ожидания
Режим ожидания (Suspend to RAM) или простой спящий режим Ubuntu доступен в системе по умолчанию и предусматривает отключение питания компьютера с сохранением питания оперативной памяти. Благодаря этой особенности он работает на подавляющем большинстве компьютеров, хотя и имеет очевидный недостаток, связанный с затратами энергии. Конечно же, каждый случай индивидуален, ведь любой режим энергосбережения предполагает подготовку устройств силами операционной системы с последующей передачей управления прошивке материнской платы, поэтому сложно гарантировать корректную работу даже режима ожидания.
По умолчанию режим ожидания активируется при закрытии крышки ноутбука. Также он может активироваться с помощью функциональной клавиши ноутбука (обычно это клавиша с изображением полумесяца). Кроме того, его можно включить из системного меню, но не самым очевидным образом. Для этого нужно открыть системное меню, нажать клавишу Alt, после чего кнопка завершения работы будет заменена на кнопку перехода в режим ожидания Ubuntu (Рисунок 1).
Рисунок 1. Кнопки завершения работы и перехода в режим ожидания
Вы можете прямо сейчас нажать на эту кнопку и испытать режим ожидания в деле. Если после отключения питания компьютера и последующего нажатия кнопки включения вам удастся продолжить работу с ранее запущенными приложениями, то спящий режим работает корректно. Если же после некоторого ожидания вы видите лишь чёрный экран или элементы графического интерфейса системы оказываются неработоспособными, лучше отключить спящий режим Ubuntu. Для этого в первую очередь следует запустить приложение дли изменения параметров системы с помощью крайней левой круглой кнопки с пиктограммой инструментов в системном меню (Рисунок 2).
Рисунок 2. Кнопка для изменения параметров системы
После открытия окна приложения нужно перейти на вкладку Электропитание. Здесь следует убедиться в том, что в качестве значения параметра При нажатии кнопки выключения не установлено Перевести в режим ожидания, а также нажать на строку Автоматический режим ожидания и отключить переключатель При простое (Рисунок 3).
Рисунок 3. Отключение режима ожидания
В случае закрытия крышки ноутбука всё немного сложнее: нужно установить дополнительное приложение GNOME Tweaks с помощью команды:
sudo apt-get install gnome-tweaks
Далее нужно запустить это приложение (его имя в меню Доп. настройки GNOME), перейти на вкладку Электропитание и отключить переключатель Режим ожидания при закрытии ноутбука (Рисунок 4).
Рисунок 4. Параметры электропитания в GNOME Tweaks
Теперь при закрытии крышки ноутбук не будет переходить в режим ожидания как в старые добрые времена GNOME 2.
Конечно же, редкое руководство по Linux обходится без описания консольных команд. Мы также рассмотрим команды, которые позволяют активировать режим ожидания из консоли. За управление режимами энергосбережения в Ubuntu отвечает системная служба logind из состава systemd, с которой можно взаимодействовать как посредством утилиты systemctl, так и посредством системной шины сообщений DBus. Это команда для перехода в режим ожидания с помощью утилиты systemctl:
А это вызов соответствующего метода DBus:
2. Режим гибернации
Начнём с параметра ядра ОС. Он предназначен для передачи имени файла устройства раздела подкачки, в котором будут сохраняться данные состояния ОС. Чтобы узнать имя этого файла, можно воспользоваться следующей командой:
Необходимое имя должно находиться в столбце NAME (Рисунок 5).
Рисунок 5. Список разделов подкачки системы
В случае его отсутствия у вас не активирован раздел подкачки.
Это имя следует добавить в строку параметров ядра ОС, передаваемую системным загрузчиком GRUB, в форме значения параметра resume. Для этого нужно открыть файл конфигурации /etc/default/grub и отредактировать строку GRUB_CMDLINE_LINUX_DEFAULT. Проще всего это сделать с помощью следующей команды:
Предположим, что именем файла устройства раздела подкачки является /dev/sda5. Тогда строку
придёётся заменить на строку
GRUB_CMDLINE_LINUX_DEFAULT=»quiet splash resume=/dev/sda5″
После этого нужно сохранить изменения в открытом файле (Рисунок 6).
Рисунок 6. Измененные параметры ядра Linux
В заключение нужно обновить конфигурацию системного загрузчика с помощью следующей команды:
Помимо этого следует создать файл конфигурации Polkit в директории /etc/polkit-1/localauthority/50-local.d/ с именем com.ubuntu.enable-hibernate.pkla и следующим содержимым:
Теперь приложение для изменения параметров системы позволит активировать режим гибернации при нажатии на кнопку включения (Рисунок 7).
Рисунок 7. Режим гибернации в меню приложения для изменения параметров системы
Это повод проверить спящий режим Ubuntu 18.04 с гибернацией. При отсутствии результата, вы можете снова деактивировать его, удалив созданный файл конфигурации с помощью команды:
sudo rm /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Если же данный режим будет работать корректно, вы можете использовать кнопку включения для его активации. Если вы хотите активировать его при закрытии крышки ноутбука, вам придётся воспользоваться последовательностью специальных команд. Потому что ни приложение для изменения параметров системы, ни утилита GNOME Tweaks не позволёт сделать этого. Вот эти команды:
gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action ‘hibernate’
gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action ‘hibernate’
sudo apt-get install dconf-editor
Рисунок 8. Активированный режим гибернации при закрытии крышки ноутбука
Если вас не устраивает активируемый при закрытии крышки ноутбука режим гибернации, вы можете вернуть режим ожидания с помощью следующих команд:
gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action ‘suspend’
gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action ‘suspend’
Также может возникнуть вопрос: «А как активировать режим гибернации из системного меню?». Вообще, такой возможности не предусмотрено, но вы можете установить расширение GNOME Shell под названием «Hibernate Status Button». Установка расширения осуществляется с помощью Менеджера приложений Ubuntu (само расширение размещено в разделе Дополнения на вкладке Расширения GNOME Shell) (Рисунок 9).
Рисунок 9. Расширение «Hibernate Status Button» в списке расширений Менеджера приложений Ubuntu
После установки расширения в системном меню появится соответствующая кнопка (Рисунок 10).
Рисунок 10. Кнопка для перехода в режим гибернации
Если нажать на клавишу Alt при показе системного меню, кнопка перехода в режим гибернации будет заменена на кнопку перехода в гибридный режим сна.
Ну и о командах для самостоятельной активации данного режима. Это команда для перехода в режим гибернации с помощью утилиты systemctl:
А это вызов соответствующего метода DBus:
3. Гибридный режим сна
Гибридный режим сна (Hybrid sleep, Suspend to both) объединяет в себе оба рассмотренных выше режима энергосбережения. Он деактивирован в Ubuntu по умолчанию и предусматривает отключение питания компьютера с копированием данных из оперативной памяти в раздел подкачки и сохранением питания оперативной памяти. Для корректной работы данного режима, как и режима гибернации, требуется раздел подкачки достаточного размера. С точки зрения пользователя это самый надёжный режим, ведь в случае разряда батареи данные состояния операционной системы могут быть извлечены из раздела подкачки.
Активация данного режима сна осуществляется вместе с активацией режима гибернации. При этом его поддержка не реализована в полной мере в окружении рабочего стола GNOME, поэтому он может быть задействован лишь посредством системной службы logind и рассмотренного выше расширения «Hibernate Status Button» после нажатия клавиши Alt.
Вы можете перевести свой компьютер в этот режим с помощью утилиты systemctl:
А также вызвав метод DBus:
Заключение
Ubuntu поддерживает три разновидности спящего режима, две из которых не доступны сразу же после установки системы. Хотя доступный по умолчанию режим ожидания и отвечает требованиям большинства пользователей, вы можете активировать остальные режимы и сами решить, какой из них больше подходит вам.
Power management (Русский)/Suspend and hibernate (Русский)
В настоящее время существует три метода приостановки работы компьютера: suspend to RAM обычно называемая просто suspend(приостановка, ждущий режим, сон, STR, S3 ), suspend to disk известный как hibernate( гибернация, спящий режим, STD, S4 ), и hybrid suspend( гибридная приостановка, гибридный спящий режим, иногда применяется название suspend to both):
Существует несколько низкоуровневых интерфейсов, обеспечивающих базовые функции, а также некоторые интерфейсы высокого уровня, обеспечивающие трюки для обработки проблемных аппаратных драйверов / модулей ядра (например, повторная инициализация видеокарты).
Contents
Низкоуровневые интерфейсы
Хотя эти интерфейсы могут использоваться напрямую, рекомендуется использовать какой-либо из #Интерфейсы высокого уровня для ждущего / спящего режима. Использование низкоуровневых интерфейсов напрямую существенно быстрее, чем использование любого интерфейса высокого уровня, поскольку запуск всех хуков перед и после режима приостановки требует времени, но хуки могут правильно устанавливать аппаратные часы, восстанавливать беспроводное соединение и т.д.
Ядро (swsusp)
Cмотрите документацию для подробностей.
uswsusp
Uswsusp (‘Userspace Software Suspend’) представляет собой оболочку ядерного механизма приостановки в ОЗУ, которая выполняет некоторые манипуляции с графическим адаптером из пользовательского пространства перед приостановкой и после возобновления.
Смотрите основную статью Uswsusp.
Интерфейсы высокого уровня
Конечной целью этих пакетов является предоставление программ( двоичных файлов/скриптов), которые могут быть вызваны для выполнения приостановки компьютера. Фактическая привязка их к кнопкам питания, щелчкам меню или событиям крышки ноутбука обычно предоставляется другим инструментам. Чтобы автоматически приостановить работу при определенных событиях, таких как закрытие крышки ноутбука или процент истощения батареи, вам может потребоваться запустить Acpid.
systemd
Гибернация
Про размер раздела/файла подкачки
Даже если ваш раздел подкачки меньше ОЗУ, у вас все еще есть большая вероятность успешно перейти в спящий режим. Согласно ядерной документации:
/sys/power/image_size управляет размером образа, создаваемого механизмом приостановки на диск. Это может быть строка, представляющая неотрицательное целое число, которое будет использоваться в качестве верхнего предела размера образа в байтах. Механизм приостановки сделает все возможное, чтобы размер образа не превышал это число. Однако, если это окажется невозможным, он попытается приостановить все равно, используя наименьший возможный размер образа. В частности, если в этот файл записать «0», размер образа будет настолько мал на сколько это возможно. Чтение из этого файла отображает текущее ограничение размера образа, которое по умолчанию установлено на 2/5 доступного ОЗУ.
Необходимые параметры ядра
Гибернация в файл подкачки
Для использования файла подкачки также необходимо установить resume=swap_device и resume_offset=swap_file_offset kernel parameters. Смотрите документацию ядра.
В этом примере значение swap_file_offset это первое число 38912 с двумя точками.
Настройка initramfs
Технология Intel Rapid Start (IRST)
При включенной технологии Intel Rapid Start Technology (IRST) для выхода из глубокого сна требуется «на несколько секунд больше, чем для выхода из S3, но намного меньше, чем для выхода из спящего режима».
Многие системы на базе Intel имеют встроенную поддержку IRST, но для этого требуется специальный раздел на SSD (а не на HDD). OEM-развертывания Windows могут уже иметь уже существующий раздел IRST, который можно сохранить во время процесса установки Arch Linux (вместо очистки и перераспределения всего SSD). Он должен отображаться как неотформатированный раздел, равный размеру ОЗУ системы.
Однако, если вы собираетесь стереть и переразбить весь диск (или уже сделали это), то раздел IRST необходимо создать заново, если вы планируете использовать эту технологию. Это можно сделать, создав пустой раздел, равный размеру ОЗУ системы, и установив для него тип раздела GUID D3BFE2DE-3DAF-11DF-BA40- E3A556D89593 для раздела GPT или ID 0x84 для раздела MBR. Вам также может потребоваться включить поддержку IRST в настройках прошивки вашей системы.
Продолжительность процесса гибернации IRST (например, копирования «всего содержимого ОЗУ в специальный раздел») зависит от размера ОЗУ системы и скорости SSD и, таким образом, может занять 20–60 секунд. Некоторые системы могут сигнализировать о завершении процесса светодиодным индикатором (LED), например, когда он перестает мигать.
Смотрите также общие вопросы и ответы и руководства пользователей для технологии Intel Rapid Start.
Исправление проблем
ACPI_OS_NAME
Возможно, вы захотите настроить свою таблицу DSDT, чтобы заставить ее работать. Смотрите статью DSDT
Пользователям VAIO
Добавьте acpi_sleep=nonvs параметр ядра в ваш загрузчик и возьмите себе с полки пирожок!
Ждущий/Спящий режим не работает или сбоит
There have been many reports about the screen going black without easily viewable errors or the ability to do anything when going into and coming back from suspend and/or hibernate. These problems have been seen on both laptops and desktops. This is not an official solution, but switching to an older kernel, especially the LTS-kernel, will probably fix this.
Sometimes the screen goes black due to device initialization from within the initramfs. Removing any modules you might have in Mkinitcpio#MODULES and rebuilding the initramfs, can possibly solve this issue, specially graphics drivers for early KMS. Initializing such devices before resuming can cause inconsistencies that prevents the system resuming from hibernation. This does not affect resuming from RAM. Also, check this article for the best practices to debug suspend/hibernate issues.
For Intel graphics drivers, enabling early KMS may help to solve the blank screen issue. Refer to Kernel mode setting#Early KMS start for details.
Wake-on-LAN
If Wake-on-LAN is active, the network interface card will consume power even if the computer is hibernated.
Мгновенный запуск из режима ожидания
For some Intel Haswell systems with the LynxPoint and LynxPoint-LP chipset, instantaneous wakeups after suspend are reported. They are linked to erroneous BIOS ACPI implementations and how the xhci_hcd module interprets it during boot. As a work-around reported affected systems are added to a blacklist (named XHCI_SPURIOUS_WAKEUP ) by the kernel case-by-case.[2]
Instantaneous resume may happen, for example, if a USB device is plugged during suspend and ACPI wakeup triggers are enabled. A viable work-around for such a system, if it is not on the blacklist yet, is to disable the wakeup triggers. An example to disable wakeup through USB is described as follows.[3]
To view the current configuration:
This should result in suspension working again. However, this settings are only temporary and would have to be set at every reboot. To automate this take a look at systemd#Написание файлов юнитов. See BBS thread for a possible solution and more information.