我运行 Ubuntu 的笔记本电脑上的硬盘由于年限太长和过去的大量使用而坏了,但在它完全坏掉之前,我设法创建了持久的 live-usb 闪存盘作为临时系统使用。这个解决方案很有效,我通过 usb 盘运行系统一个月左右。现在我有了 1000GB 的外部硬盘,想在上面安装全新且功能齐全的系统。因为我已经有了持久的 live-usb 盘,所以安装新系统是我的主要选择,所以我运行 live usb 模式,插入外部驱动器,并分配分区,如下所示:
Gparted 窗口
我进行了安装(Ubuntu MATE 16.04),完成后关机,移除 USB 记忆棒但保留外部硬盘并打开笔记本电脑。检查 BIOS 设置并确保它检测到外部驱动器并可以从中加载后,我将其置于启动优先级之上并重新启动。
什么也没发生,系统没有加载,只是黑屏,看起来它试图从损坏的旧硬盘而不是新硬盘加载。我插入 USB 记忆棒,从闪存驱动器加载 Grub,进入控制台模式并尝试手动从外部硬盘启动以检查它是否安装正确,通过在 grub 控制台中运行以下命令:
set root=(hd0,msdos5)
linux /vmlinuz root=/dev/sda5 libata.force=1:disable
initrd /initrd.img
boot
强制是禁用旧的坏掉的硬盘,因为否则它只会继续减慢速度,并浪费自身。
运行这些命令后,系统完美地从外部硬盘加载,并且符合预期,所以我想问题出在 bootloader\grub 的某个地方。我做了一些谷歌搜索,试图在 /etc/defaults/grub 中注释 grub 菜单跳过:
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=false
并运行 update-grub,但没有帮助。
我也尝试运行 grub-install,但没有效果 - 系统拒绝从外部硬盘加载 grub。
我不明白问题出在哪里,因为笔记本电脑可以从装有相同版本系统的 USB 记忆棒运行,所以我从 USB 记忆棒打开 EFI 分区并尝试查看有什么不同,而 live-usb EFI 分区的结构如下:
boot
> grub
[more files]
> memtest
[more files]
EFI
> BOOT
bootia32.efi
bootx64.efi
> ubuntu
[more files]
安装后外部硬盘上的 EFI 分区如下所示:
EFI
> ubuntu
[same files as in EFI/ubuntu on live-usb]
因此安装后硬盘上没有 BOOT 文件夹。在谷歌上搜索 UEFI 后,我在维基百科上找到了以下内容:
https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Booting
这种自动检测依赖于操作系统加载程序的标准化文件路径,路径因计算机架构而异。文件路径的格式定义为 /BOOT/BOOT.EFI;
所以我刚刚将 BOOT 文件夹从 live-usb 复制到我挂载的 /boot/efi 分区中的同一个 EFI 文件夹,移除了 usb 棒并重新启动。
完成该步骤后,笔记本电脑实际上从外部硬盘启动了,并且 grub 控制台立即向我问好。通过像以前一样从 usb 驱动器手动运行 linux-initrd-boot 链,我能够毫无问题地启动 Ubuntu。
这让我能够从外部硬盘实际启动到 linux,但不知道哪里出了问题以及如何修复它。查看了驱动器上 efi 的 boot/grub 内容后,我意识到 grub.cfg 和所有内容的位置很漂亮,因此考虑到我已经从中复制了启动 efi 文件,我在我的 EFI 分区中创建了启动文件夹并将 /boot 的内容从外部硬盘上的安装复制到它,所以我的 /boot/efi/boot 是 /boot 的副本。重新启动系统后,它实际上按预期工作,它加载了标准 ubuntu 主题 grub 并选择加载 Ubuntu,系统正常工作。
虽然它让我的系统可以正常工作,但我不得不手动摆弄它以及它的工作方式,这根本不好。
所以我的问题是,在我的情况下 UEFI 安装有什么问题,为什么没有 /EFI/BOOT 它就无法加载,为什么安装没有创建它,以及如何正确修复所有问题?