hibernate.md 5.5 KB


title: "Настройка hibernate на linux без использования swap раздела" date: 2022-10-03T13:28:23+03:00

tags: [linux]

Взято отсюда.

Для начала надо проверить поддержку спящего режима:

systemctl hibernate

Если выдаётся ошибка типа Failed to hibernate system via logind: Sleep verb “hibernate” not supported”, то, скорее всего, в BIOS включён secure boot. Необходимо его отключить.

Современные дистрибутивы, как правило, используют swap файл, а не swap раздел.

Настройка файла swap

1. Создать файл нужного раздела

sudo dd if=/dev/zero of=/swapfile count=16384 bs=1MiB

где:

  • bs - размер блока.
  • count - размер файла в количестве размера блока.

В данном примере размер файла будет равен 16 Гигабайт.

2. Дать нужные разрешения

sudo chmod 600 /swapfile

3. Указываем файл как swap

sudo mkswap /swapfile

4. Активировать swap

sudo swapon /swapfile

5. Добавить запись в fstab

Или проверить, что она там уже есть.

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Находим UUID диска и offset файла подкачки

Чтобы найти раздел root выполняем команду:

df -h

находим на какой раздел примонтирован корневой каталог. Например:

max@max-dell:~$ df -h
Файл.система   Размер Использовано  Дост Использовано% Cмонтировано в
tmpfs            1,6G         1,8M  1,6G            1% /run
/dev/sda2        468G          33G  412G            8% /
tmpfs            7,8G          32M  7,8G            1% /dev/shm
tmpfs            5,0M         4,0K  5,0M            1% /run/lock
/dev/sda1        511M          39M  473M            8% /boot/efi
tmpfs            1,6G          60K  1,6G            1% /run/user/1000

Видим, что корень примонтирован к разделу /dev/sda2.

Находим UUID диска командой blkid. Например:

max@max-dell:~$ blkid
/dev/sda2: UUID="9964c46d-d6d7-43c7-b9a9-5fb5844436aa" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="2ded6755-e0f2-4e2f-94b5-2273fc31f526"

Сохраняем в "блокноте" значение UUID.

Командой sudo filefrag -v /swapfile находим физическое смещение swap файла на диске:

max@max-dell:~$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 17179869184 (4194304 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    4095:    1916928..   1921023:   4096:            
   1:     4096..    8191:    1925120..   1929215:   4096:    1921024:

Нужно сохранить значение 1916928 - это физическое смешение файла.

Настраиваем восстановление из файла подкачки в параметрах ядра

sudo vim /etc/default/grub

В параметр GRUB_CMDLINE_LINUX_DEFAULT добавляем следующую строку: resume=UUID=xxx resume_offset=xxx, где меняем соответствующие xxx на ранее сохранённые UUID диска и физическое смещение. Например:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=9964c46d-d6d7-43c7-b9a9-5fb5844436aa resume_offset=1916928"

Обновляем конфигурацию grub:

sudo update-grub

После этого должно гибернация должна заработать, если нет, смотри дальше...

Пересоздаём файлы initramfs

Создаём или открываем файл /etc/initramfs-tools/conf.d/resume:

sudo vim /etc/initramfs-tools/conf.d/resume

Вставляем в него такую же строчку:

RESUME=UUID=9964c46d-d6d7-43c7-b9a9-5fb5844436aa resume_offset=1916928

После сохранения файла пересоздадим initramfs:

sudo update-initramfs -c -k all

Включение пункта "Спящий режим" в меню

Открываем или создаём следующий файл:

sudo vim /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Вставляем в него следующее содержимое:

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

После перезагрузки или перелогинивания должен появится пункт "Спящий режим".