initrd + rEFInd

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

initrd + rEFInd

Сообщение BratSinot »

Доброго времени суток!

Таки собрался и решил себе все-таки добить загрузку через использование initrd (до этого было все в ядре), но получаю классическую ошибку: Unable to mount root fs on unknown-block(259,7).
initrd собирал так:

Код: Выделить всё

mkinitrd -c -k 5.15.0-rc1 -f ext4 -r PARTUUID=e7b97319-fa30-6844-abf9-aa493a3fd453 -m ext4:evivarfs:vfat -u -o /boot/EFI/Slack64/initrd.gz
Конфиги rEFInd:

Код: Выделить всё

menuentry Slackware {
    loader /EFI/Slack64/vmlinuz-generic
    options "vt.default_utf8=1 rootfstype=ext4 raid=noautodetect root=PARTUUID=e7b97319-fa30-6844-abf9-aa493a3fd453 scsi_mod.use_blk_mq=1 nvidia-drm.modeset=1"
    initrd /EFI/Slack64/initrd.gz
    icon /EFI/refind/icons/os_slackware.png
}
Если пересобрать ядро и встроить ext4, то естественно все загружается.
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1364
ОС: Slackware

Re: initrd + rEFInd

Сообщение UnixNoob »

BratSinot писал:
17.09.2021 17:56
Конфиги rEFInd:
У вас EFI раздел монтируется сразу в корень? У меня он монтируется как /boot/efi/EFI.
Посмотрите вывод df -h.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

UnixNoob писал:
17.09.2021 18:26
У вас EFI раздел монтируется сразу в корень? У меня он монтируется как /boot/efi/EFI.
Посмотрите вывод df -h.
Монтируется в /boot, а (259,7) это корневой раздел (ext4).
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1364
ОС: Slackware

Re: initrd + rEFInd

Сообщение UnixNoob »

BratSinot писал:
17.09.2021 20:27
Монтируется в /boot, а (259,7) это корневой раздел (ext4).
Eсли оно монтируется в /boot, то вам надо указывать не /EFI, а /boot/EFI, или /boot/efi/EFI, в зависимости от того куда у вас оно монтируется. Я у себя не переносил ядра, так гружусь просто с /boot/initrd.gz соответственно и ядро так же.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20725
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: initrd + rEFInd

Сообщение Bizdelnick »

UnixNoob писал:
17.09.2021 22:32
Eсли оно монтируется в /boot, то вам надо указывать не /EFI, а /boot/EFI, или /boot/efi/EFI, в зависимости от того куда у вас оно монтируется.
Это ж для загрузчика указывается, какая ему разница, куда что потом должно смонтироваться. Тем более что по факту не монтируется даже корень.

По теме: видимо, не хватает каких-то драйверов, необходимых для работы самого диска. Не знаю, как такое в слаке отлаживают.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: initrd + rEFInd

Сообщение bormant »

А если вот так?

Код: Выделить всё

-m crc32c:ext4:evivarfs:vfat
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

Bizdelnick писал:
17.09.2021 22:54
По теме: видимо, не хватает каких-то драйверов, необходимых для работы самого диска.
Это, таки, очевидно, вопрос каких. nvme / ahci итак в ядре, ext4 в initrd присуствует. Есть подозрение что он ext4 не подтягивает при загрузке, а т.к. я с initrd / initramfs никогда не работал то и не в курсе что да как.
bormant писал(а):
18.09.2021 07:17
А если вот так?

Код: Выделить всё

-m crc32c:ext4:evivarfs:vfat
crc32c уже в ядре. Попробовал crc32 добавить тоже ничего.

Код: Выделить всё

root@BratSinot linux-5.15-rc1 cat .config | grep CRC32
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32C_INTEL=y
CONFIG_CRYPTO_CRC32=m
CONFIG_CRYPTO_CRC32_PCLMUL=m
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_LIBCRC32C=y
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: initrd + rEFInd

Сообщение bormant »

Ок, не угадал.
Давайте посмотрим на фото экрана, где последней строкой идет
Unable to mount root fs on unknown-block(259,7)

Давайте также посмотрим на выхлоп

Код: Выделить всё

# mount | grep -i efi
В целях тестирования давайте попробуем загрузиться с initrd созданным так (sdXN заменить на актуальное значение):

Код: Выделить всё

# mkinitrd -c -k 5.15.0-rc1 -f ext4 -r /dev/sdXN -m ext4 -u -o /boot/EFI/Slack64/initrd.gz
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

Код: Выделить всё

root@BratSinot PKG mount | grep -i efi
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
На всякий выхлоп mkinitrd:

Код: Выделить всё

