Гибернация — Режим сна.

Установка, настройка, эксплуатация.

Модератор: ROOT

Гибернация — Режим сна.

Сообщение ROOT » 30 июл 2023, 00:25

Оглавление


Темы
 О режиме сна 
 Шаг 1 — Отключение безопасной загрузки UEFI 
 Шаг 2 — Создание раздела подкачки 
 Шаг 2.а — Создание SWAP-файла 
 Шаг 3 — Модификация initramfs 
 Шаг 4 — Модификация параметров запуска ядра 
 Шаг 4.а — Параметры ядра для SWAP-файла 
 Шаг 5 — Перевод системы в ражим сна 
Дополнительные материалы
Монтирование файловых систем
XFS: Файловая система.


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

При использовании твердотельных накопителей гибернация обычно не рекомендуется, связано это с особенностями работы данного режима. Ячейки памяти у SSD имеют ограниченное количество циклов чтения-записи, и гибернация обычно требует записи большого количества данных на диск. Это лишь одна из причин, по которой гибернация была отключена в Fedora. Вот краткое описание других причин:
  • Гибернация в Linux несовместима с безопасной загрузкой
  • Гибернация сложна в реализации и не всегда работает надежно
  • Гибернация требует достаточно большого раздела подкачки (в зависимости от объема оперативной памяти)
  • Сохранение оперативной памяти на диск может быть опасным с точки зрения безопасности, если раздел подкачки не зашифрован
Если активирована функция UEFI Secure Boot, проходит проверка, подписано ли ядро дистрибутива и доверено ли оно, и при нормальной загрузке Fedora. При перезагрузке системы после гибернации все содержимое памяти заменяется образом, ранее хранившимся в пространстве подкачки, который невозможно проверить. Именно поэтому, по крайней мере в настоящее время, гибернация несовместима с безопасной загрузкой в Linux.

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

Для работы гибернации необходимо создать на диске раздел подкачки, размер которого зависит от объема доступной оперативной памяти. Рекомендуемые размеры, предлагаемые Red Hat для включения гибернации, следующие:

ОБЪЁМ RAMПРОСТРАНСТВО ПОДКАЧКИ
≤2 ГБ3X RAM
2GB - 8GB2X RAM
8GB - 64GB1,5X RAM
>64 ГБГибернация не рекомендуется

В последних версиях Fedora инсталлятор Anaconda по умолчанию не создает раздел подкачки, поскольку Fedora перешла на zram. Zram - это модуль ядра Linux, создающий сжатое блочное устройство в оперативной памяти: по сути, когда системе требуется подкачка, вместо того чтобы хранить данные в разделе подкачки на диске, что медленно, она сохраняет данные в оперативной памяти, но сжимает их в блочном устройстве zram. Поскольку оперативная память энергозависимая, блочное устройство zram не может быть использовано для спящего режима, поэтому необходимо создать традиционный раздел подкачки.
Для проверки используется ли zram, можно выполнить следующую команду:
Код: выделить все
swapon --show

Гибернация, несомненно, имеет и свои плюсы, поскольку, как мы уже говорили, является наиболее эффективным режимом энергосбережения. Если мы не против отключения Secure Boot и уверены, что гибернация надежно работает на нашей машине (или хотим ее протестировать), и хотим включить ее в Fedora, то необходимо выполнить несколько шагов, которые мы рассмотрим в этом руководстве.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:11



 Шаг 1 — Отключение безопасной загрузки UEFI 
Для того чтобы отключить безопасную загрузку UEFI, необходимо войти в интерфейс управления настройками прошивки машины. Обычно это делается путем прерывания процесса загрузки на самом раннем этапе, нажатием определенной клавиши, которая может отличаться в зависимости от марки и модели машины. Настройки безопасной загрузки часто находятся на вкладке "Аутентификация" или "Безопасность" в настройках микропрограммного обеспечения машины.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:11



 Шаг 2 — Создание раздела подкачки 
