Не удалось смонтировать UUID=xxx в /sysroot: такого устройства нет. Возникает после установки ядра Linux.

Не удалось смонтировать UUID=xxx в /sysroot: такого устройства нет. Возникает после установки ядра Linux.

После попытки установить собранное ядро ​​и перезагрузки я получаю ошибку:

монтирование: монтирование 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.conf LINUX 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). Затем ядро ​​может загрузить модули -> прочитать диски -> загрузиться с нужного диска.

Связанный контент