После попытки установить собранное ядро и перезагрузки я получаю ошибку:
монтирование: монтирование UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c в /sysroot не удалось: такого устройства нет
Почему это происходит? Как это исправить, чтобы загрузка прошла корректно?
О системе
- Alpine Linux 3.12_alpha20200319 (edge) -- Виртуальная Alpine Linux
- Ядро 5.4.31-0-virt
- Работает внутри VirtualBox
Этапы сборки ядра
wget https://mirrors.edge.kernel/pub/linux/kernel/v5.x/linux-5.4.30.tar.xz
tar -xf linux-5.4.30.tar.xz
cp /boot/config-virt /home/name/build/.config
make -C /home/name/linux-5.4.30 O=/home/name/build listnewconfig
make -j4 -C /home/name/linux-5.4.30 O=/home/name/build
cd /home/name/build
make modules_install
В следующих шагах я не уверен:
cp System.map /boot/System.map-virt
cp arch/x86_64/boot/bzImage /boot/vmlinuz-virt
cp .config /boot/config-virt
Я не запускаю, make install
потому что он проходит arch/x86/boot/bzImage. Из-за этого я ПРЕДПОЛАГАЮ, что он устанавливает 32-бит и 64-бит. Поэтому я пытаюсь установить вручную.
Мой файл extlinux.conf:
DEFAULT menu.c32
PROMPT 0
MENU TITLE Alpine/Linux Boot Menu
MENU HIDDEN
MENU AUTOBOOT Alpine will be booted automatically in # seconds
TIMEOUT 30
LABEL virt
MENU LABEL linux virt
LINUX vmlinuz-virt
INITRD initramfs-virt
APPEND root=UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c moudles=sd-mod,usb-storage,ext4 quiet rootfstype=ext4
MENU SEPARATOR
Попытки исправления
(Все нижеперечисленное приводит к той же ошибке)
- Запуск
mkinitfs
в/
каталоге перед перезагрузкой - Бег
extlinux --install /boot
- Вместо этого запустите
make install
в каталоге сборки и измените строку extlinux.confLINUX vmlinuz-virt
наLINUX vmlinuz
- Пробовал переключать контроллеры хранения VirtualBox на AHCI, virtio-scsi и PIIX4.
Может быть полезно:
Я проверил UUID, указанный в ошибке и extlinux.conf. Он идентифицирует /dev/sda3. Однако, когда я вхожу в оболочку аварийного восстановления после неудачной загрузки и проверяю каталог /dev, его там нет. Понятия не имею, почему.
lsmod не показывает загруженных модулей. Я предполагаю, что этого не должно происходить.
Если я продолжу загрузку, введя команду, exit
я получу панику ядра
Файлы
.config -https://github.com/alpinelinux/aports/blob/master/main/linux-lts/config-virt.x86_64
extlinux.conf -https://pastebin.com/QMkePsqS
mkinitfs.conf -https://pastebin.com/rksn7GcN
решение1
Как упоминалось в посте,
lsmod не показывает загруженных модулей. Я предполагаю, что этого не должно происходить
проблема была в том, что модули не загружались в ядро. Текущая версия работающего ядра была 5.4.31-0-virt wand, а собираемая версия была 5.4.30. Устанавливаемые модули помещались в каталог /lib/modules/5.4.30
. Это привело к тому, что начальный ram disk (initramfs) был собран без правильных модулей для ядра и, следовательно, не загружался при загрузке.
Чтобы исправить это, после установки модулей ядра при сборке initramfs следует использовать следующую команду:
mkinitfs -o /boot/initramfs-virt 5.4.30
Эта команда включает установленные модули для ядра 5.4.30 в initramfs вместо версии по умолчанию uname -r
(в данном случае 5.4.31-0-virt). Затем ядро может загрузить модули -> прочитать диски -> загрузиться с нужного диска.