Linux не работает гибернация

Обновлено: 03.07.2024

Гибернация - это особый вид спящего режима Ubuntu, во время которого все открытые программы, документы, файлы, и вообще, все содержимое оперативной памяти не стирается, а переносится на раздел подкачки. После этого компьютер полностью выключается, как и при обычном выключении. Затем при включении, оперативная память восстанавливает свое состояние из раздела подкачки. Это работает быстрее обычной загрузки, ну и все нужные вам программы будут уже открыты.

По умолчанию в Ubuntu функция гибернации отключена, но вы можете использовать специальную команду из терминала для этой же цели. В этой статье мы рассмотрим как включить гибернацию Ubuntu 16.04 или 16.10.

Проверка гибернации

Перед тем как переходить непосредственно к изменениям параметров системы, давайте проверим работает ли вообще гибернация в вашем дистрибутиве Ubuntu. Убедитесь что вы сохранили все важные данные, на случай если что-то пойдет не так и система не сможет восстановиться в прежнее состояние при включении компьютера.

Для проверки сначала откройте терминал с помощью сочетания клавиш Ctrl+Alt+T, затем выполните команду

sudo systemctl hibernate

Затем, когда компьютер полностью выключится, включите его снова. Если после загрузки все ваши приложения будут снова открыты, а сама загрузка будет выполнена очень быстро, значит, гибернация Ubuntu работает, в противном случае - нет.

Если гибернация не работает убедитесь, что ваше ядро поддерживает гибернацию. Для этого посмотрите содержимое файла:


Вы должны увидеть слово disk. Это и будет означать, что гибернация поддерживается. Далее убедитесь, что размер вашего раздела подкачки не меньше размера оперативной памяти. В идеале, вообще нужно брать больше, на случай если некоторые страницы уже находятся в swap. Посмотреть объем оперативной памяти можно командой:


А информацию о разделе подкачки такой командой:


Обратите внимание, что вам нужен именно раздел подкачки. В современных версиях Ubuntu используется файл подкачки. Для файла гибернацию тоже можно попытаться настроить, но она и с разделом то не очень работает, с файлом будет ещё сложнее, поэтому лучше сделать раздел. Если вы создали новый раздел, то файл надо отключить:

sudo swapoff /swapfile

И подключить новый раздел:

sudo swapon /dev/sda6

Затем надо обновить запись в /etc/fstab. Вместо /swapfile надо прописать имя раздела, например, /dev/sda6:


Также убедитесь, что вы не используете разделов с файловой системой btrfs. Разделы нужно конвертировать, а пакет btrfs-tools нужно удалить с помощью такой команды:

sudo apt purge btrfs-tools

Гибернация Ubuntu не будет работать с Btrfs, вообще. И последнее, убедитесь, что в строке загрузки ядра есть опция resume=/dev/раздел_подкачки. Именно она указывает ядру, что нужно восстанавливать память из раздела жесткого диска. Если такой опции нет, добавьте ее, открыв файл /etc/default/grub и добавив туда строчку:

sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda6"


Здесь /dev/sda6 - имя вашего раздела подкачки, на который будет сохраняться содержимое оперативной памяти. Потом надо обновить параметры загрузчика Grub:

И перегенерировать образ initramfs:

sudo update-initramfs -u -k all

Дальше вы можете выполнить проверку еще раз. На этот раз гибернация Ubuntu должна работать как нужно.

Включить гибернацию в Ubuntu

Мы разобрались как проверить работает ли гибернация и вы можете использовать команду systemctl hibernate. Но теперь давайте рассмотрим как добавить опции гибернации в меню выключения и назначить этот вариант для использования по умолчанию. Для этого достаточно установить расширение Gnome - Hibernate Status Button:


После этого соответствующие кнопки появятся в меню выключения компьютера:


Выводы

Теперь вы знаете как включить гибернацию Ubuntu. Это очень просто, но в то же время будет очень полезно, поскольку запуск компьютера будет в разы быстрее, а после старта вы получите все ранее запущенные программы. Но будьте осторожны и сохраняйте данные, чтобы ничего не потерять. Если у вас остались вопросы, спрашивайте в комментариях!

Намного быстрее будет работать система на SSD, загрузка будет настолько быстрой, что вам даже не понадобится гибернация, на завершение предлагаю видео о том, как выбрать SSD для Linux:

Дистрибутив Fedora 21. На версии ядра 3.19.3-200 почему-то не работает гибернация. При попытке выхода из нее и нажатия кнопки питания компьютер просто перезагружается. На старых ядрах работала нормально. Это баг конкретного ядра и спокойно ждать следующих версий?


Проверьте на других доступных версиях ядра.

спокойно ждать следующих версий?

Если проверка подтвердит, что проблема в версии ядра, то в начале отправьте баг репорт, а потом можете спокойно ждать.


На старых ядрах работала нормально.
спокойно ждать следующих версий?

спокойно ставь версию, на которой всё работало

Это не баг ядра.

