Гибернация

Материал из ALT Linux Wiki

Гибернация при использовании swap-файла

Справка от разработчиков ядра Linux:

В отличии от настройки гибернации для swap-раздела, настройка для swap-файла имеет ряд важных нюансов. Кроме указания UUID, требуется указать смещение (physiscal_offset) заголовка файла в файловой системе и записать эту информацию в загрузочный образ initrd.img.

Важные примечания по swap для гибернации:

  • Размер swap-файла должен быть по размеру ОЗУ или несколько больше.
    • Меньший объём допустим, но несёт риск потери данных при использовании гибернации с высокой заполненностью ОЗУ.
    • Если в сценарии использования нередкость высокая заполненность ОЗУ с вытеснением данных в swap, то размер области подкачки стоит сделать больше, чем размер ОЗУ. Это необходимо, чтобы при активации гибернации в момент высокой загруженности уместились данные как из ОЗУ, так и вытесненные в swap. Дополнительный размер потребуется вывести исходя из личного опыта использования системы. Как правило, достаточно +15% к объёму ОЗУ.
  • При наличии нескольких swap-файлов или разделов для гибернации допустимо использовать только одну область подкачки.

Подготовка к использованию гибернации

Заключается в получении UUID и значения смещения заголовка swap-файла относительно начала раздела. Значение UUID будет использоваться для параметра resume=UUID, которое будет помещено в загрузочную запись и загрузочный образ. Значение смещения заголовка требуется для параметра resume_offset, который так же, как и resume=UUID, необходимо указать в загрузочной записи.

Получение сведений об UUID

su-
findmnt -no UUID -T /swapfile
  • -n — убрать из вывода информацию о заголовках столбцов.
  • -o — столбец, из которого нужно вывести информацию. В данном случае это UUID.
  • -T — принимает путь до конкретной файловой системы.

В выводе окажется строка подобного вида: 507c4821-5c4b-4c9c-86c1-81e6d7761607

Определить смещение заголовка swap-файла

Команда на вывод таблицы с искомым значением physiscal_offset:

filefrag -v /swapfile

В выведенной таблице из столбца physiscal_offset взять первое числовое значение, исключая точки:

Altlinux hibernation swap a 10.png

Внесение значений в загрузочную запись

Отредактировать /etc/default/grub, внеся в строку GRUB_CMDLINE_LINUX_DEFAULT параметры resume=UUID и resume_offset с ранее полученными значениями:

GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=507c4821-5c4b-4c9c-86c1-81e6d7761607 resume_offset=11503616 quiet splash"

Примечание: Если по какой-то причине swap-файл был перемещён, потребуется изменить значение смещения на актуальное. Если файл был удалён, а затем пересоздан, то потребуется актуализировать его UUID.

Обновление загрузочного образа initrd.img

Чтобы загрузить операционную систему при выходе из гибернации, ядру на раннем этапе загрузки необходимо получить сведения, откуда загружать данные. Для этого необходимо внести в загрузочный образ ядра (initrd.img) сведения о UUID и physiscal_offset swap-файла.

Для этого в конец файла /etc/initrd.mk добавить следующую строку:

echo 'RESUME=UUID=507c4821-5c4b-4c9c-86c1-81e6d7761607 resume_offset=11503616' | tee -a /etc/initrd.mk

Теперь необходимо непосредственно пересоздать загрузочный образ, чтобы в него записались указанные значения. Это можно осуществить с помощью утилиты make-initrd. Образ будет пересоздан для конкретного ядра, поэтому нужно узнать полное название. Для этого выполнить:

uname -r

В выводе будет полное название ядра. Пример:

6.1.30-un-def-alt1

Команда на обновление образа:

make-initrd --kernel=6.1.30-un-def-alt1

После успешного завершения операции остаётся обновить загрузочную запись в GRUB:

update-grub

После перезагрузки всё будет готово для использования гибернации.