如何解决引导进入initramfs提示符和“装载:无法读取'/ etc / fstab':无此文件或目录”和“找不到init”的问题?


25

使用专用于单个分区的GPT分区磁盘安装新系统,该分区为ext4格式,extlinux(版本4.05)作为引导加载程序,Ubuntu Core版本13.10 amd64作为rootfs,而Ubuntu linux-image-3.11.0-18-generic作为内核,和extlinux-update生成引导加载程序配置。

重新引导后(仍在基于KVM的虚拟机中)的结果是(initramfs)提示和以下消息:

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox是v1.20.2。

回归:

  • 文件系统已经过检查 fsck.ext4

检查根是否存在

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

根引导参数

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

检查已加载的模块

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ boot文件夹内容

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

如何使该系统引导至预期的默认bash提示符?


为什么要有两个初始化映像?您能否将其放在实际磁盘上并尝试启动它?Qemu和EFI都有问题-例如,如果您不使用EFI引导固件映像,则根本无法解决问题。
mikeserv 2014年

而且,如果您只需要一个bash提示,就可以始终在initramfs中包括bash ...
mikeserv 2014年

实际上,我记得在Ubuntu中查看过LARGE GPT分区,它们注册为完全空的。在重新启动时按住shift键以获取grub对其活动磁盘的选择之后,我能够选择Efi选项,之后我有了磁盘。
mikeserv

Answers:


11

通过设置root=/dev/sdaX选项来修改您的内核引导参数。sdaX将是您/root分区。下次引导时,您会看到initramfs尝试访问/etc/fstab和装载文件系统之前先尝试装载分区。

有关更多详细信息,请参见问题“ initramfs是否使用/ etc / fstab? ”。


添加root=/dev/sdaX 可以改善这种情况,不再有(initramfs)一个bash登录提示。
Pro Backup

1
除了手动添加root=/dev/sdaX到内核​​引导之外,我需要更新/mnt/etc/default/extlinux并更改EXTLINUX_ROOT=""为建议的内容EXTLINUX_ROOT="/dev/sdaX"extlinux-update再次运行。
Pro Backup

10

您需要了解的initramfs是它是一个文件系统。从内核2.6开始,它基本上是计算机上唯一的内核附加文件系统(不包括VFS,可以说它也是文件系统)。您initramfs image是磁盘映像。

在您的initramfs image掌握范围之内,您的分发所决定的任何文件对于在找到根磁盘之前都至关重要。通常是Busybox,以及查找和安装根设备所需的任何内核模块。这对您不起作用。

考虑到所有因素,这里没有真正的谜。如果您可以在终端提示附近找到自己的出路,则可以浏览“ initramfs.但是”,首先您必须使其神秘化。

首先也是最重要的-这只是/.Linux根执行Linux根类型的事情。实际上,如果它与内核位于单独的文件中,则实际上它已经是您的第二个根设备。每个Linux内核都包含一个基本为空的内核/,首先将其挂载,然后再拉入initramfs.

更重要的initramfs真正的根源。Linux内核通过执行init并随后放弃对以后可能遇到的任何问题的所有责任来初始化用户空间。您init似乎就像是Busybox一样,这意味着控制其动作应该与编辑其随附的Shell脚本一样简单。

那么,为什么找不到错误的错误init?几乎是指一个程序,该程序通过shell脚本指示init其实际init执行自己的名字。

对我来说,最令人惊讶的是,内核伪文件系统-- dev sys proc不挂载。这是非常麻烦的还是很好的线索。您提到过KVM,这使我对内核功能提出了质疑,但是在我们走这条黑暗而坎ru的道路之前,我们可以先尝试其他方法吗?

cd /root || mkdir /root

令我震惊的是错误消息反复出现:

无此文件或目录

失败,您需要重建initramfs图像。引导至活动光盘即可执行此操作,然后运行发行版提供的任何工具来完成此任务。哦,请确保此活动磁盘以EFI模式加载。

因此,这是唯一真正与众不同的事情 initramfs - switchroot.

Linux内核提供了一个非常特殊的syscall,用于早期用户空间并处理从initramfs根磁盘设备的迁移。它的工作原理是先将根磁盘安装到其中的安装点initramfs,然后再将根文件系统旋转到其中。我假设您的initramfs's目标挂载点root基于它不断抱怨的方式。为什么不确保它在那里?

为了进一步调查,您将需要一点坚韧。调整您的引导程序以通过...

init=/bin/sh

...作为内核参数。


...目标挂载点是根...为什么不确保它在那里?我还不知道如何验证这一点。
Pro Backup

您不需要了。您有bash,这意味着您已过去initramfs。但是你还在kvm吗?
mikeserv

是的,我仍然在kvm中。
Pro Backup

@ProBackup如果到了那儿,就需要给另一个人赏金-无论如何,这就是你所说的目标。没关系-您显然已经这样做了。我很想知道为什么需要指定两个init映像-为什么要指定initrd和boot?那是什么?我还想知道,如果有的话,您可以efibootmgr在虚拟机中按提示退出运行。
mikeserv

我为原因提出了一个新的SE问题:unix.stackexchange.com/questions/120999/…注意:我确实认为由于BIOS引导消息,此KVM(Parallels Desktop v8)仅具有BIOS(而不是UEFI)。
Pro Backup

0

我有同样的问题。亚历克斯说的是正确的。首先,我调整了fstab,但这没有帮助。所以,我检查了我的g。如果您有可能访问grub菜单。

  • 选择Linux,要启动的Linux和麻烦的Linux。
  • 按“ e”并查找“ boot_image”或“ boot ... root”。
  • 检查“ uuid ”。
  • 就我而言,这是错误的。我通过键入'blkid'在initramfs中创建图片,并获取安装Linux的uuid。
  • 将正确的uuid从blkid传递到grub-> boot_image。

那解决了我的问题。重新启动后,我的linux需要更长的时间才能开始检查磁盘。但是现在它又可以工作了。

希望我能为您服务。

问候

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.