为什么在 Windows 10 安装旁边安装 Ubuntu 后,initramfs 会落入 shell?

为什么在 Windows 10 安装旁边安装 Ubuntu 后,initramfs 会落入 shell?

我已通过 Live USB 在预装 Windows 10 的 ASUS Zenbook 13 UX331UN 上安装了 Ubuntu 18.04 LTS。它是启用安全启动并禁用快速启动的 UEFI 系统。我已经坐在这里好几天了,试图启动 Ubuntu,但没有成功。

fdisk -lu给我以下分区布局

Disk /dev/sda: 477 GiB, 512110190592 bytes, 1000215216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 94F7C923-6092-46D5-AFD6-38F3F4F6096F

Device         Start        End   Sectors   Size Type
/dev/sda1       2048     534527    532480   260M EFI System
/dev/sda2     534528     567295     32768    16M Microsoft reserved
/dev/sda3     567296  946147327 945580032 450.9G Microsoft basic data
/dev/sda4  998576128 1000214527   1638400   800M Windows recovery environment
/dev/sda5  946147328  998576127  52428800    25G Linux filesystem

Partition table entries are not in disk order.

Ubuntu 安装程序创建的文件boot/grub/grub.cfg包含以下用于启动 Ubuntu 的菜单项

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-97209f84-060d-4e49-a790-e9af75f2dc40' {
    ...
    set root='hd0,gpt5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt5 --hint-efi=hd0,gpt5 --hint-baremetal=ahci0,gpt5  97209f84-060d-4e49-a790-e9af75f2dc40
    else
      search --no-floppy --fs-uuid --set=root 97209f84-060d-4e49-a790-e9af75f2dc40
    fi
    linux   /boot/vmlinuz-4.15.0-20-generic.efi.signed root=/dev/sda5 ro  quiet splash $vt_handoff
    initrd  /boot/initrd.img-4.15.0-20-generic
}

但这会导致

ALERT! /dev/disk/by-uuid/97209f84-060d-4e49-a790-e9af75f2dc40 does not exist. Dropping to a shell
initramfs:_

我已经尝试了许多可能的修复方法,包括重新安装 grub、启动修复、手动更改 EFI,但……什么也没有。

作为最后的手段,我尝试使用以下命令从 grub 提示符手动启动 Ubuntu,如许多教程中所述

set root=(hd0,5)
linux   /vmlinuz root=/dev/sda5 ro
initrd  /initrd.img
boot

并且... tada,它启动成功了。

然后我将这些命令采用到 grub.cfg 中,现在菜单条目如下所示

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-97209f84-060d-4e49-a790-e9af75f2dc40' {
    ...
    set root=(hd0,5)
    linux   /vmlinuz root=/dev/sda5 ro quiet splash
    initrd  /initrd.img
}

通过此条目配置,Ubuntu 启动成功。

grub.cfg以这种方式改变是有效的方法吗?我是否必须面对这些更改可能产生的副作用?为什么 Ubuntu 不能自己创建一个工作grub.cfg

更新1

我想我找到了罪魁祸首。

首先,UUID正如 Gilles 已经指出的那样, 是错误的,因此我恢复到原来的状态grub.cfg并将所有出现的97209f84-改为44ada74f-。但尽管如此,它仍然无法启动,因为我仍然得到一个掉落到贝壳上迅速的。为了验证UUID问题,我重新安装了 Ubuntu,现在是UUID一个不同的版本(据我所知,它是在格式化分区时生成的),但现在 grub.cfg 状态UUID正确/dev/sda5。很奇怪。所以这UUID显然不是问题。

其次,我替换set root='hd0,gpt5'set root=(hd0,5)但这似乎也没有什么区别。在第三次尝试时,我将linux命令中的文件名从更改/boot/vmlinuz-4.15.0-20-generic.efi.signed/boot/vmlinuz-4.15.0-20-generic...现在它可以启动。

成功验证文件的存在后,/boot/vmlinuz-4.15.0-20-generic.efi.signed根据此问题的答案,我现在认为系统不信任它:https://askubuntu.com/q/883814/678215

有什么想法为什么/boot/vmlinuz-4.15.0-20-generic.efi.signed不起作用吗?

相关内容