Описание ситуации
После обычного обновления Arch Linux с помощью pacman (хотя чаще я обновляюсь с помощью yay) система обновила ядро, и загрузчик rEFInd начал выдавать ошибку:
Not a valid image
Причина в том, что rEFInd смотрит на файлы в:
/boot/EFI/refind
А pacman или yay туда не копируют обновлённое ядро автоматически.
В итоге rEFInd видит старый или некорректный файл.
Что я сделал
Я написал скрипт и подключил его через pacman hook, чтобы файлы автоматически копировались после каждого обновления пакета linux.
Скрипт: /etc/pacman.d/hooks/copy-kernel.sh
#!/bin/bash
if ! mountpoint -q /boot; then
echo "/boot is not mounted, skipping kernel copy" >&2
exit 0
fi
cp -v /usr/lib/modules/$(uname -r)/vmlinuz /boot/EFI/refind/vmlinuz-linux
cp -v /boot/initramfs-linux.img /boot/EFI/refind/initramfs-linux.img
cp -v /boot/initramfs-linux-fallback.img /boot/EFI/refind/initramfs-linux-fallback.img
Хук: /etc/pacman.d/hooks/copy-kernel.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux
[Action]
Description = Copying kernel and initramfs to EFI partition...
When = PostTransaction
Exec = /etc/pacman.d/hooks/copy-kernel.sh
Почему так происходит
Когда pacman или yay обновляют пакет linux, новые файлы ядра и initramfs кладутся в:
/boot
Но если rEFInd настроен смотреть в:
/boot/EFI/refind
он не находит там свежие файлы, потому что pacman их туда не копирует.
В результате после перезагрузки rEFInd может показывать:
Not a valid image
или просто не загружать систему.
Как это решает проблему
Hook срабатывает после завершения pacman, вызывая мой скрипт, который:
Проверяет, смонтирован ли /boot,
Копирует свежие файлы ядра и initramfs в нужное место, которое использует rEFInd.
После этого при следующей перезагрузке rEFInd видит актуальные образы, и система загружается без ошибок.
Комментарии (4)
CrazyHackGUT
10.05.2025 17:39А у вас кернел что-ли на лету подгружается обновленный, или почему через uname версию дергаете?
Johan_Palych
Надо было просто почитать wiki:
https://wiki.archlinux.org/title/REFInd
https://wiki.archlinux.org/title/REFInd_(Русский)
sergio_nsk
Да ты что, автор даже не осилил блоки кода в редакторе Хабра, а читать wiki - это надо быть сверхразумом.