Страница 1 из 1
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 04:28
bsvsf
При вызове
/lib/systemd/systemd-sleep hibernate выходит ошибка (видна только в режиме отладки):
Код: Выделить всё
systemd-sleep[xxxx]: Error reading from /sys/power/resume_offset: No such file or directory
В результате, гибернация не происходит, сервис
systemd-hibernate.service становится в статус
failed с сообщением об ошибке:
Код: Выделить всё
systemd-sleep[xxxx] Failed to prepare for hibernation: No such file or directory
Анализ исходного кода
sleep.c показал место, где возникает ошибка:
Причина в том, что гибернация производится в раздел (не в файл) и файла
/sys/power/resume_offset не существует.
Как обходное решение можно было рекомендовать создание пустого или содержащего "0" файла
/sys/power/resume_offset, но ядро этого не делает при задании параметра resume_offset=0 (вместо нуля пробовал различные числа). Проверено на ядрах 4.9.155 и 4.9.124
Ещё как вариант, установить другую версию systemd, но не уверен, какие шаги необходимо предпринять для корректного отката/обновления systemd.
P.S. В коде sleep.c от systemd-242 функция configure_hibernation() отсутствует, а код, связанный с усыплением, в systemd-244-245 значительно переработан. Во всех этих версиях описанной проблемы не существует, она есть только в systemd-243.
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 10:15
keleg
только что проверил на релизном ядре 5.4, ошибка не воспроизводится.
/lib/systemd/systemd-sleep hibernate
Suspending system...
System resumed.
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 12:50
bsvsf
Приведите плиз вывод команд:
Код: Выделить всё
systemctl --version
cat /proc/cmdline
cat /proc/swaps
ls /sys/power/
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 14:04
VictorR2007
bsvsf писал(а): 24 апр 2020, 12:50
Приведите плиз вывод команд:
У меня на ядре 5.6 это выглядит так
Код: Выделить всё
victor@asus ~ $ systemctl --version
systemd 243 (243)
+PAM +AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN -PCRE2 default-hierarchy=hybrid
victor@asus ~ $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.6.4-generic-1rosa-x86_64 root=UUID=9790901a-e43a-4b55-b2d4-439c6e28e291 ro splash=silent logo.nologo quiet resume=UUID=7eddbbf7-19c0-4d04-85ad-650520f5ad70
victor@asus ~ $ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 17181692 1024 -2
victor@asus ~ $ ls /sys/power/
disk mem_sleep pm_debug_messages pm_print_times pm_trace pm_wakeup_irq resume state sync_on_suspend wake_unlock
image_size pm_async pm_freeze_timeout pm_test pm_trace_dev_match reserved_size resume_offset suspend_stats/ wake_lock wakeup_count
victor@asus ~ $
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 14:27
mikhailnov
bsvsf писал(а): 24 апр 2020, 04:28
Во всех этих версиях описанной проблемы не существует, она есть только в systemd-243.
Как вы это узнали?
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 14:43
bsvsf
ваше ядро создаёт файл
resume_offset, поэтому ошибка не возникает, приведите ещё вывод команды для ясности:
mikhailnov писал(а): 24 апр 2020, 14:27
Как вы это узнали?
в результате анализа исходного кода различных релизов systemd
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 15:02
VictorR2007
bsvsf писал(а): 24 апр 2020, 14:43
приведите ещё вывод команды для ясности:
Код: Выделить всё
victor@asus ~ $ cat /sys/power/resume_offset
0
victor@asus ~ $
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 15:11
bsvsf
Спасибо, "0" в файле /sys/power/resume_offset это как раз то, чего я безуспешно пытался добиться от ядра линейки 4.9.
Значит, буду обновлять ядро до 5.4, но это будет костыль, а не решение, т.к. проблема кроется именно в глючном systemd-243.
P.S. Код гибернации в systemd-244 в значительной степени переработан и улучшен, а в systemd-245 его ещё дошлифовали.
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 24 апр 2020, 23:15
mikhailnov
Звучит как причина обновить systemd, но надо бы еще причин собрать, т.к. при его обновлении можно во что-нибудь неприятное вляпаться.
При желании можете попробовать бекпортировать коммиты, делающий нужные вам правки.
Для этого склонируйте git, в котором есть все патчи из пакета
https://abf.io/import/systemd
Код: Выделить всё
git clone https://github.com/mikhailnov/systemd -b rosa-v243
и в нем git cherry-pick необходимые коммиты.
Затем включим ваши бекпорты в пакет.
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 27 апр 2020, 09:58
bsvsf
этот пункт прошел успешно.
mikhailnov писал(а): 24 апр 2020, 23:15
git cherry-pick необходимые коммиты
Выбрал несколько коммитов, в которых проблема точно исправлена, но далее, вне моих познаний:
Ещё несколько коммитов (возможно, неверно выбраны):
https://github.com/systemd/systemd-stab ... 8ac1e3d6b7
https://github.com/systemd/systemd-stab ... 1ce7c3106c
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 27 апр 2020, 11:52
bsvsf
Нашел дату и обстоятельства, при которых проблема была привнесена:
https://github.com/systemd/systemd/pull/12760
Пост от 25 июня 2019 года со ссылкой на коммит
https://github.com/systemd/systemd/comm ... d0281cb6a4
Странно, что тогда в обсуждениях никто не обратил внимание, что файла /sys/power/resume_offset может не существовать и это не является ошибочным состоянием, препятствующим гибернации.
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 29 апр 2020, 00:14
mikhailnov
bsvsf писал(а): 27 апр 2020, 09:58познаний
bsvsf писал(а): 27 апр 2020, 09:58
Выбрал несколько коммитов, в которых проблема точно исправлена, но далее, вне моих познаний:
Тут надо открыть файл src/shared/sleep-config.c, конфликты в нем будут помечены примерно так:
====
текст
<<<<
Оставить правильный вариант, затем:
git add .
git commit -a
Если там добавится то, чего явно нет в коммите, с которым работаете, например, если тот коммит изменяет пару строк, а у вас целая новая функция появилась, то значит надо предварительно какие-то еще коммиты затащить, сделав git cherry-pick --abort для отмены применения текущего коммита.
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 30 апр 2020, 05:00
bsvsf
В итоге, обновил ядро до 4.15.0
Данная версия по-умолчанию создаёт файл /sys/power/resume_offset с "0" в качестве содержимого. Гибернация работает.
Всем спасибо за участие!

В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 09 май 2020, 09:47
Гость 25
Вот не зря в версии Росы R-11 ядро до сих пор 4.15.
С ядрами версий выше не все так ладно. Вот например как здесь
В Systemd-243 поломана гибернация на swap-раздел
Добавлено: 09 май 2020, 09:51
Гость 25
Кстати как откатить ядро более позднее на более раннее? Знаю как обновить ядро до более нового. А вот как с более нового (если вдруг что то не так на новом) вернуться на старое? (если например уже успел почистить от старых ядер командой sudo urpm-package-cleanup --oldkernels)