Вопрос или проблема
У меня, похоже, возникла странная проблема при установке нового пользовательского ядра. update-initramfs
выдает ошибку во время dpkg -i
:
update-initramfs: Генерация /boot/initrd.img-5.15.7-hardened1-test1
find: ‘/tmp/user/0/mkinitramfs_gHxWMQ/lib/modules/5.15.7-hardened1-test1/kernel’: Нет такого файла или каталога
Генерация конфигурационного файла grub ...
Найдена linux-образ: /boot/vmlinuz-5.15.7-hardened1-r7
Найдены initrd-образы: /boot/initrd.img-5.15.7-hardened1-r7
Найдена linux-образ: /boot/vmlinuz-5.15.7-hardened1-test1
Найдены initrd-образы: /boot/initrd.img-5.15.7-hardened1-test1
Найдена linux-образ: /boot/vmlinuz-5.10.0-10-amd64
Найдены initrd-образы: /boot/initrd.img-5.10.0-10-amd64
готово
Ядро r7
компилируется и устанавливается абсолютно нормально, но test1
устанавливается с ошибкой find: ‘/tmp/user/0/mkinitramfs_gHxWMQ/lib/modules/5.15.7-hardened1-test1/kernel’: Нет такого файла или каталога
. Единственное отличие между .configs следующее:
29c29
< CONFIG_LOCALVERSION="-r7"
---
> CONFIG_LOCALVERSION="-test1"
39c39
< CONFIG_KERNEL_GZIP=y
---
> # CONFIG_KERNEL_GZIP не установлен
45c45
< # CONFIG_KERNEL_ZSTD не установлен
---
> CONFIG_KERNEL_ZSTD=y
787c787
< # CONFIG_MODULE_FORCE_UNLOAD не установлен
---
> CONFIG_MODULE_FORCE_UNLOAD=y
802,803c802,803
< CONFIG_MODULE_COMPRESS_XZ=y
< # CONFIG_MODULE_COMPRESS_ZSTD не установлен
---
> # CONFIG_MODULE_COMPRESS_XZ не установлен
> CONFIG_MODULE_COMPRESS_ZSTD=y
Я даже попробовал немного более новое ядро (5.15.27) и более старое (5.10.104) с теми же результатами. Пытаясь загрузиться с ядром, компьютер переходит в режим initramfs
(без функциональности USB-клавиатуры) после неудачной попытки найти корневой LVM.
Размеры initrd-образов также очень разные при минимальных изменениях:
9.7M initrd.img-5.15.7-hardened1-r7 (работает)
9.1M initrd.img-5.15.7-hardened1-test1 (сломано)
Сравнение между двумя с помощью lsinitrd
дает следующее, что говорит о том, что initrd действительно не хватает большого количества модулей.
346,399c346
< 5.15.7-hardened1-r7
< kernel
< crypto
< async_tx
< async_memcpy.ko.xz
< async_pq.ko.xz
< async_raid6_recov.ko.xz
< async_tx.ko.xz
< async_xor.ko.xz
< xor.ko.xz
< drivers
< ata
< ahci.ko.xz
< libahci.ko.xz
< hid
< hid-generic.ko.xz
< hid.ko.xz
< usbhid
< usbhid.ko.xz
< usbkbd.ko.xz
< input
< keyboard
< atkbd.ko.xz
< mouse
< psmouse.ko.xz
< serio
< serio_raw.ko.xz
< md
< dm-bufio.ko.xz
< dm-crypt.ko.xz
< dm-log.ko.xz
< dm-mirror.ko.xz
< dm-raid.ko.xz
< dm-region-hash.ko.xz
< dm-snapshot.ko.xz
< linear.ko.xz
< multipath.ko.xz
< raid0.ko.xz
< raid10.ko.xz
< raid1.ko.xz
< raid456.ko.xz
< vfio
< pci
< vfio-pci-core.ko.xz
< vfio-pci.ko.xz
< vfio_iommu_type1.ko.xz
< vfio.ko.xz
< vfio_virqfd.ko.xz
< lib
< raid6
< raid6_pq.ko.xz
< virt
< lib
< irqbypass.ko.xz
---
> 5.15.7-hardened1-test1
Кто-нибудь сталкивался с этим ранее? Я нашел один результат через Google, но решения так и не предоставили.
Я использую Devuan Chimaera (на базе Debian 11) с: initramfs-tools=0.140 & dpkg=1.20.9
У меня та же проблема на Debian с ядром 5.16.17. Отключение сжатия модулей решает проблему (вы должны установить CONFIG_MODULE_COMPRESS_NONE=y). Возможно, сжатия, отличные от ZSTD, также работают, но я не проверял.
Ответ или решение
Проблема с созданием initramfs для нового ядра: Причины и Решения
При установке нового пользовательского ядра может возникать ряд проблем, одна из которых связана с неправильным формированием initramfs. В данной статье мы рассмотрим симптомы, причины и пути решения проблемы с командой update-initramfs
, которая выдаёт ошибку о нехватке файлов в процессе установки нового ядра.
Симптомы Проблемы
В вашем случае, при установке нового ядра вы получаете следующую ошибку:
update-initramfs: Generating /boot/initrd.img-5.15.7-hardened1-test1
find: ‘/tmp/user/0/mkinitramfs_gHxWMQ/lib/modules/5.15.7-hardened1-test1/kernel’: No such file or directory
Кроме того, было замечено, что при попытке загрузить ядро система переходит в режим initramfs
, не находя корневую файловую систему LVM. Размеры файлов initrd также различаются: работающий вариант (9.7M) и проблемный (9.1M), что указывает на отсутствие необходимых модулей.
Причины Ошибки
-
Недостающие Модули: Ошибка
No such file or directory
говорит о том, что initramfs не может найти определенные модули, необходимые для успешной загрузки системы. Это может возникнуть по причине неправильных настроек конфигурации ядра (в .config файле). -
Конфигурация ядра: Обратите внимание на изменения в конфигурации ядра:
- Включение и отключение опции
CONFIG_KERNEL_GZIP
может изменить способ сжатия модулей. - Изменение настройки
CONFIG_MODULE_COMPRESS_XZ
наCONFIG_MODULE_COMPRESS_ZSTD
также может вызвать различия в создании initramfs.
- Включение и отключение опции
-
Версия mkinitramfs: Используемая версия
initramfs-tools
(0.140) может содержать ошибки, которые потенциально могут вызывать проблемы при создании initrd. -
Упаковка Модулей: Если вы используете сжатие ZSTD для модулей, возможно, это приводит к проблемам, из-за специфики сжатия. Это может быть связано с обработкой файлов в
mkinitramfs
.
Рекомендации по Решению
-
Отключите Сжатие Модулей: Как указывалось в обсуждении, отключение сжатия модулей путём установки
CONFIG_MODULE_COMPRESS_NONE=y
может помочь решить проблему. Это гарантирует, что модули льются в initramfs без сжатия, что убирает возможные проблемы совместимости. -
Замените Сжатие: Если отключить сжатие нецелесообразно, попробуйте установить другую схему сжатия, такую как
CONFIG_MODULE_COMPRESS_GZIP
. Проверьте, будете ли вы получать корректное заполнение initramfs при использовании других алгоритмов сжатия. -
Проверьте Модули Ядра: Убедитесь, что все необходимые модули для работы с LVM и другими компонентами загружаются в initramfs. Это можно сделать путём редактирования
.config
и проверки зависимости модулей. -
Обновление Пакетов: Убедитесь, что все пакеты, включая
initramfs-tools
иdpkg
, обновлены до последней версии. Иногда проблемы на уровне пакета могут быть разрешены в более новых версиях. -
Дебаг: Если все вышеперечисленное не сработало, активно используйте средства отладки. Запустите
lsinitrd
и внимательно проанализируйте, какие модули включены, а какие отсутствуют. Это может дать дополнительную подсказку о том, что именно идёт не так.
Заключение
Тщательно проанализировав описанную проблему, вы сможете идентифицировать и решить основные причины сбоя при создании initramfs. Отключение сжатия модулей или особенности конфигурации ядра могут значительно упростить процесс. Вам стоит провести тестирование с различными настройками, чтобы оценить, что лучше всего подходит для вашей системы.