放弃等待根设备 14.04

放弃等待根设备 14.04

有很多关于如何解决这个问题的答案和教程,但我无法在我的案例中应用任何解决方案。

我的情况如下:

  • 我有完美运行的 Ubuntu 12.04
  • 我已经安装了 Ubuntu 14.04
  • 当我尝试启动 14.04 时发生错误(12.04 运行正常)

我有 14.04 版的 USB 记忆棒和 12.04 版的运行环境,因此我能够应用修复或进一步调试。

跑步sudo grub-update让我:

> Generating grub.cfg ... Found linux image:
> /boot/vmlinuz-3.5.0-52-generic Found initrd image:
> /boot/initrd.img-3.5.0-52-generic Found linux image:
> /boot/vmlinuz-3.5.0-46-generic Found initrd image:
> /boot/initrd.img-3.5.0-46-generic Found linux image:
> /boot/vmlinuz-3.5.0-45-generic Found initrd image:
> /boot/initrd.img-3.5.0-45-generic Found linux image:
> /boot/vmlinuz-3.5.0-23-generic Found initrd image:
> /boot/initrd.img-3.5.0-23-generic Found memtest86+ image:
> /boot/memtest86+.bin Found Ubuntu 14.04 LTS (14.04) on /dev/sda6 
> done

我尝试过的解决方案之一是按下e并将grub menuID 替换为/dev/sda6,但没有任何变化。

是什么导致了这个问题?有没有一种简单的方法可以使用 12.04 修复 grub?


在此处输入图片描述

在此处输入图片描述


在此处输入图片描述 在此处输入图片描述

    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    linux   /boot/vmlinuz-3.5.0-52-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.5.0-52-generic
}
--
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    echo    'Loading Linux 3.5.0-52-generic ...'
    linux   /boot/vmlinuz-3.5.0-52-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-52-generic
--
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    linux   /boot/vmlinuz-3.5.0-46-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.5.0-46-generic
}
--
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    echo    'Loading Linux 3.5.0-46-generic ...'
    linux   /boot/vmlinuz-3.5.0-46-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-46-generic
--
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    linux   /boot/vmlinuz-3.5.0-45-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.5.0-45-generic
}
--
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    echo    'Loading Linux 3.5.0-45-generic ...'
    linux   /boot/vmlinuz-3.5.0-45-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-45-generic
--
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    linux   /boot/vmlinuz-3.5.0-23-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.5.0-23-generic
}
--
    search --no-floppy --fs-uuid --set=root 0970394e-13f2-47c9-979e-c93cb6eef06d
    echo    'Loading Linux 3.5.0-23-generic ...'
    linux   /boot/vmlinuz-3.5.0-23-generic root=UUID=0970394e-13f2-47c9-979e-c93cb6eef06d ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.5.0-23-generic
--
    set root='(hd0,msdos6)'
    search --no-floppy --fs-uuid --set=root ee707b14-31a7-4f86-a6e5-1b9aa38bdd68
    linux /boot/vmlinuz-3.13.0-30-generic root=UUID=ee707b14-31a7-4f86-a6e5-1b9aa38bdd68 ro nomodeset quiet splash $vt_handoff
    initrd /boot/initrd.img-3.13.0-30-generic
}
--
    set root='(hd0,msdos6)'
    search --no-floppy --fs-uuid --set=root ee707b14-31a7-4f86-a6e5-1b9aa38bdd68
    linux /boot/vmlinuz-3.13.0-30-generic root=UUID=ee707b14-31a7-4f86-a6e5-1b9aa38bdd68 ro nomodeset quiet splash $vt_handoff
    initrd /boot/initrd.img-3.13.0-30-generic
}
--
    set root='(hd0,msdos6)'
    search --no-floppy --fs-uuid --set=root ee707b14-31a7-4f86-a6e5-1b9aa38bdd68
    linux /boot/vmlinuz-3.13.0-30-generic root=UUID=ee707b14-31a7-4f86-a6e5-1b9aa38bdd68 ro recovery nomodeset nomodeset
    initrd /boot/initrd.img-3.13.0-30-generic
}
--
    set root='(hd0,msdos6)'
    search --no-floppy --fs-uuid --set=root ee707b14-31a7-4f86-a6e5-1b9aa38bdd68
    linux /boot/vmlinuz-3.13.0-24-generic root=UUID=ee707b14-31a7-4f86-a6e5-1b9aa38bdd68 ro nomodeset quiet splash $vt_handoff
    initrd /boot/initrd.img-3.13.0-24-generic
}
--
    set root='(hd0,msdos6)'
    search --no-floppy --fs-uuid --set=root ee707b14-31a7-4f86-a6e5-1b9aa38bdd68
    linux /boot/vmlinuz-3.13.0-24-generic root=UUID=ee707b14-31a7-4f86-a6e5-1b9aa38bdd68 ro recovery nomodeset nomodeset
    initrd /boot/initrd.img-3.13.0-24-generic
}

