![在全新安装的 ArchLinux 上出现“无法找到根设备”](https://linux22.com/image/1412237/%E5%9C%A8%E5%85%A8%E6%96%B0%E5%AE%89%E8%A3%85%E7%9A%84%20ArchLinux%20%E4%B8%8A%E5%87%BA%E7%8E%B0%E2%80%9C%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E6%A0%B9%E8%AE%BE%E5%A4%87%E2%80%9D.png)
我已经在 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 相同)
其他 在线的 来源建议这是由于过时的pacman
、udev
或软件包造成的。但是,他们仅在从工作系统更新内核后才描述此问题,而不是全新安装。我在启动到安装磁盘时从环境中强制重新安装了这些软件包filesystem
,但这并没有改变情况。linux
arch-chroot
相反,对我的进行一些实验grub.cfg
表明,所抱怨的都是选择使用哪个文件的命令root
的参数。事实上,更改为或(两者都描述了 ArchLinux 的安装位置,我之前肯定在另一个发行版中成功使用了第二个版本)分别给出和。此外,GRUB 似乎能够通过 UUID 找到分区,只有 linux 内核抱怨找不到它,因为初始 ramdisk 已正确加载(即这不是如描述的 GRUB 错误linux
vmlinuz
root=UUID=<snip>
root=LABEL=ArchLinux
root=/dev/sda8
Unable 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但是,在那里,它会进入ramfs
shell 而不是rootfs
shell,并且错误消息也不同。
答案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。
对我来说,解决这个问题的方法是改变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
答案3
我的 Dell XPS 15 (2021) 也遇到了同样的问题。我通过将SATA/NVMe Operation
bios 中的设置从 更改为解决了该问题。RAID On
AHCI/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
:。