Mounting UUID=xxx on /sysroot failed: No Such device - 在 Linux 内核安装后发生

Mounting UUID=xxx on /sysroot failed: No Such device - 在 Linux 内核安装后发生

尝试安装内置内核并重新启动后,我收到错误:

安装:在 /sysroot 上安装 UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c 失败:没有这样的设备

为什么会发生这种情况?我该如何解决这个问题才能正确启动?

关于系统

  • Alpine Linux 3.12_alpha20200319(边缘)——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-virtLINUX vmlinuz
  • 尝试将 VirtualBox 存储控制器切换到 AHCI、virtio-scsi 和 PIIX4。

可能有帮助:

我检查了错误和 extlinux.conf 中指定的 UUID。它标识 /dev/sda3。但是,当我在启动失败后进入紧急恢复 shell 并检查 /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 wap,正在构建的版本是 5.4.30。正在安装的模块被放置到/lib/modules/5.4.30目录中。这导致初始 ram 磁盘 (initramfs) 在没有正确的内核模块的情况下构建,因此无法在启动时加载。

要解决此问题,在构建 initramfs 时安装内核模块后,应使用以下命令:

mkinitfs -o /boot/initramfs-virt 5.4.30

此命令包括 initramfs 中 5.4.30 内核的已安装模块,而不是默认版本uname -r(在本例中为 5.4.31-0-virt)。然后内核能够加载模块 -> 读取磁盘 -> 从所需的磁盘启动。

相关内容