root@BratSinot PKG mkinitrd -c -k 5.15.0-rc1 -f ext4 -r /dev/nvme1n1p4 -m crc32:crc32c:ext4:evivarfs:vfat -u -o /boot/EFI/Slack64/initrd.gz
rm: невозможно удалить '/boot/initrd-tree': Устройство или ресурс занято
cat: /boot/initrd-tree/wait-for-root: Нет такого файла или каталога
cp: указанная цель '/boot/initrd-tree/sbin/' не является каталогом
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/ipod-set-info: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/iphone-set-info: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/check-mtp-device: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/check-ptp-camera: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/udev-configure-printer: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/rules.d/60-openobex.rules: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/rules.d/73-seat-late.rules: Нет такого файла или каталога
/sbin/mkinitrd: строка 609: /boot/initrd-tree/lib/udev/rules.d/85-regulatory.rules: Нет такого файла или каталога
grep: /boot/initrd-tree/load_kernel_modules: Нет такого файла или каталога
grep: /boot/initrd-tree/load_kernel_modules: Нет такого файла или каталога
OK: /lib/modules/5.15.0-rc1/kernel/arch/x86/crypto/crc32-pclmul.ko added.
OK: /lib/modules/5.15.0-rc1/kernel/crypto/crc32_generic.ko added.
OK: /lib/modules/5.15.0-rc1/kernel/fs/jbd2/jbd2.ko added.
OK: /lib/modules/5.15.0-rc1/kernel/fs/mbcache.ko added.
OK: /lib/modules/5.15.0-rc1/kernel/fs/ext4/ext4.ko added.
OK: /lib/modules/5.15.0-rc1/kernel/fs/fat/fat.ko added.
OK: /lib/modules/5.15.0-rc1/kernel/fs/fat/vfat.ko added.
cp: не указан -r; пропускается каталог '/sbin'
78660 блоков
/boot/EFI/Slack64/initrd.gz created.
Be sure to run lilo again if you use it.
P.S. Т.к. /boot это FAT32 то я в /boot/initrd-tree монтирую tmpfs при создании initrd.

При указании dev'а ничего не поменялось, все та-же ошибка (фото во вложениях).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: initrd + rEFInd

Сообщение bormant »

Продолжаем наблюдения:

Код: Выделить всё

103:00003	250059096 nvme1n1
(driver?)
...

0800	976762584	sda
driver: sd
Видите? Для sda драйвер у ядра есть, а для nvme -- нет.

Давайте посмотрим на выхлоп

Код: Выделить всё

# /usr/share/mkinitrd/mkinitrd_command_generator.sh -r
Можно заодно попробовать сразу собрать предложенный initrd, затем с ним погрузиться:

Код: Выделить всё

# /usr/share/mkinitrd/mkinitrd_command_generator.sh -r | bash
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

bormant писал(а):
18.09.2021 14:23
Продолжаем наблюдения:

Код: Выделить всё

103:00003	250059096 nvme1n1
(driver?)
...

0800	976762584	sda
driver: sd
Видите? Для sda драйвер у ядра есть, а для nvme -- нет.

Давайте посмотрим на выхлоп

Код: Выделить всё

# /usr/share/mkinitrd/mkinitrd_command_generator.sh -r
Можно заодно попробовать сразу собрать предложенный initrd, затем с ним погрузиться:

Код: Выделить всё

# /usr/share/mkinitrd/mkinitrd_command_generator.sh -r | bash
Я изначально и собирал с выхлопом mkinitrd_command_generator.sh (т.е. с ним тоже ничего не батрачит), это я уже потом модули подчистил. Там одни USB-EHCI да HID'ы:

Код: Выделить всё

root@BratSinot ~ /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 5.15.0-rc1
#
# mkinitrd_command_generator.sh revision 1.45
#
# This script will now make a recommendation about the command to use
# in case you require an initrd image to boot a kernel that does not
# have support for your storage or root filesystem built in
# (such as the Slackware 'generic' kernels').
# A suitable 'mkinitrd' command will be:

mkinitrd -c -k 5.15.0-rc1 -f ext4 -r /dev/nvme1n1p4 -m xhci-pci:ohci-pci:ehci-pci:xhci-hcd:uhci-hcd:ehci-hcd:hid:usbhid:i2c-hid:hid_generic:hid-asus:hid-cherry:hid-logitech:hid-logitech-dj:hid-logitech-hidpp:hid-lenovo:hid-microsoft:hid_multitouch:ext4 -u -o /boot/initrd.gz
Собственно в самосборном ядре (базу .config брал из Slackware) я дополнительно ниего не "вставлял" в ядро. Я там только убирал лишнее и vfat / ext4 в ядро собрал и все. Так то у Slackware в базе что AHCI, что NVME в ядро же вкомпилены:

Код: Выделить всё

root@BratSinot Slack64 cat config-generic | grep NVME
# NVME Support
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_HWMON=y
CONFIG_NVME_FABRICS=m
CONFIG_NVME_RDMA=m
CONFIG_NVME_FC=m
CONFIG_NVME_TCP=m
CONFIG_NVME_TARGET=m
CONFIG_NVME_TARGET_PASSTHRU=y
CONFIG_NVME_TARGET_LOOP=m
CONFIG_NVME_TARGET_RDMA=m
CONFIG_NVME_TARGET_FC=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_TCP=m
# end of NVME Support
CONFIG_RTC_NVMEM=y
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
# CONFIG_NVMEM_NINTENDO_OTP is not set
CONFIG_NVMEM_RMEM=m
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: initrd + rEFInd