Как мы уже говорили, для работы гибернации необходимо создать на диске "классический" раздел подкачки, если его еще нет. Для создания раздела мы можем использовать нашу любимую утилиту разметки диска. После создания раздела, для того чтобы использовать его в качестве места подкачки, необходимо "отформатировать" его с помощью команды mkswap. Предположим, что наш раздел - это /dev/sda3, тогда выполним команду:
Код: выделить все
mkswap /dev/sda3

Чтобы сразу активировать раздел подкачки, можно воспользоваться командой swapon:
Код: выделить все
swapon /dev/sda3

Нам нужно, чтобы раздел подкачки автоматически включался при загрузке, поэтому необходимо добавить для него запись в файл /etc/fstab. Лучшим способом ссылки на раздел является использование UUID (Universally Unique IDentifier) раздела. Получить который можно с помощью команды lsblk. Предположим, что наш раздел подкачки - это /dev/sda3, и выполним команду:
Код: выделить все
lsblk --noheadings -o UUID /dev/sda3

Запись в fstab для раздела подкачки должна выглядеть примерно так:
Код: выделить все
UUID=<swap-partition-uuid> none swap defaults 0 0

О синтаксисе fstab мы рассказывали в другом руководстве. Здесь можно кратко сказать, что первый столбец записи содержит ссылку на раздел подкачки (в данном случае по его UUID), а второй указывает, куда этот раздел должен быть смонтирован (swap не монтируется, поэтому мы просто использовали в качестве значения "none"). Третий столбец содержит тип файловой системы (swap), четвертый - параметры монтирования (здесь мы использовали значение "defaults"). Пятый столбец содержит булево значение, определяющее, следует ли сбрасывать содержимое файловой системы при загрузке или нет, и, наконец, шестой - порядок проверки файловых систем (значение 0 отключает проверку). После того как мы создали запись в fstab для нашего раздела подкачки, необходимо внести изменения в initramfs.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:12



 Шаг 2.а — Создание SWAP-файла 
В этом руководстве мы покажем, как настроить файл подкачки для спящего режима в Fedora.
Сначала вам понадобится файл подкачки, для этого вы можете выполнить следующие шаги
Код: выделить все
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:14



 Шаг 3 — Модификация initramfs 
Для поддержки выхода из спящего режима нам необходимо изменить конфигурацию dracut таким образом, чтобы модуль "resume" был добавлен в initramfs ядра. Для этого нужно создать новый файл в каталоге /etc/dracut.conf.d/. Здесь мы назовем его resume.conf. Его содержимое должно быть следующим:
Код: выделить все
add_dracutmodules+=" resume "

После сохранения файла необходимо перегенерировать существующие initramfs. Для этого нужно выполнить следующую команду:
Код: выделить все
dracut --regenerate-all --force

Чтобы убедиться в том, что модуль "resume" добавлен в initramfs, можно выполнить команду:
Код: выделить все
lsinitrd -m

Посмотрите на раздел "dracut modules" в выводе, сгенерированном командой. В списке должен появиться модуль "resume":
Код: выделить все
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x 3 root root 0 Oct 28 21:55 .
-rw-r--r-- 1 root root 2 Oct 28 21:55 early_cpio
drwxr-xr-x 3 root root 0 Oct 28 21:55 kernel
drwxr-xr-x 3 root root 0 Oct 28 21:55 kernel/x86
drwxr-xr-x 2 root root 0 Oct 28 21:55 kernel/x86/microcode
-rw-r--r-- 1 root root 208896 Oct 28 21:55 kernel/x86/microcode/GenuineIntel.bin
========================================================================
Version: dracut-055-6.fc35

dracut modules:
systemd
systemd-initrd
systemd-sysusers
nss-softokn
dbus-broker
dbus
i18n
network-manager
network
ifcfg
drm
plymouth
crypt
dm
kernel-modules
kernel-modules-extra
kernel-network-modules
lvm
resume
rootfs-block
terminfo
udev-rules
dracut-systemd
usrmount
base
fs-lib
shutdown
========================================================================

