Режим гибернации на Ubuntu 24 со swap-файлом

У тебя Linux и постоянно отвлекают от работы? 😤
Вечный выбор - выключить систему или оставить? 😅
А если сядет батарея? 😳

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

Включаем гибернацию на Ubuntu 24 со swap-файлом

По умолчанию работа режима гибернации отключена в большинстве дистрибутивов Linux, включая Ubuntu.
Проверяем поддержку гибернации в файле /sys/power/state
grep disk /sys/power/state
Файл содержит значение disk, значит ваш система поддерживает режим гибернацию.
Настройка swap-файла
Для правильной работы гибернации необходим достаточный объем пространства в файле подкачки (swap). Рекомендуется иметь размер подкачки равный объему оперативной памяти + 2 Гб или больше.
Ищем swap-файлы
swapon --show
Если раздел подкачки отсутствует или недостаточно велик, удалите его и создайте новый swap-файл нужного размера
Создаём swap-файл
sudo fallocate -l 10G /.swap.img
sudo chmod 600 /.swap.img
sudo mkswap /.swap.img
sudo swapon /.swap.img
Добавьте запись в /etc/fstab для автоматического монтирования swap-файла при загрузке:
echo '/.swap.img none swap sw 0 0' >> /etc/fstab

Настраиваем GRUB и initramfs

Получаем UUID корня и resume_offset
lsblk -f | grep '/$' | awk '{print $4}'; sudo filefrag -v /.swap.img | grep ' 0:' | awk '{print $5}' | sed 's/.$//'
Пример вывода:
bd574196-996a-4c31-8044-e83262cc7c40 # UUID
2199552 # resume_offset
Правим /etc/default/grub
nano /etc/default/grub
Меняем значение параметра GRUB_CMDLINE_LINUX_DEFAULT
Пример:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=bd574196-996a-4c31-8044-e83262cc7c40 resume_offset=2199552"

Значения UUID и resume_offset подставить свои
(Ctrl + o - сохранить, Ctrl + x - выйти)

Создаём /etc/initramfs-tools/conf.d/resume
nano /etc/initramfs-tools/conf.d/resume
Добавляем в файл строку
Пример значения
RESUME=UUID=bd574196-996a-4c31-8044-e83262cc7c40 resume_offset=2199552

Значения UUID и resume_offset подставить свои
(Ctrl + o - сохранить, Ctrl + x - выйти)

Обновляем конфигурацию
update-grub && update-grub2 && update-initramfs -u -k all
Если всё успешно, то перезагружаем систему
reboot
Обязательно проверь и отключи secure boot ⚠️
Активируем гибернацию
sudo systemctl hibernate
Система должна успешно войти в режим гибернации и полностью выключится, дождитесь полной остановки и включите кнопкой питания.

Включаем гибернацию в интерфейсе

Активируем кнопку гибернации

Создаём файл /etc/polkit-1/rules.d/10-enable-hibernate.rules
nano /etc/polkit-1/rules.d/10-enable-hibernate.rules
Вставляем в него следующее
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.hibernate" ||
action.id == "org.freedesktop.login1.hibernate-multiple-sessions" ||
action.id == "org.freedesktop.upower.hibernate" ||
action.id == "org.freedesktop.login1.handle-hibernate-key" ||
action.id == "org.freedesktop.login1.hibernate-ignore-inhibit")
{
return polkit.Result.YES;
}
});
(Ctrl + o - сохранить, Ctrl + x - выйти)

Включаем гибернацию при закрытии крышки ноутбука

Открываем файл /etc/systemd/logind.conf
nano /etc/systemd/logind.conf
Активируем параметр HandleLidSwitch (убираем # в начале) и меняем параметр на hibernate
HandleLidSwitch=hibernate
HandleLidSwitchExternalPower режим при закрытии крышки с подключенным блоком питания, по умолчанию suspend (спящий)
HandleLidSwitchExternalPower=suspend
(Ctrl + o - сохранить, Ctrl + x - выйти)

Включаем гибернации при низком заряде батареи

Открываем файл /etc/UPower/UPower.conf
nano /etc/UPower/UPower.conf
И меняем параметр CriticalPowerAction с HybridSleep на Hibernate
CriticalPowerAction=Hibernate
(Ctrl + o - сохранить, Ctrl + x - выйти)
Подпишись на Linux Spark поддержи канал