Использование гибернации на Linux с задействованием swap-файла.

28. февраля 2023 Linux 0

Вступление.

Официальная справка:

Использование режима сна (гибернации) при задействовании swap в виде файла, а не раздела, имеет ряд нюансов и требует предварительной настройки. О ней и пойдёт речь в данной заметке.

Пример подготовки использования гибернации со swap-файлом, описываемый в заметке, основан на ALT Workstation K 10.1 с файловой системой ext4.

О непосредственном создании swap в виде файла можно посмотреть здесь: https://noostyche.ru/blog/2020/07/21/ispolzovanie-swap-fayla-vmesto-swap-razdela/

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

Примечание: При наличии нескольких swap-фалов или разделов для гибернации допустимо использовать только один swap-файл.

Внесение сведений о swap-файле в загрузочную запись GRUB.

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

Перейти в режим суперпользователя и выполнить все последующие команды:

su -

Определить UUID у swapfile:

findmnt -no UUID -T /swapfile

-n — убрать из вывода информацию о заголовках столбцов.

-o — столбец, из которого нужно вывести информацию. В данном случае это UUID.

-T — принимает путь до конкретной файловой системы.

В выводе окажется строка подобного вида:

bc08b765-a084-4418-9a9b-b9b4d49eb6bc

Определить смещение заголовка относительно начала раздела:

filefrag -v /swapfile

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

Это значение будет использоваться для параметра resume_offset.

Вся необходимая информация по swap-файлу собрана, теперь её необходимо внести в /etc/default/grub, добавив полученные значения UUID и physiscal_offset в строку GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=bc08b765-a084-4418-9a9b-b9b4d49eb6bc resume_offset=139264 quiet splash"

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

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

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

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

echo 'RESUME=UUID=bc08b765-a084-4418-9a9b-b9b4d49eb6bc resume_offset=139264' | tee -a /etc/initrd.mk

После требуется пересоздать загрузочный образ, чтобы в него вошли указанные данные. Это можно осуществить с помощью утилиты make-initrd. Более подробно о ней можно почитать здесь: https://www.altlinux.org/Make-initrd

Образ будет пересоздан для конкретного ядра, поэтому нужно узнать полное название. Для этого выполнить:

uname -r

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

5.15.96-un-def-alt1

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

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

Обновить загрузочную запись в GRUB:

update-grub

После перезагрузки можно использовать гибернацию (режим сна).


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *