我在如何启动 Linux 时遇到问题。我尝试过,如果只有一个驱动器和一个ESP,则可以成功启动。但我的目标是拥有两个不同的驱动器,并配有各自的 ESP。第一个驱动器适用于带有自己 ESP 的 Windows,第二个驱动器适用于带有自己 ESP 的 Linux。
我这样做是为了即使没有其他驱动器,这些驱动器也可以独立启动。
我所做的就是删除第一个包含 Windows 的驱动器,并在第二个驱动器上安装 Linux。如果第一个驱动器未连接,Linux 将完美启动。
现在我的问题是,如果两个驱动器都连接起来,当我启动到 Linux 时它会告诉我no init found try init=bootargs
,但 Windows 的驱动器启动起来却非常正常。
答案1
该no init found
消息告诉我 Linux 内核已经启动,但无法/sbin/init
在根文件系统上找到,可能是因为它查找了错误的位置。
了解 Linux 引导加载程序设置如何识别根文件系统。通常它是root=
Linux 内核的一个选项。
如果根文件系统被标识为/dev/sdaN
(其中 N 是数字),则它指定 initramfs/initrd 文件中包含的驱动程序首先检测到的磁盘上的第 N 个分区。当您仅连接 Linux 驱动器时,这个假设是正确的,您的系统可以正常启动。但是,当两个磁盘都连接时,首先会检测到您的 Windows 磁盘,并且该root=/dev/sdaN
选项实际上指向错误的磁盘。
解决此问题的最佳方法是以不依赖于磁盘检测顺序的方式指定根文件系统。
在 Linux 中,blkid
以 root 身份运行。它将列出它可以看到的每个磁盘分区以及它们的所有标识符。找到与包含根文件系统的分区匹配的行:它应该UUID=<a long hexadecimal string>
列出一个值。它可能也可能没有LABEL=<a short name>
.还会有一个PARTUUID
并且可能会PARTLABEL
列出一个;别理他们。
在大多数 Linux 发行版中,您可以将该root=/dev/sdaN
选项更改为 形式root=UUID=<the long hexadecimal string form blkid>
。这样,您的根文件系统将通过唯一的文件系统 UUID 而不是通过其检测顺序来明确标识。
由于您没有指定 Linux 发行版的名称和版本,因此我无法准确告诉您应该在哪里进行此修改,因为引导加载程序配置的位置在不同的 Linux 发行版中有所不同。但在现代发行版上,/etc/default/grub
可能是一个不错的猜测。修改后/etc/default/grub
,您通常必须运行一些命令来更新实际的引导加载程序:它可能是update-grub
或grub-mkconfig
或类似的东西。