Настройка гибернации на Ubuntu 24.04 (LVM + swapfile)
Настройка гибернации на Ubuntu 24.04 (LVM + swapfile)#
Недавно мне достался рабочий ноутбук с предустановленной
Ubuntu 24.04.
Система свежая, всё работает стабильно, но гибернация по умолчанию не
была настроена.
Конфигурация ноутбука#
- UEFI
- Secure Boot — отключён
- 32 ГБ RAM
- Корень на LVM (/dev/mapper/ubuntu–vg-ubuntu–lv)
- Без шифрования (без LUKS)
- Без отдельного swap-раздела
Было решено настроить гибернацию через swap-файл без создания дополнительного раздела.
Шаг 1. Создание swap-файла#
Так как RAM — 32 ГБ, был создан swap-файл 36 ГБ:
sudo swapoff -a
sudo fallocate -l 36G /swapfile
Если fallocate не подходит:
sudo dd if=/dev/zero of=/swapfile bs=1M count=36864 status=progress
Далее:
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Добавляем в fstab:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Проверка:
swapon --show
Шаг 2. Получение resume_offset (ключевой момент при LVM)#
Получаем физический offset первого блока swap-файла:
sudo filefrag -v /swapfile | awk '$1=="0:" {print $4}' | sed 's/\.\.//'
или
sudo filefrag -v /swapfile
В выводе нужна строка вида:
0: 123456.. ...
Число 123456 — это и есть resume_offset.
Шаг 3. Получаем UUID корневого тома#
findmnt -no SOURCE /
Пример:
/dev/mapper/ubuntu--vg-ubuntu--lv
Далее:
sudo blkid /dev/mapper/ubuntu--vg-ubuntu--lv
Копируем UUID.
Шаг 4. Настройка GRUB#
Редактируем:
sudo nano /etc/default/grub
Было:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Стало:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=ВАШ_UUID resume_offset=ВАШ_OFFSET"
Применяем:
sudo update-grub
sudo update-initramfs -u
Шаг 5. Проверка поддержки гибернации#
cat /sys/power/state
Если видим:
freeze mem disk
— гибернация поддерживается.
Шаг 6. Тест#
systemctl hibernate
После включения ноутбук восстанавливает предыдущую сессию.
Настройка реакции на закрытие крышки (systemd-logind)#
Редактируем:
sudo nano /etc/systemd/logind.conf.d/lid-action.conf
Меняем параметры:
HandleLidSwitch=hibernate
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=ignore
Перезапускаем сервис:
sudo systemctl restart systemd-logind
Теперь при закрытии крышки ноутбук уходит в гибернацию.
Итог#
- Гибернация работает через swap-файл
- LVM корректно учтён через resume_offset
- Закрытие крышки переводит ноутбук в hibernate
- Отдельный swap-раздел не потребовался