update-initramfs не полностью создает initrd для нового ядра

Вопрос или проблема

У меня, похоже, возникла странная проблема при установке нового пользовательского ядра. 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), что указывает на отсутствие необходимых модулей.

Причины Ошибки

  1. Недостающие Модули: Ошибка No such file or directory говорит о том, что initramfs не может найти определенные модули, необходимые для успешной загрузки системы. Это может возникнуть по причине неправильных настроек конфигурации ядра (в .config файле).

  2. Конфигурация ядра: Обратите внимание на изменения в конфигурации ядра:

    • Включение и отключение опции CONFIG_KERNEL_GZIP может изменить способ сжатия модулей.
    • Изменение настройки CONFIG_MODULE_COMPRESS_XZ на CONFIG_MODULE_COMPRESS_ZSTD также может вызвать различия в создании initramfs.
  3. Версия mkinitramfs: Используемая версия initramfs-tools (0.140) может содержать ошибки, которые потенциально могут вызывать проблемы при создании initrd.

  4. Упаковка Модулей: Если вы используете сжатие ZSTD для модулей, возможно, это приводит к проблемам, из-за специфики сжатия. Это может быть связано с обработкой файлов в mkinitramfs.

Рекомендации по Решению

  1. Отключите Сжатие Модулей: Как указывалось в обсуждении, отключение сжатия модулей путём установки CONFIG_MODULE_COMPRESS_NONE=y может помочь решить проблему. Это гарантирует, что модули льются в initramfs без сжатия, что убирает возможные проблемы совместимости.

  2. Замените Сжатие: Если отключить сжатие нецелесообразно, попробуйте установить другую схему сжатия, такую как CONFIG_MODULE_COMPRESS_GZIP. Проверьте, будете ли вы получать корректное заполнение initramfs при использовании других алгоритмов сжатия.

  3. Проверьте Модули Ядра: Убедитесь, что все необходимые модули для работы с LVM и другими компонентами загружаются в initramfs. Это можно сделать путём редактирования .config и проверки зависимости модулей.

  4. Обновление Пакетов: Убедитесь, что все пакеты, включая initramfs-tools и dpkg, обновлены до последней версии. Иногда проблемы на уровне пакета могут быть разрешены в более новых версиях.

  5. Дебаг: Если все вышеперечисленное не сработало, активно используйте средства отладки. Запустите lsinitrd и внимательно проанализируйте, какие модули включены, а какие отсутствуют. Это может дать дополнительную подсказку о том, что именно идёт не так.

Заключение

Тщательно проанализировав описанную проблему, вы сможете идентифицировать и решить основные причины сбоя при создании initramfs. Отключение сжатия модулей или особенности конфигурации ядра могут значительно упростить процесс. Вам стоит провести тестирование с различными настройками, чтобы оценить, что лучше всего подходит для вашей системы.

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

Капча загружается...