В качестве следующего шага нам необходимо добавить некоторые параметры в командную строку ядра. Давайте посмотрим, как это сделать.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:15



 Шаг 4 — Модификация параметров запуска ядра 
Последнее, что нам необходимо сделать для разрешения гибернации на нашей машине, - это добавить в командную строку ядра параметр "resume", в качестве значения которого будет использоваться ссылка на раздел подкачки. Для этого необходимо изменить файл /etc/default/grub и добавить в GRUB_CMDLINE_LINUX следующее:
Код: выделить все
GRUB_CMDLINE_LINUX="[...] resume=UUID=<swap-partition-uuid>"

Если используется установка LVM или LVM на LUKS, то в командную строку grub необходимо добавить еще один параметр, если он еще не присутствует:
Код: выделить все
GRUB_CMDLINE_LINUX="[...] rd.lvm.lv=<volume_group_name>/<swap_logical_volume_name> resume=UUID=<swap-partition-uuid>"

Как сообщается в конфигурации ядра, директива rd.lvm.lv используется для указания того, какие логические тома должны быть активированы при ранней загрузке. Эта директива может быть указана несколько раз, и если вы используете подобную конфигурацию, то вы должны найти ту же директиву, которая используется для активации логического тома, на котором размещена корневая файловая система.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:15



 Шаг 4.а — Параметры ядра для SWAP-файла 
Далее нам необходимо добавить в GRUB_CMDLINE_LINUX параметры resume и resume_offset, чтобы Grub мог дать команду ядру на возобновление работы из файла подкачки.
Лучше всего добавлять swap-файл по uuid. для выяснения UUID можно выполнив команду:
Код: выделить все
ll /dev/disk/by-uuid

Теперь, если вы используете шифрование LUKS, выберите диск, указывающий на незашифрованный диск или, скорее, устройство, отображенное ядром после того, как оно открыло его с помощью вашей парольной фразы во время загрузки. В моем случае это диск, связанный с dm-1
Параметр resume должен указывать на диск, на котором находится файл подкачки. Имя самого файла подкачки указывать не нужно.
Таким образом, окончательный параметр resume будет имеет вид:
Код: выделить все
resume=/dev/disk/by-uuid/aff8758c-f870-482c-b86f-acb52047868e

Обратите внимание, что имя файла подкачки не нужно. Для этого у нас есть параметр resume_offset. Чтобы найти его, нужно выполнить команду filefrag для файла подкачки следующим образом:
Код: выделить все
filefrag -v /fedora.swap | head -n 4 | tail -n 1 | awk '{print $4}'

Вы должны получить результат похожий на:
Код: выделить все
65536..

Скопируйте это число и добавьте его к параметру resume_offset в grub следующим образом:
Код: выделить все
resume_offset=65536

Таким образом, итоговый GRUB_CMDLINE_LINUX должен иметь вид:
Код: выделить все
GRUB_CMDLINE_LINUX="rd.luks.uuid=luks-2ec7f1a-6f9=b-896-a2-b80e9d2f4 rd.lvm.lv=vgfedora/fedora resume=/dev/disk/by-uuid/03aef3ba-dca1-4cba-a3f5-36c5c0fe948e resume_offset=65536"

Необязательный шаг. Если вы захотите отключить grub2-osprober, то можете добавить строку:
Код: выделить все
GRUB_DISABLE_OS_PROBER=true



После сохранения файла нам необходимо перегенерировать конфигурацию grub, поэтому мы выполняем команду:
Код: выделить все
grub2-mkconfig -o /boot/grub2/grub.cfg
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 01 авг 2023, 23:16



 Шаг 5 — Перевод системы в ражим сна 
Систему можно перевести в спящий режим, выполнив следующую команду:
Код: выделить все
systemctl hibernate

Или выбрав соответствующую кнопку в вашем любимом "Окружении рабочего стола". Также можно в настройках выбрать действие для кнопки "Питание", чтобы при нажатии кнопки компьютер проваливался в сон, а не выключался.
Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 417
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный


Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron