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


36

我已按照官方安装指南中的说明,通过OSX双启动MacBook Pro 8,1(15“,如果与硬件有关,如果涉及硬件,则是在Windows XP中安装了最新版本的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 /]# 

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

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

取而代之的是,对my进行了一些试验,grub.cfg发现所抱怨的是命令的root参数linux选择vmlinuz要使用的文件。的确,分别更改root=UUID=<snip>root=LABEL=ArchLinuxroot=/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。同样也不完全相同,但可能与以下有关:无法在Macbook Pro 7.1上启动ArchLinux-放入恢复外壳,但是在那里,它放入ramfs外壳而不是rootfs外壳中,并且错误消息有所不同。

Answers:


34

我没有使用普通映像启动,而是使用了后备版本并设法启动到系统中。事实证明,由于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然后永久解决了该问题。


这非常有帮助:)
ajukraine 2014年

这似乎很难重现,我遇到了同样的问题,并已解决,但同一驱动器在另一台PC上运行良好。发生问题的PC是一台比较老的LGA775 PC,使用mbr分区表时不需要上述解决方案。因此,仅在没有UEFI的旧系统上使用gpt分区表时才会出现问题。我不知道Mac是否始终使用EFI,但我想知道您使用的是哪个分区表?
MADforFUNandHappy

已经有一段时间了,MacBook不再可用,但是我相当确定它使用了GPT。
HLT

虽然,我遇到了与OP相同的问题,并且您的答案似乎适用于我,但并不能解决我的问题。
内森·高斯

1

我遇到了类似的问题,但设置不同。我在虚拟机中使用ArchLinux,而我的引导程序是syslinux。我在切换内核挂钩顺序时使用了技巧,但最终还是出现在rootfs-shell中。

什么固定的问题,对我来说是改变APPEND线在我syslinux.cfg

APPEND root=UUID=<snip>

APPEND root=PARTUUID=<snip>

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

之后,您可以使用自己喜欢的文本编辑器将行移动到适当的位置。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.