不久前我为 Ubuntu 做了一个分区,它运行良好。
我的问题是在尝试安装 burg 后出现的
我跟着 这个 YouTube 视频指南安装 burg,遇到一些问题后,我尝试了以下这篇博文中的说明然后 burg 在测试模式下启动正常,因此我重新启动了计算机以测试 BURG,但在到达 grub/burg 启动屏幕之前,我的计算机在启动过程中进入了硬件诊断模式(这是一台戴尔计算机)。
几次尝试启动电脑失败后,我决定使用 live-usb 重新安装 Ubuntu。重新安装 Ubuntu 时,我决定覆盖现有的 Ubuntu。
安装完成后,我尝试重新启动计算机,出现 GRUB 屏幕,其中只有一个启动 Ubuntu 的选项。
我进入了基本启动菜单,但没找到 Windows。我找不到 Windows 分区。
我扫描了我的分区以了解发生了什么:
我使用了启动修复 - 以下是报告: https://pastebin.com/wh2mPuJX
目前我的 Ubuntu 分区运行良好,但是我的 Windows 分区却无处可寻。
我需要帮助修复我的分区。
编辑:根据用户的回答,我尝试重新启动计算机,然后出现了以下 grub 菜单:
所显示的 efi 文件均未指向 Windows。
答案1
我的诊断
我不能 100% 确定,但我认为发生的事情是这样的:
- 您的计算机出厂时配置为从 GPT 磁盘以 EFI/UEFI 模式启动 Windows (10?)。您的启动修复输出与此类设置非常一致。
- 您安装了 Ubuntu。根据您的描述,这可能是成功的,我猜是在 EFI 模式下完成的。
- 您决定安装 BURG。不幸的是,据我所知,BURG 是一个仅限 BIOS 的引导加载程序。让 BIOS 模式和 EFI 模式安装在现代基于 EFI 的计算机上共存是可能的,但很棘手,而且很少值得付出努力。您的描述清楚地表明您在此步骤遇到了问题,很可能是因为您不了解这种混合模式设置的复杂性。无论如何,BIOS 模式的 BURG 无法启动您的 EFI 模式 Windows 安装;它只能启动 Ubuntu。
- 您运行了 Boot Repair,它似乎重新安装了您的 EFI 模式 GRUB。这部分起作用了,但由于某种原因,它没有检测到您的 Windows 安装。
我想总结一下您的问题,以强调该问题很可能是由于在以 EFI/UEFI 模式启动的系统上尝试安装 BIOS 模式引导加载程序而导致的。几乎所有新计算机都使用 EFI 固件,这一事实对于任何对引导加载程序有所了解的人来说都至关重要,但人们对使用 EFI 的含义仍然知之甚少,并且可能会给人们带来麻烦——尤其是那些尝试在新计算机上安装旧 BIOS 模式工具(如 BURG)的长期多引导程序用户。
最简单的解决方法
最不激进的方法是尝试让 GRUB 完全工作。理论上,它应该被发现,但我想我知道为什么它没有被发现,解决方案相当简单:
- 在您最喜欢的编辑器中打开
/etc/fstab
。(您需要以 的方式执行此操作root
,通常通过 启动编辑器sudo
,如 中所示sudo nano /etc/fstab
。) - 找到开始的行
#UUID=4E1D-DC46
并#
从该行的开头删除字符。 - 保存文件并退出编辑器。
- 类型
sudo mount -a
。 - 检查以确保
/boot/efi
不为空。至少,它应该有一个名为的目录EFI
(或者可能是某个仅包含大小写的变体,如efi
;大小写与应挂载在那里的 FAT 文件系统无关)。如果/boot/efi
为空,则说明存在问题,您应该修复该问题。(请注意,您将无法以普通用户身份访问此目录;您必须使用sudo
或为root
。) - 输入
sudo update-grub
。这将导致重建 GRUB 配置文件。
当您重新启动并且出现 GRUB 菜单时,它现在应该包含一个启动 Windows 的选项。
另外一个选择
如果你不喜欢 GRUB,你可能需要研究一下其他几个 Linux 的 EFI 引导加载程序,总结如下我的这个页面。我从来不是 BURG 用户,但如果你想制作一个更漂亮的引导加载程序菜单,我自己的rEFInd 启动管理器可能对您特别感兴趣。(旧版 rEFIt 可能也很有吸引力,但早已被废弃;我将 rEFIt 分叉到 rEFInd,因为 rEFIt 开发已经停止。)
请注意,您可以在 CD-R 或 USB 闪存驱动器上使用它来测试 rEFInd,而无需完全安装它。 (两者的图像均可在 rEFInd 下载页面上找到。)如果您决定永久使用它,则可以使用 Debian 软件包、PPA 或(如果您运行的是 Ubuntu 17.04 或更高版本)refind
Ubuntu 中的软件包来安装它。
了解更多
我建议您阅读以下一页或多页,以了解有关 EFI 模式启动的更多信息以及 BIOS 模式和 EFI 模式启动如何在单台计算机上交互:
- Adam Williamson 的博客文章介绍了 EFI 的工作原理—— 本页描述了 EFI 模式启动背后的理论。
- Superuser.com 上关于 BIOS 和 EFI 启动之间的区别的问答—— 这提供了前面内容的基础,但更加简洁。
- 我的关于在 EFI 系统上安装 Linux 的页面—— 与 Adam Williamson 的博客相比,此页面对 EFI 模式启动进行了更实用的介绍。
- 我的 Linux EFI 引导加载程序页面—— 本页介绍了 Linux 系统的 EFI 引导加载程序选择。
- 我的 CSM 页面-- 本页介绍了 CSM,包括它何时有用以及何时没用。(CSM 使得 BURG 可以在您的计算机上使用,即使 BURG 最终不会按照您的意愿运行。)
- Ubuntu 社区 wiki 中有关 UEFI 的条目-- 这个页面有点脱节,但却是针对 Ubuntu 的 EFI 及其问题最具体的介绍。
编辑:可能的文件系统损坏
rEFInd 显示 Windows 选项但生成Failed to open
文件消息这一事实表明您的 ESP 可能遭受文件系统损坏。要恢复,我建议:
- 启动到 Ubuntu。
- 备份 ESP 中的所有文件(
/boot/efi
在 Ubuntu 中)。您可以使用cp
、、tar
等zip
。 - 卸载 ESP (
sudo umount /boot/efi
)。 - 输入
sudo dosfsck -a /dev/sda4
。这应该会修复 ESP 上的文件系统。 - 通过键入 重新安装 ESP
sudo mount -a
。 - 检查文件系统是否正常。特别是,检查下的
EFI/refind
、EFI/ubuntu
和EFI/Microsoft/Boot
目录/boot/efi
。它们都应该包含与备份中的文件相匹配的文件。如果没有,那么您的处境就不妙了,应该在 USB 闪存驱动器或 CD-R 上准备好 rEFInd,以便在下一步失败时可以启动 Ubuntu。 - 重新启动。运气好的话,您现在可以从 rEFInd 启动 Windows,尽管 GRUB 还不能启动 Windows。
- 如果您可以启动 Windows,请停止;您就完成了;但如果您无法启动 Windows,请使用 rEFInd 重新启动到 Ubuntu 并继续......
- 卸载 ESP (
sudo umount /boot/efi
)。 - 在 ESP 上创建一个新的文件系统(
sudo mkdosfs -i 4E1DDC46 /dev/sda4
)。使用此命令时要非常小心;如果您指定了错误的分区,您可能会破坏 Windows 或 Ubuntu!请注意,该-i 4E1DDC46
部分将新文件系统设置为使用与旧文件系统相同的 ID 代码(UUID=
中的值/etc/fstab
),这意味着您无需编辑/etc/fstab
。如果省略此部分,则需要编辑/etc/fstab
。 - 键入
sudo mount -a
以在 ESP 上安装新的文件系统。 - 恢复您之前创建的备份。
- 使用 rEFInd 重新启动并重试。
- 如果你仍然无法启动 Windows,那么您可能需要使用 Windows 特定的恢复程序来重新安装引导加载程序。但是,如果您碰巧在问题出现之前有备份,则可以从备份中恢复。
按照此过程操作后,如果您运行sudo update-grub
,GRUB 也可能会开始显示 Windows 选项。
请注意,损坏的 ESP 通常是由于未能禁用 Windows 中的快速启动和/或休眠功能造成的。请参阅这里和这里了解如何禁用这些功能。您应立即禁用它们。
还有一条评论:我注意到您的启动消息显示 rEFInd 已启动EFI\Microsoft\Boot\bootmgfw.efi
,而后者又尝试启动EFI\Microsoft\Boot\grubx64.efi
(Linux 引导加载程序)。您看到bootmgfw.efi
尝试启动grubx64.efi
的最可能原因EFI\Microsoft\Boot
是您使用了 Boot Repair 的“高级”选项卡中的备份和重命名引导加载程序文件的选项。此选项可以解决某些有缺陷的 EFI 的问题,但它可能会在您的案例中造成问题。如果我没记错的话,Boot Repair 提供了一个选项来撤消此移动/重命名操作,您可能需要使用该选项,但不要立即这样做——首先按照我刚刚概述的步骤看看您可以得到什么。如果所有这些都失败了,您可能需要使用 Windows 恢复工具来恢复 Windows 引导加载程序。但是,它将被设置为默认值,此时我建议使用简易UEFI在 Windows 中将 rEFInd 或 Ubuntu 移至启动列表顶部,或者使用外部介质上的 rEFInd 启动到 Ubuntu,然后使用refind-mkdefault
(rEFInd 自带的)将 rEFInd 恢复为默认启动程序。