编辑:再次运行问题 #88384 的答案中的说明,不知怎么的,这次成功了!啊,好吧,有时间一定要发第一篇帖子!
我在使用 Ubuntu 16.04 - Windows 10 双启动时遇到了一些问题,在尝试了一系列“建议”或常见的修复方法后,我没有取得任何进展,我宁愿在可能破坏某些东西之前寻求帮助。
发生了什么
在尝试从故障 SSD 中恢复数据但失败后(将其换成我当前的 SSD 并启动到活动 USB 以查看 SSD 是否可在 gparted 中发现),我更换了具有正常工作的双启动功能的当前 SSD。当我启动系统时,它直接进入 Windows 而不显示 grub 菜单,这是它以前从未做过的。在磁盘管理器中,Windows 认为 C: 驱动器分区占据了 SSD 的大部分空间(见图 1)
我尝试过的方法
- 在启动菜单和 BIOS 中
- 启动菜单中没有列出 ubuntu
- 仔细检查 BIOS 设置是否仍然正确(AHCI、安全启动关闭等)
- ubuntu 的启动顺序中没有选项
- 尝试启动
UEFI: CX2-8B256-Q11 NVMe LITEON 256GB, Partition 2
但没有成功 -> 只是带我进入 Windows
- 在 Ubuntu 16.04 的 Live USB 上
- 按照这里接受的答案 [1] 毫无效果
- 按照社区帮助网站上的说明运行 Boot-Repair
- 安装启动修复并运行命令
boot-repair
- 从 GUI 中选择“推荐修复”并出现以下错误:
GPT detected. Please create a BIOS-Boot partition (>1MB, unformatted filesystem, bios_grub flag). This can be performed via tools such as Gparted. Then try again.
由于我不太确定它想让我做什么,所以我还没有尝试弄乱我的分区表。 - 从 GUI 中再次选择“创建 BootInfo 摘要(通过电子邮件或论坛获取帮助)”选项。我浏览了一下输出 [2],我可以理解其中的一些内容,但不幸的是,我有点力不从心
- 安装启动修复并运行命令
我将非常感激任何能给我的帮助。
编辑:所以显然我不能发布超过 2 个链接,所以这里完全不是链接:
[1] askubuntu 问题 #88384 如何修复 grub-如何在安装 windows 后恢复 ubuntu
[2] pasteDOTubuntuDOTcom/25585747/
链接
结论:
- 取出正常工作的 SSD 并重新放入
- 没有 grub 引导加载程序
- BIOS 中没有列出 Ubuntu
- 尝试了一些来自论坛的修复方法但没有用
- 启动修复不起作用 - 现在需要帮助 :/
附言尽管这显然令人沮丧,但这个过程却令人着迷且具有教育意义,所以如果你能抽出时间,不仅帮助解释如何做,还解释为什么,甚至只是在这里或那里放几个链接以供额外阅读,那就太棒了!如果有什么有用的信息可以添加或不添加,请告诉我。
哇哦!第一篇帖子 = 完成
答案1
我不是 100% 清楚你做了什么;然而......
- 在 EFI 下,引导加载程序的信息存储在 NVRAM 中。此信息包括指向磁盘、分区和保存它们的文件名的指针,以及固件尝试启动它们的顺序。
- 许多(但不是全部)基于 EFI 的计算机“有用地”从 NVRAM 中删除无效的引导加载程序条目。因此,如果您拔下磁盘并打开计算机电源,其引导条目可能会消失。这可能至少是您所遇到的情况的一部分。
- 所有 EFI 都支持后备引导加载程序文件名
EFI/BOOT/bootx64.efi
(在 x86-64/X64/AMD64 计算机上),如果所有基于 NVRAM 的条目都无法启动,则会启动该文件名。许多操作系统(包括 Windows)都将其引导加载程序的副本放在此位置。此功能和下一个功能可以掩盖前一个功能引起的问题,尤其是在仅使用 Windows 的计算机上;但在双启动情况下,您想要控制启动过程的引导加载程序必须处于后备位置,此功能才能执行您想要的操作。 - 一些 EFI 包含 Windows 引导加载程序 (
EFI/Microsoft/Boot/bootmgfw.efi
) 作为一种辅助后备引导加载程序,如果常规后备引导加载程序不起作用(或在常规后备引导加载程序之前尝试),则会启动它。 - 根据操作方式,克隆磁盘可能会也可能不会使克隆磁盘可引导(如果您将其从原始磁盘中交换出来)。NVRAM 中的引导加载程序引用可能与新磁盘上的引用不匹配,因为它可能未被复制,因为分区号不同,或者因为分区的 GUID 可能不同。
- 有时基于 NVRAM 的启动变量可能会损坏,或者尝试添加新条目可能会失败。这可能会导致全新安装的操作系统无法启动,即使之前的安装成功。有时使用固件设置实用程序的选项将所有变量重置为默认值可以解决问题,但这不会让新条目奇迹般地出现;您仍然必须创建新条目。
- 在 Ubuntu 中可以使用 创建新的 NVRAM 条目
efibootmgr
,在 Windows 中可以使用bcdedit
或简易UEFI,在 EFI shell 中使用bcfg
,或者以其他方式。 - 控制启动模式至关重要。在 Boot Repair 中,你收到的创建BIOS 启动分区表示您以 BIOS/CSM/legacy 模式启动,因此无法修改 EFI 模式 NVRAM 启动变量。必须以 EFI/UEFI 模式启动来修改这些变量。请参阅我的这个页面有关控制启动模式的信息。
听起来这些因素的某种组合导致您的新磁盘无法启动。根据详细信息,您可能可以通过efibootmgr
Linux 紧急磁盘的 EFI 模式启动来修复它。以下命令应该有效:
sudo efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L ubuntu
此命令为on创建新的ubuntu
启动项。您必须根据系统的需要更改选项。还请注意,使用双反斜杠 ( ) 作为选项的目录分隔符,但使用正斜杠 ( ) 作为传递给选项的设备说明符。EFI/ubuntu/shimx64.efi
/dev/sda1
\\
-l
/
-d
启动修复工具将执行此操作,并安装或重新安装 GRUB;但是,如上所述,您似乎是在 BIOS 模式下启动修复磁盘,而不是在 EFI 模式下启动修复磁盘。
另一个选择是使用我的rEFInd 启动管理器在 USB 闪存驱动器或 CD-R 上。它仅在 EFI 模式下启动,因此如果您可以启动 rEFInd,并且它成功启动 Ubuntu,您将处于 EFI 模式。然后您可以使用efibootmgr
、运行 Boot Repair 或安装 rEFInd PPA 或 Debian 包来恢复系统可启动性。
所有这些都假设你唯一的问题是引导加载程序丢失或损坏。如果你的操作系统需要重新安装,那就完全是另一回事了。
有关 EFI 模式启动的更多信息,请阅读以下一篇或多篇文章:
- Adam Williamson 的博客文章介绍了 EFI 的工作原理—— 本页描述了 EFI 模式启动背后的理论。
- Superuser.com 上关于 BIOS 和 EFI 启动之间的区别的问答—— 这提供了前面内容的基础,但更加简洁。
- 我的关于在 EFI 系统上安装 Linux 的页面—— 与 Adam Williamson 的博客相比,此页面对 EFI 模式启动进行了更实用的介绍。
- 我的 Linux EFI 引导加载程序页面—— 本页介绍了 Linux 系统的 EFI 引导加载程序选择。
- 我的 CSM 页面——本页介绍了 CSM,包括它何时有用以及何时没用。
- Ubuntu 社区 wiki 中有关 UEFI 的条目-- 这个页面有点脱节,但却是针对 Ubuntu 的 EFI 及其问题最具体的介绍。