答案1

上述错误的两个可能原因是(假设安装没有完全损坏):

a) Grub 没有加载正确的根目录来启动 14.04

b) 14.04 安装的 fstab 和/或 initrd 中的 root 条目已损坏。

鉴于相关评论,原因似乎不太可能是 a)。原因是在 grub 中用 root=/dev/sda6 替换没有帮助。12.04 grub 条目看起来正确,但实际安装的 grub 当前可能来自 14.04(可以从前面 grub 启动页面中显示的条目检查,应该是 14.04,而 12.04 将在备用屏幕中)。因此,可以先尝试用 12.04 grub 替换,如上所述,这可能不是问题所在。从工作 12.04 环境:

sudo grub-install /dev/sda

确认 grub 已设置超时以启用选择选项:sudo gedit /etc/default/grub,GRUB_HIDDEN_TIMEOUT 和 GRUB_TIMEOUT 都应为非零值,例如 10(10 秒超时),然后运行sudo update-grub。重新启动将在前启动屏幕中显示 12.04,而 14.04 将出现在备用屏幕中。如果 14.04 现在可行,那么我们就大功告成了,只需sudo grub-install /dev/sda从 14.04 环境运行即可安装 14.04 的 grub。否则,我们将尝试修复下面提到的 b)。

有两种方法可以解决 b)。一种是从 Live CD 启动,安装现有安装,然后修复它。另一种是从正在运行的 12.04 安装进行修复。我将详细说明第二种方法,尽管第一种选择非常相似,唯一的区别是启动到 Live CD 而不是现有的 12.04 安装。

启动到 12.04 后,首先进入 root shell 以避免重复sudo调用:sudo -i

/mnt/trusty现在我们将在某个地方(比如)安装 14.04 版本,并将chroot14.04 版本安装到其中,这将使 14.04 版本安装成为该 shell 的新根(并有效地使 shell 成为 14.04 版本)。在旧的 Linux 时代,这基本上足以从 shell 在 14.04 环境中操作,但在较新的内核中,大多数设备文件都已/dev变为动态的并被udev守护进程替换,因此需要先手动创建许多东西。但是,对于我们修复 fstab/initrd 的目的来说,它应该没问题。我们仍然必须做几件事来避免警告/错误——复制当前 mtab 并安装 proc。

mkdir /mnt/trusty
mount /dev/sda6 /mnt/trusty
cp /etc/mtab /mnt/trusty/etc/mtab

此时,我们已准备好检查并修复 fstab,然后chroot重新生成 14.04 内核的 initrd 映像。因此,打开它:gedit /mnt/trusty/etc/fstab并检查第一个未注释的行是否具有根 (/) 挂载点的正确 UUID。在本例中,我们已经看到 14.04 的根 /dev/sda6 的 UUID 是ee707b14-31a7-4f86-a6e5-1b9aa38bdd68,因此请检查 fstab 是否也显示相同的内容,否则请更正 UUID,保存 fstab 并关闭。现在我们可以重新生成 initrd:

chroot /mnt/trusty
mount -t proc proc /proc
update-initramfs -k all -c

这应该会结束并且不会出现错误。然后卸载 /proc,退出chroot环境并卸载 14.04:

umount /proc
exit
umount /mnt/trusty

现在重新启动并尝试启动 14.04。如果现在启动正常,则用前面提到的 14.04 的 grub 替换:sudo grub-install /dev/sda来自 14.04 环境。此外,在 14.04 环境中重新生成 initrd 也是一个好主意,以防 chrooted 环境存在一些差异:sudo update-initramfs -k all -c

答案2

我收到了相同的错误消息,但没有任何帮助。就我而言,错误原来是文件系统损坏。无法从磁盘读取。

我通过运行修复了它文件系统检查在我的 Linux 驱动器 (/dev/sdaN) 上使用-F选项。这样,我强制 fsck 检查驱动器是否有错误(而不仅仅是读取上次检查的标志)并手动更正它发现的错误。

错误修复后,我的系统重启后就恢复在线。希望这对您有所帮助。

相关内容