Windows 10 升级导致 grub 救援

Windows 10 升级导致 grub 救援

我在我的台式机上双启动了 Windows 7 和 Linux Ubuntu,今天是他们免费提供 Windows 10 升级的日子。多么令人兴奋!我获得了更新,它正在安装,然后我就去睡了 30 分钟。然而,当我回到电脑前时,它引导我进入 grub 救援提示。

error: no such partition.
Entering rescue mode...
grub rescue>

当我输入时,会出现以下信息ls

grub rescue> ls
(hd0) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)

在快速浏览了遇到 grub 救援提示的人之后,我输入set了以下内容

grub rescue> set
cmdpath=(hd0)
prefix=(hd0,msdos6)/boot/grub
root=hd0,msdos6

normal在发现某些命令不起作用后,我仍然有点迷茫,然后我找到了一个视频教程,其中介绍了如何从 Linux 映像 CD 启动并在终端上运行一些命令。幸运的是,我随身带着 CD,并从那里启动。sudo fdisk -l然而,当我在终端中输入时,我得到的是:

ubuntu@ubuntu:~$ sudo fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 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
Disk identifier: 0xc03ede74

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sda2          206848  1547022335   773407744    7  HPFS/NTFS/exFAT
/dev/sda3      1547022336  1547943935      460800   27  Hidden NTFS WinRE
/dev/sda4      1547945982  1953521663   202787841    f  W95 Ext'd (LBA)
/dev/sda5      1915731968  1953521663    18894848    7  HPFS/NTFS/exFAT

这里说我的设备都没有 Linux 系统!而且我再也无法跟上视频教程了……

我稍微思考了一下,确定 sda2 包含我的 Windows 系统(因为我记得我的 C: 驱动器有大约 700 GB 的空间)。再想了想,我记得在安装 Ubuntu 时将大约 200 GB 的硬盘空间分配给了与 Ubuntu 相关的内容。我不记得具体是哪个了,但我认为它基本上是 Ubuntu 的“硬盘空间”,其中没有任何启动文件。我为 Linux 分配了另外两个东西,但它们的大小非常小(尚未突破 1 GB 大关)。

那么,这里有人能帮我让升级重新步入正轨吗?即使最终必须完全删除包含 Linux 的分区,我也不会介意。

答案1

我的电脑预装了 Windows 8,所以我缩小了 Windows 分区以腾出空间给 Ubuntu。去年就是这样的。在升级到 Windows 10 后第二次重启电脑,电脑就无法启动了。GRUB 只显示了一个grub rescue命令提示符。后来我发现问题是因为 Windows 以某种方式更改了分区方案。启动分区(包含正常的 GRUB 数据)不再位于 GRUB 预期的位置。我不知道这是怎么发生的,也不知道为什么会发生这种情况。

在救援模式下,您可以做的第一件事是使用命令查看分区ls。我的是:

  • (hd0,gpt1),
  • (hd0,gpt2)
  • ETC。

尝试找出哪个分区是您的启动分区。没有Tab完成功能,您必须将其完整地输入出来。我尝试了以下命令,直到找到正确的分区:

ls (hd0,gpt1)/
ls (hd0,gpt1)/boot
ls (hd0,gpt2)/

ETC。

然后输入set相同的提示。它将显示 GRUB 查找其文件的位置。在我的情况下,(hd0,gpt6) 已移动到 (hd0,gpt7)。set 命令显示:

prefix=(hd0,gpt6)/boot/grub
root=hd0,gpt6

要恢复正常 GRUB,请先更改设置prefix以指向正确的分区。 在我的情况下,命令是:

set prefix=(hd0,gpt7)/boot/grub

然后你就可以从救援模式切换到正常模式:

insmod normal
normal

也可以使用以下命令修复该root设置:

set root=(hd0,gpt7)

但这并不是绝对必要的,因为它对 Windows 链式加载条目无关紧要。进入正常的 GRUB 菜单后,您可以启动 Windows 并完成 Windows 升级。问题是您必须在每次重新启动时告诉 grub rescue 正确的分区。我就是这样做的。我把 GRUB 的问题留到以后再解决,因为我不确定 Windows 是否会对分区或启动进行更多更改。

Windows 完成后,我开始解决 GRUB 问题。按e编辑 Ubuntu 的启动选项。我把所有(hd0,gpt6)都改成(hd0,gpt7),Ubuntu 启动了。

但是,我使用加密分区和 cryptswap。Ubuntu 在启动时要求我输入密码。幸运的是我安装 Ubuntu 时保存了密码,并在启动时输入了密码。Ubuntu 启动没有问题。

然后我修正了/boot/grub/grub.cfg文件,替换(hd0,gpt6)(hd0,gpt7)并执行:

sudo grub-install

此时唯一剩下的问题就是加密。由于 Ubuntu 根分区号增加了 1(7 而不是 6),交换分区也遭受了类似的变化。我不得不将文件更改/etc/crypttab为指向/dev/sda8而不是/dev/sda7

我只为 Ubuntu 使用两个分区(根分区和交换分区)。如果与 Windows 共存的其他操作系统使用更多分区,则可能需要进行更多更改。特别是如果分区是根据其编号而不是 UUID 挂载的。看看你的/etc/fstab。如果分区是通过 UUID 标识的,那么应该没有问题。但如果有行,则/dev/...应该更正这些分区是否已重新编号。

答案2

在 Linux 的同时安装 Windows(或升级 Windows)可能会有问题。

试试这个: https://help.ubuntu.com/community/Boot-Repair



我在安装 Windows 10 技术预览版后使用它来修复问题,而且成功了。基本上,它的作用是重新安装 grub 以与所有当前安装的操作系统配合使用。确保告诉它将 grub 安装到您的 linux 分区 (sd#)。

祝你好运!

答案3

在更改分区之前,请进行备份并保存到另一台设备。如果不是 sda,请更改为正确的驱动器。然后,如果您使用 testdisk 恢复了错误的设置,则可以重新开始。使用 testdisk 恢复时,您只需要所有当前加上缺失的逻辑。

sudo sfdisk -d /dev/sda > parts.txt

您丢失的分区位于此处,或者位于 1547 处的扩展分区的起始位置...与位于 1915 处显示的第一个分区之间...:

/dev/sda4      1547945982  1953521663   202787841    f  W95 Ext'd (LBA)
/dev/sda5      1915731968  1953521663    18894848    7  HPFS/NTFS/exFAT

您可以使用 testdisk,但它使用 CHS。您必须选择所有现有分区和丢失的分区作为逻辑分区。它可能会显示许多版本,具体取决于您更改分区的次数。因此,请选择与丢失的分区相匹配的大小,而不会与任何其他当前分区重叠。一些已正确恢复的分区刚好能够启动,其他分区则必须重新安装 grub。有些分区无法正确恢复。

http://www.cgsecurity.org/wiki/TestDisk_Step_By_Step

另一个恢复工具是 parted rescue。它使用扇区​​,但您给出的范围必须刚好位于丢失分区之外,且与当前分区没有重叠。最好知道确切的开始和结束。请参阅 man parted

http://www.gnu.org/software/parted/manual/html_node/rescue.html

使用 parted rescue 的用户:

http://ubuntuforums.org/showthread.php?t=1775331&p=10905969#post10905969

答案4

要使用启动修复,您需要在 BIOS 中设置:

  • 启用 UEFI(在我的 BIOS 中是:)

    禁用旧版支持

  • 禁用安全启动

可能是您启用了安全启动,所以出现“文件签名不正确”的错误。

相关内容