Windows 10升级导致grub救援

我在桌面上双启动Windows 7和Linux Ubuntu,今天是他们免费提供Windows 10升级的那一天。 多么激动人心! 我得到了更新,它正在安装,我离开去rest30分钟。 然而,当我回到我的电脑时,它引导我进入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某些命令不起作用之后,我仍然有点失落,然后我找到了一个video教程,你从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系统! 我不能再遵循video教程……

我嘲笑我的大脑并确定sda2包含我的Windows系统(因为我记得我的C:驱动器有大约700英寸的空间)。 在考虑了一点之后,我记得在安装Ubuntu时,将大约200-ish GB的硬盘空间分配给Ubuntu相关的东西。 我不记得哪个,但我认为它基本上是Ubuntu“硬盘空间”,并且它没有任何启动文件。 我为linux分配了另外两个东西,但它们的大小非常小(还没有突破1 GB标记)。

那么,这里的任何人都可以帮助我让我的升级回到正轨吗? 我不介意我最终必须完全删除其中包含Linux的分区。

我的电脑预装了Windows 8,所以我缩小了Windows分区,为Ubuntu腾出空间。 这就是它去年的运作方式。 在Windows 10升级中第二次重新启动后,计算机无法再启动。 GRUB仅显示grub rescue命令提示符。 我后来发现问题的发生是因为Windows以某种方式改变了分区方案。 启动分区(包含正常的GRUB数据)不再是GRUB所期望的。 我不知道这是怎么发生以及为什么发生的。

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

  • (HD0,GPT1),
  • (HD0,GPT2),
  • 等等

尝试找出您的启动分区是哪个分区。 没有Tab完成,你必须完全输入。 我尝试了以下命令,直到找到正确的分区:

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

等等

然后在同一提示符下键入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救援关于正确的分区。 这就是我做到的。 我之后留下了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使用了两个分区(root和swap)。 如果与Windows共存的其他操作系统使用更多分区,则可能需要进行更多更改。 特别是如果分区是根据它们的数量安装而不是根据它们的UUID安装的。 看看你的/etc/fstab 。 如果分区由UUID标识,则应该没有问题。 但如果有/dev/...行,如果这些分区已重新编号,则应更正该数字。

与Linux一起安装Windows(或升级它)可能会有问题。

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

我在安装Windows 10技术预览版之后使用它来解决问题,并且它有效。 基本上,它的作用是重新安装grub以适用于所有当前安装的操作系统。 确保告诉它将grub安装到你的linux分区(sd#)。

祝好运!

在更改分区之前,请进行备份并保存到其他设备。 如果不是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

另一个恢复工具是分开救援。 它使用扇区​​,但是你给出的范围必须在缺少的分区之外,与当前分区没有重叠。 如果您知道确切的开始和结束,那就最好 见男人分手了

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

使用parted rescue的用户:

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

这是Windows分区程序中的一个令人讨厌的错误,而不是特定于Linux的错误。 在我的案例中讽刺地删除了一个NTFS分区。

如果Windows启动分区sda1太小而无法包含Windows 10 Recovery Environment,则Windows 10安装程序会在主Windows分区sda2的末尾创建一个新分区(您的/dev/sda3 )。

当它重写分区表来执行此操作时,对于扩展分区表sda4中的每个逻辑分区,如果它位于前一个分区号之前的磁盘上,它就会放弃。

在您的情况下,您的Linux分区在新的sda5之前位于磁盘上,但在重新分区之前具有比sda5更高的分区号。

如果您查看巨大的Windows 10升级日志,您将看到类似“6之前5,无事可做”的消息,以及旧的和新的分区表。

Windows不会覆盖它删除的分区的内容,因此如果您可以找到它们的位置,则可以恢复它们。 在我的情况下,我有分区表的备份,但使用olddred的答案中解释的testdisk很有可能找到它们。 由于您的案例中删除了多个分区,因此分区救援难以使用

要使用Ubuntu Live CD中的testdisk ,请在终端类型sudo apt-get install testdisk中安装它,然后运行sudo testdisk

修复分区表后,包含GRUB的Linux分区现在可能具有与之前不同的编号,因此您可能仍然会在GRUB救援提示符处结束。 如果是这样, Boot Repair现在可以修复GRUB。

再次,使用您的Ubuntu Live CD,键入:

 sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt-get update sudo apt-get install -y boot-repair && boot-repair 

安装并运行它。

现在Windows可以完成升级。

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

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

    遗产支持DISABLE

  • 禁用安全启动

您可能已启用安全启动,因此您会收到“错误签名的文件”错误。