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

hlt*_*hlt 37 linux boot grub arch-linux macbook-pro

我已经按照官方安装指南中的说明在 MacBook Pro 8,1(15 英寸,如果这对硬件很重要)双引导上安装了最新版本的 ArchLinux(2014.06.01)。但是,当尝试重新启动时进入新安装的系统,它让我进入一个恢复外壳:

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 /]# 
Run Code Online (Sandbox Code Playgroud)

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

其他 在线 来源表明这是由于一个过时的pacmanudevfilesystemlinux包。但是,他们仅在从工作系统更新内核后才描述此问题,而不是全新安装。我arch-chroot在引导到安装磁盘时从环境中强制重新安装了这些软件包,但这并没有改变情况。

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

附带说明:恢复外壳受到严重限制,标准输出似乎无法正常工作。尽管如此,ls工作和列表文件显示了一个基本(临时)文件系统,但所有磁盘设备似乎都从/dev. 但是,我不知道这是否是错误的一部分。

这与Linux 启动时找不到根文件系统类似,但不一样,因为分区从一开始就是ext4。也不完全相同,但可能相关的是Unable to boot ArchLinux on Macbook Pro 7.1 - 进入 recovery shell,但是,在那里,它进入ramfsshell 而不是rootfsshell,并且错误消息不同。

hlt*_*hlt 35

我没有使用普通映像启动,而是使用了后备版本并设法启动到系统中。事实证明,由于block mkinitcpio默认映像中缺少钩子(负责块设备),Linux 无法检测到任何驱动器。这是因为它被放置在autodetectin之后/etc/mkinitcpio.conf。要解决此问题,HOOKS=...需要更改该文件中的行,以便blockautodetect

修复前:

HOOKS="base udev autodetect block modconf filesystems keyboard fsck"
Run Code Online (Sandbox Code Playgroud)

修复后:

HOOKS="base udev block autodetect modconf filesystems keyboard fsck"
Run Code Online (Sandbox Code Playgroud)

运行mkinitcpio -p linux以重新生成initramfs然后永久修复了问题。