Linux не работает гибернация
Гибернация - это особый вид спящего режима 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.
Читайте также: