Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

发布于:2025-07-01 ⋅ 阅读:(23) ⋅ 点赞:(0)

今天在加载 Linux 内核到 QEMU 虚拟机的过程中,遇到了这个错误:“Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)”。

发生这个错误的原因是:在启动时,我没有指定 root 文件系统,也没有提供任何镜像系统,所以导致内核无法找到启动的根文件系统,造成 panic。

今天记录一下这个问题的解决方法。

解决方案

使用 BusyBox 生成一个最小根文件系统 initramfs

一、准备目录结构

mkdir -p initramfs/{bin,sbin,etc,proc,sys,usr/bin,usr/sbin,dev}
cd initramfs

二、准备 init 脚本

创建 init 脚本,这是 initramfs 启动时的第一个程序

cat > init << 'EOF'
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo "==== Initramfs Booted Successfully ===="
exec /bin/sh
EOF

chmod +x init

三、下载并复制静态 BusyBox

sudo apt install busybox-static
cp /bin/busybox bin/busybox
cd bin
for cmd in sh mount echo ls cat dmesg; do
    ln -s busybox $cmd
done

四、创建设备节点

cd ../..
sudo mknod -m 622 initramfs/dev/console c 5 1
sudo mknod -m 666 initramfs/dev/null c 1 3

五、打包 initramfs

cd initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz

其中 initramfs.cpio.gz 就是配合 Linux 内核一起加载的启动盘了。

六、使用 QEMU 启动测试

cd ..

hxc@studyubuntu:~/share$ qemu-system-x86_64 \
> -kernel ./linux-5.10/arch/x86/boot/bzImage \
> -initrd initramfs.cpio.gz \
> -nographic \
> -append "console=ttyS0"

最终看到以下结果,则表示启动成功了。

在这里插入图片描述

后续可以根据需求继续拓展 initramfs。


希望这篇文章能帮你解决相同的问题。

如果你觉得有收获,欢迎点赞、转发或留言交流,谢谢!


网站公告

今日签到

点亮在社区的每一天
去签到