尝试安装内置内核并重新启动后,我收到错误:
安装:在 /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-virt
为LINUX vmlinuz
- 尝试将 VirtualBox 存储控制器切换到 AHCI、virtio-scsi 和 PIIX4。
可能有帮助:
我检查了错误和 extlinux.conf 中指定的 UUID。它标识 /dev/sda3。但是,当我在启动失败后进入紧急恢复 shell 并检查 /dev 目录时,它不存在。不知道为什么。
lsmod 显示没有加载任何模块。我认为这不应该发生。
文件
.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)。然后内核能够加载模块 -> 读取磁盘 -> 从所需的磁盘启动。