Сообщение bormant »

А про какую версию Slackware и mkinitrd мы сейчас ведем речь?
Что нам может дать

Код: Выделить всё

# dmesg | grep -i nvme
И давайте проверим еще одну гипотезу касательно crc32:

Код: Выделить всё

# mkinitrd -m jbd2:mbcache:crc32c_intel:crc32c_generic:ext4 ...
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

bormant писал(а):
18.09.2021 15:09
А про какую версию Slackware и mkinitrd мы сейчас ведем речь?
Slackware64-current, mkinitrd version 1.4.11.
bormant писал(а):
18.09.2021 15:09
Что нам может дать

Код: Выделить всё

# dmesg | grep -i nvme

Код: Выделить всё

root@BratSinot ~ dmesg | grep -i nvme
[    0.313566] nvme nvme0: pci function 0000:02:00.0
[    0.313591] nvme nvme1: pci function 0000:05:00.0
[    0.317200] nvme nvme0: missing or invalid SUBNQN field.
[    0.317210] nvme nvme0: Shutdown timeout set to 10 seconds
[    0.318244] nvme nvme0: 4/0/0 default/read/poll queues
[    0.318850]  nvme0n1: p1 p2
[    0.332697] nvme nvme1: failed to set APST feature (2)
[    0.333539] nvme nvme1: 4/0/0 default/read/poll queues
[    0.335174]  nvme1n1: p1 p2 p3 p4
[    3.695106] EXT4-fs (nvme1n1p4): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[    5.892148] EXT4-fs (nvme1n1p4): re-mounted. Opts: (null). Quota mode: none.
bormant писал(а):
18.09.2021 15:09
И давайте проверим еще одну гипотезу касательно crc32:

Код: Выделить всё

# mkinitrd -m jbd2:mbcache:crc32c_intel:crc32c_generic:ext4 ...
Та же ошибка, проверял (в /boot/initrd-tree проверял что модули есть).
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: initrd + rEFInd

Сообщение bormant »

Не могу не спросить, а со стоковым ядром kernel-generic-5.14.5 ситуация такая же или отличается чем-либо?
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

bormant писал(а):
18.09.2021 21:48
Не могу не спросить, а со стоковым ядром kernel-generic-5.14.5 ситуация такая же или отличается чем-либо?
Ага.

Код: Выделить всё

root@BratSinot /boot /usr/share/mkinitrd/mkinitrd_command_generator.sh -k 5.14.6 -r
mkinitrd -c -k 5.14.6 -f ext4 -r /dev/nvme1n1p4 -m xhci-pci:ohci-pci:ehci-pci:xhci-hcd:uhci-hcd:ehci-hcd:hid:usbhid:i2c-hid:hid_generic:hid-asus:hid-cherry:hid-logitech:hid-logitech-dj:hid-logitech-hidpp:hid-lenovo:hid-microsoft:hid_multitouch:jbd2:mbcache:crc32c_intel:crc32c_generic:ext4 -u -o /boot/initrd.gz
Сейчас еще ради эксперимента попробую только ext4 вкомпилировать в ядро, без других изменений. Если прокатит, гляну что там из зависимостей есть.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: initrd + rEFInd

Сообщение BratSinot »

Ну что-же, если вкомпилировать ext4 в ядро то все грузится. Разница между конфигами:

Код: Выделить всё

root@BratSinot /tmp diff config.m config.k
9055c9055
< CONFIG_EXT4_FS=m
---
> CONFIG_EXT4_FS=y
9059c9059
< CONFIG_JBD2=m
---
> CONFIG_JBD2=y
9061c9061
< CONFIG_FS_MBCACHE=m
---
> CONFIG_FS_MBCACHE=y
9120c9120
< CONFIG_FS_ENCRYPTION_ALGS=m
---
> CONFIG_FS_ENCRYPTION_ALGS=y
initrd для проверки ext4 в виде модуля собирал так:

Код: Выделить всё

root@BratSinot /tmp mkinitrd -c -k 5.15.0-rc1 -f ext4 -r PARTUUID=e7b97319-fa30-6844-abf9-aa493a3fd453 -m ext4:jbd2:mbcache:ecryptfs:efivarfs -u -o /boot/EFI/Slack64/initrd.gz
initrd почему-что модуль не грузит, хотя вроде в скрипте есть.

Код: Выделить всё

root@BratSinot initrd-tree cat load_kernel_modules 
modprobe -v jbd2
modprobe -v mbcache
modprobe -v ext4

modprobe -v efivarfs
Добавлено (11:32):
А, блин, чертово чаклунство -_-"
Ему почему-то не нравится что папка initrd-tree находится с FAT разделе (плевать что там tmpfs или loop с ext4), он свой базовый образ почему-то не распаковывал. Сменил путь на /usr/src/initrd-tree и initrd стал собираться нормально.
А, ну и findfs из busybox не умеет в PARTUUID.

Давно у меня был подобный косяк, если правильно помню это была сборка L4 на Reiser4 разделе.
Спасибо сказали: