答案1
您的第一个屏幕截图仅显示“prepare_namespace”和“mount_root”函数是恐慌之前的最后一件事。
第二个有正确的错误消息:
VFS: unable to mount root fs on unknown-block...
我有同样的问题,使用不同的内核;内核恐慌变化很大,具体取决于多么无法内核是。一言以蔽之,它是root=
直接或间接不起作用的基本启动参数。
这里提到一个简单的原因:VFS:无法挂载根目录。这提供了一些背景。
就我而言,这是缺少initrd=
启动参数。最多内核需要 initrd 中的模块来访问磁盘。
我猜您是从带有 slackware 映像的 USB 闪存启动并安装的。所以这只是一个配置问题。
尝试重装4次
我知道你的意思,有时我会尝试第五次,但随后我会尝试采取系统的方法。
以下是我保存的用于从 Uefi Shell 启动 slackware 的两个内核命令行。
slack\huge.s root=/dev/sda2
和
slack\huge.s initrd=slack\initrd.img
但两者都不会那样工作:它需要两个参数才能工作。 Grub 有一条几乎相同的线路。
这有效:
arch5\vmlinuz-linux initrd=arch5\initramfs-linux.img root=/dev/sda3
这也是唯一内置 SSD 模块的内核:
fedora\vmlinuz root=/dev/sda2
slack
,arch5
并且fedora
只是我创建的用于存储内核及其 initrd 的目录。
我看到标签上slackware
写着:基于 Linux 的操作系统。
我完全不同意这一点,这可能听起来很荒谬,因为我想称它为 Linux 发行版。但这个网站叫做 Unix&Linux,而不是 Posix&Distros。
mount_block_root()
有init/do_mounts.c
这个(我删除了#ifdefs):
/*
* Allow the user to distinguish between failed sys_open
* and bad superblock on root device.
* and give them a list of the available devices
*/
__bdevname(ROOT_DEV, b);
printk("VFS: Cannot open root device \"%s\" or %s: error %d\n",
root_device_name, b, err);
printk("Please append a correct \"root=\" boot option; here are the available partitions:\n");
printk_all_partitions();
panic("VFS: Unable to mount root fs on %s", b);
}
if (!(flags & SB_RDONLY)) {
flags |= SB_RDONLY;
goto retry;
}
printk("List of all partitions:\n");
printk_all_partitions();
printk("No filesystem could mount root, tried: ");
for (p = fs_names; *p; p += strlen(p)+1)
printk(" %s", p);
printk("\n");
__bdevname(ROOT_DEV, b);
panic("VFS: Unable to mount root fs on %s", b);
out:
put_page(page);
}
因此,有用的错误消息就在那里,但如果问题是(丢失的)块设备驱动程序/模块本身,它无论如何都会有点破坏 - 我确实因不正确的内核命令行而遇到了各种内核恐慌。