Сломали с последними обновлениями dracut.

Фиксится просто - добавлением строки resume=<swap device> в GRUB_CMDLINE_LINUX ( /etc/default/grub ). Ну, и последующая перегенерация конфига.


Подскажите неискушенному юзеру, а в чем именно состоит перегенерация конфига?


Подскажите неискушенному юзеру, а в чем именно состоит перегенерация конфига?

это значит из параметров указанных в /etc/default/grub собрать конфиг grub который будет лежать в /boot

grub2-mkconfig -o /path/to/grub.cfg

JB ★★★★★ ( 13.04.15 12:31:25 )
Последнее исправление: JB 13.04.15 12:32:23 (всего исправлений: 1)


Подскажите, пожалуйста, что я не понял и сделал не так.
Открыл /etc/default/grub. Он имел такой вид:


убери && перед resume=. Параметры передаются через пробел


Убрал, теперь так:


передвинь resume= перед quiet и вместо <swap device> впиши UUID свап-раздела.


Посмотрел UUID через blkid и вписал. Всё так же не работает, всё такой же вывод. Сейчас /etc/default/grub выглядит так:


Был не прав. Надо было ещё скобки <> вокруг UUID убрать. Теперь сохранилось успешно, правда гибернация по-прежнему не работает.


Если указываешь UUID то надо resume=UUID=909fabd0-afb6-497d-a4bb-fc7206952e21


Поправил. Конфигурационный файл теперь выглядит так

правильно выполняю? Должен появляться файл grub.cfg в /boot, да?


grub2-mkconfig -o /boot/grub2/grub.cfg

rhgb resume=UUID=909fabd0-afb6-497d-a4bb-fc7206952e21 quiet

У меня так почему-то не сработало. UUID указывал точно правильный.

Стало нормально работать, только когда я указал путь к своп-разделу. :)


Теперь всё заработало, выходит из гибернации корректно. Спасибо за помощь вам и всем отвечавшим в этой теме!

Проблема такая, машина зависает будто уходит в гибернацию. debug лог гласит следующее:

Думал, что проблема связана со swap, но прописав uid swap в /etc/default/grub, проблема не решилась,помогает только резет.

Подскажите куда смотреть? Где находится конфиг гибернации? в /etc/pm/ каталоги пустые. А команда pm-hibernate отрабатывает нормально, возвращает в систему кнопка power. Так же в биосе нашел опцию, intel smart connect technology, может ли она влиять на это?


После UUID должны идти цифры-буквы, они там есть? Вроде такого

backbone ★★★★★ ( 16.12.16 10:29:14 )
Последнее исправление: backbone 16.12.16 10:30:37 (всего исправлений: 1)


Посмотри еще initramfstools конфиг. Там есть про гибернацию. /etc/initramfs-tools/conf.d/resume


Да, есть. Только у меня с quiet splash


Посмотрел. Точно такой же uuid как у swap


update-initramfs -u, пробовал?


Возможно еще что своп не включен при гибернации. use swapon


update-initramfs -u отрабатывает


Кстати,пакет Xscreensaver не установлен у меня.


Причем тут он? Дай выхлоп swapon



Попробуй параметры ядра задать в таком виде:

root=/dev/sda1 resumewait resume=PARTUUID=47d49aea-5836-45c2-8fd6-5ac56fe85251

PARTUUID swap-раздела можно посмотреть командой


Вообще, гибернация очень завязана на тип таблицы разделов. Нужно попробовать и вариант resume=8:3


Если после команды pm-hibernate железо не уходит в спячку можно попробовать создать файл /etc/pm/config.d/hiber файл с таким содержимым:


команда pm-hibernate отрабатывает. Экран тухнет, комп выкл. Из гибернации выходит кнопкой power. У меня же с моей проблемой ситуация другая. Выключены все заставки, все отключения и блокировки экрана. Т.е. экран постоянно включен, но через разный промежуток времени картинка с курсором зависают, на клавиатуру не откликается. Но сам системник работает. Так же alt+ctrl+f1 не работают. Пробовал переключаться с дискретной видюхи на встроенную, но результат тот же:(

Нужно, чтобы работала гибернация нормально с systemd. Сюда добавил:

С грабом игрался с rd.luks.uuid и rd.lvm.lv , как советуют здесь, устал - не выходит ничего. Вернул к состоянию, как было, чтобы комп включался:



Версия ядра какая?


Не понимаю, для чего люди используют груб в 2016 году? Или железо 6-10 летней давности до сих пор используется в данном случае, что простительно?



Не понимаю, для чего люди используют груб в 2016 году? Или железо 6-10 летней давности до сих пор используется в данном случае, что простительно?

Железо норм, хз - граб считается удобным, распространённым и надёжным.


у тебя же есть UEFI, следовательно загрузчик не нужен, если это не дуал/трипл-бут конфигурация конечно.


у тебя же есть UEFI, следовательно загрузчик не нужен, если это не дуал/трипл-бут конфигурация конечно.

В офф манах арча советуют оставлять раздел под уефи, раздел под бут с грабом и остальное раздел. Кинься линком на тему, интересно. Кстати, старая live-флешка перестала работать после создания раздела UEFI (даже если переключаю в биос в режим Legacy - не помогает).


у меня гента, никаких отдельных /boot нет, схема диска такая:

  • EFI-раздел fat32, 200мб с флагами boot,esp
  • /-раздел ext4

Читай с своей вики про EFIstub ядро и загрузку через uefi, отдельные /boot разделы должны уйти в прошлое, как груб и прочий треш.


Жди 4.5 или откатись до 4.3. В 4.4 сломали сон/гибернацию.


загрузчик не нужен, если это не дуал/трипл-бут

EFI может и дуал/трипл/овер9к-бут. Вон, у меня до недавнего времени было гента в ефи + вынь7 в легаси, и я даже не переключал режимы в настройках матплаты, просто ребутался, и выбирал нужный пункт или пинал bootnext. С UEFI загрузчик — это просто лишняя сущность, если, конечно, вместо EFI не стоит какой-то кастрат, который не умеет меню выбора бутнума и эти самые бутнумы.


ну мне для триплбута (лин, вин, мак) лично удобнее использовать clover, который лежит в efi-разделе, чем какие-то настройки в осях.


Как раз оси трогать не надо вообще. Для легаси ты просто выбираешь диск, на котором лежит выньда, efi просто добавляешь в список efibootmgr'ом каким-нибудь, и забываешь.


Да строчка вроде правильная. А что в логах после неудачного восстановления ( dmesg , journalctl -b )?


Если нужны - могу сделать, просто сразу при загрузке вижу ERROR: resume hibernation device /dev/mapper/lvmvg-swapvol not found , скорее всего этого достаточно.


А как мне правильно тогда удалить граб? Почитал тут, узнал про efibootmgr , будет ли он дружить с люксом и лвм и моим разбиением диска?



А как мне правильно тогда удалить граб?

Читай документацию по грабу. Я до этого юзал lilo, так что ничего не знаю про.

Ещё почитай статейку по ссылке в моём профиле, тебе должно быть интересно.

будет ли он дружить с люксом и лвм

Не знаю, не пробовал. Теоретически, если прописать путь к initramfs в ядро или в опции бутнума через efibootmgr, должно взлететь.

Раздел /boot тебе вообще никуда не упёрся с EFI, лишняя вложенность, практической ценности никакой. Да и какой смысл городить путь в виде /boot/efi/EFI ?


ERROR: resume hibernation device /dev/mapper/lvmvg-swapvol not found

Эта строчка означает, что у тебя внутри initcpio не systemd, что не согласуется с приведённым тобой mkinitcpio.conf.

intelfx ★★★★★ ( 06.02.16 00:02:38 )
Последнее исправление: intelfx 06.02.16 00:03:07 (всего исправлений: 1)


Тут ты прав, он те же параметры будет брать, просто удобнее всё реализовано. Я переставлю, когда граб заработает, он всёравно позволяет и граб пускать тот же, не знал про эту вкусность, не вникал.
Разобрался с некоторыми делами, взял пива и теперь готов разложить всё по полочкам.
Просто вопрос немного осложняется использованием LVM, который лежит поl LUKS, на томе root которого BTRFS + ещё там том SWAP VOLUME.
Т.е., для меня не так просто разобраться в вопросе в данном случае (Systemd), т.к. новые функции почти не задокументированны и вики не обновлено, а гугл нормально не даёт.

Поясню более детально (оговоримся сразу, что я могу использовать путь к device без всяких LABEL и UUID, использование UUID вопрос только усложнит - вдруг я размер изменю томов и он сменится, можно и LABEL конечно, диск основной фиксирован /dev/sda), в том конфиге( cryptdevice=/dev/sda3:lvmvg root=/dev/mapper/lvmvg-rootvol rootflags=subvol=root resume=/dev/mapper/lvmvg-swapwol ), я действую (без Systemd) так:

Далее, когда диск уже расшифрован, я передаю в параметр root= , корневое устройство расшифрованной системы: /dev/mapper/lvmvg-rootvol (это VG-LVNAME (LV NAME можно проверить, введя lvdisplay VG , в моём случае это lvmvg-rootvol )

Гибернация в swap - должен быть использован параметр resume=том_ядра . Это resume=/dev/mapper/lvmvg-swapwol в моём случае.

Правда, это до Нового ядра.

Эта строчка означает, что у тебя внутри initcpio не systemd, что не согласуется с приведённым тобой mkinitcpio.conf

Нет, похоже, не значит. Поясню, mkinitcpio.conf я поправил. Но по линку с форума арча, парень выставляет вместо cryptodevice=, resume=, root= , rd.luks.uuid=, rd.lvm.lv=, resume=, root= и потом только всё работает. Но у меня

Пробовал играть по-разному с параметрами интуитивно, только ломал граб. Вики устарело. Need help.

Читайте также: