在全新安装的 ArchLinux 上出现“无法找到根设备”

在全新安装的 ArchLinux 上出现“无法找到根设备”

我已经在 MacBook Pro 8,1(15 英寸,如果这对硬件有影响的话)上安装了最新版本的 ArchLinux(2014.06.01),并按照官方安装指南。然而,当我尝试重新启动进入新安装的系统时,它会将我带入恢复 shell:

ERROR: device 'UUID=<snip>' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=<snip>'.
You are being dropped to a recovery shell
    Type 'exit' to try and continue booting
sh: can't access tty: job control turned off
[rootfs /]# 

(我删除了 UUID,因为我不想输入它,但它blkid与安装磁盘给我的 ArchLinux 安装分区的 UUID 相同)

其他 在线的 来源建议这是由于过时的pacmanudev或软件包造成的。但是,他们仅在从工作系统更新内核后才描述此问题,而不是全新安装。我在启动到安装磁盘时从环境中强制重新安装了这些软件包filesystem,但这并没有改变情况。linuxarch-chroot

相反,对我的进行一些实验grub.cfg表明,所抱怨的都是选择使用哪个文件的命令root的参数。事实上,更改为或(两者都描述了 ArchLinux 的安装位置,我之前肯定在另一个发行版中成功使用了第二个版本)分别给出和。此外,GRUB 似乎能够通过 UUID 找到分区,只有 linux 内核抱怨找不到它,因为初始 ramdisk 已正确加载(即这不是如描述的 GRUB 错误linuxvmlinuzroot=UUID=<snip>root=LABEL=ArchLinuxroot=/dev/sda8Unable to find root device 'LABEL=ArchLinux'Unable to find root device '/dev/sda8'这里而是一个Linux错误)。

附注:恢复 shell 受到严重限制,标准输出似乎无法正常工作。尽管如此,它仍然ls有效,并且列出文件会显示一个基本(临时)文件系统,但似乎缺少所有磁盘设备/dev。但是,我不知道这是否是错误的一部分。

这与以下类似,但不同:Linux 启动时找不到根文件系统,因为分区是ext4从一开始。也不完全一样,但也许相关的是无法在 Macbook Pro 7.1 上启动 ArchLinux - 进入恢复 shell但是,在那里,它会进入ramfsshell 而不是rootfsshell,并且错误消息也不同。

答案1

我没有使用正常映像启动,而是使用了后备版本并成功启动了系统。结果发现,由于block mkinitcpio默认映像中缺少钩子(负责块设备),Linux 无法检测到任何驱动器。这是因为它被放置在 之后autodetect/etc/mkinitcpio.conf要解决这个问题,HOOKS=...需要更改该文件中的行,使其block位于 之前autodetect

修复之前:

HOOKS="base udev autodetect block modconf filesystems keyboard fsck"

修复后:

HOOKS="base udev block autodetect modconf filesystems keyboard fsck"

运行mkinitcpio -p linux重新生成initramfs然后永久解决了该问题。

答案2

我遇到了类似的问题,但设置不同。我在虚拟机中使用 ArchLinux,我的引导加载程序是 syslinux。我使用了您的技巧来切换内核钩子顺序,但最终还是进入了 rootfs-shell。

对我来说,解决这个问题的方法是改变APPENDsyslinux.cfg

APPEND root=UUID=<snip>

APPEND root=PARTUUID=<snip>

您可以使用以下命令轻松地将 附加PARTUUID到 ,例如假设您的根分区是syslinux.cfgblkid | grep sda1 | awk '{ print $7 }' >> /boot/syslinux/syslinux.cfg/dev/sda1

之后,您可以使用您最喜欢的文本编辑器将该行移动到适当的空间。

编辑:我刚刚意识到小 awk 脚本中的列号可能会有所不同,因此最好在将其输入到管道之前先查看一下输出syslinux.cfg

答案3

我的 Dell XPS 15 (2021) 也遇到了同样的问题。我通过将SATA/NVMe Operationbios 中的设置从 更改为解决了该问题。RAID OnAHCI/NVMe

答案4

当我将 Arch 安装到闪存驱动器时,我遇到了同样的错误。

我研究了/usr/lib/initcpio/init_functions脚本并找到了该情况的解决方案:

  • 在 initramfs 中挂载所需的分区: mount /dev/sdx8 /new_root/
  • 按 Ctrl+D 启动进入 Linux。
  • 编辑/etc/default/grub,将rootdelay = 90添加到linux命令行:GRUB_CMDLINE_LINUX="rootdelay=90"
  • 更新 grub grub-mkconfig -o /boot/grub/grub.cfg:。

相关内容