Windows 10升级导致抢救


75

我在台式机上双启动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 ish GB的空间)。考虑了一下之后,我记得在安装Ubuntu时,将大约200 ish GB的硬盘空间分配给与Ubuntu相关的东西。我不完全记得,但是我认为它基本上是Ubuntu的“硬盘空间”,并且其中没有任何启动文件。我为Linux分配了另外两件事,但是它们的大小非常小(尚未突破1 GB的标记)。

因此,这里有人可以帮助我使升级重回正轨吗?我不介意最终是否必须完全删除其中包含Linux的分区。


1
如果LInux分区是逻辑Windows,则不会使用它重写分区表。使用测试磁盘。有些人使用testdisk还原它,然后将grub重新安装到MBR,并使一切恢复正常。但是您必须正确地将所有分区包括为主分区和逻辑分区才能正常工作。cgsecurity.org/wiki/TestDisk_Step_By_Step
oldfred

在上面的布局中,看起来新磁盘/dev/sda5(hd0,msdos5)分区之后的磁盘末尾仅剩3505个扇区,总计只有1.7 MB,因此Linux分区几乎无法隐藏在其中。我最好的猜测是Linux分区条目以某种方式移到了该位置(从#5到#6),并且其类型发生了莫名其妙的变化。首先要尝试的是ls (hd0,msdos5)/GRUB救援提示。
Josip Rodin

1
还有一个不使用Windows的理由,例如无知的操作系统
Aydin K.

Answers:


64

我的计算机预装有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 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使用两个分区(root和swap)。如果与Windows共存的其他操作系统使用更多分区,则可能需要进行更多更改。特别是如果分区是根据分区号而不是根据其UUID安装的。看看你的/etc/fstab。如果分区由UUID标识,则应该没有问题。但是,如果有/dev/...行,则在对这些分区重新编号后应更正该编号。


2
这对我来说是一个很好的答案。我没有Ubuntu的光盘,并且正在将Windows从8.1升级到10,并且遇到相同的问题。因此,我可以输入此答案并继续进行直到更新完成,因此我得到了更多的荣誉。感谢您保存我的培根。
DIBS

2
当Win 10决定自行升级并弄乱引导记录(我的升级从7升级到10时顺利进行)时,此解决方案对我来说非常有效
pedorro

9
尝试对命令中的ls (hd0,msdos1)/ ls (hd0,msdos1)/boot ls (hd0,msdos2)/ etc.所有条目进行尝试ls,并在每次出现时对其进行尝试error: unkown filesystem
雅克·马拉帕德

2
谢谢,这对您有所帮助。对我来说还不清楚的一件事(因为我是Ubuntu和Grub的新手)是在启动到Ubuntu(而不是在迷你Emacs中后)后才需要编辑grub配置,这不支持保存文件。)因此,我启动了,然后编辑了配置sudo nano /boot/grub/grub.cfg,然后运行了sudo grub-install /dev/sda(由于某种原因,没有参数的调用对我来说失败了)。只有这样,永久性的更改才起作用。
Nikita G.

1
尝试对所有条目使用ls(hdo,msdos1)等。获取错误的未知文件系统
Ashley G

13

与linux一起安装Windows(或对其进行升级)可能会出现问题。

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



安装Windows 10技术预览版后,我用它来解决问题,并且可以正常工作。基本上,它要做的是重新安装grub以与所有当前安装的操作系统一起使用。确保告诉它将grub安装到Linux分区(sd#)。

祝好运!


嗨!感谢您抽出宝贵的时间来帮助您!我实际上不太确定它是哪个分区!但是我会花一点时间看看它是否有效。
LChaos2,2015年

没问题!总是很乐意提供帮助。
Patrick

嗨!因此,我启动了引导修复盘并使用了建议的修复方法。我这样做了,然后重新启动了计算机,但是它带我去Windows启动管理器,并告诉我最近的硬件或软件更改可能安装了未正确签名或损坏的文件。该文件是\ Windows \ system32 \ winload.exe,状态为0xc0000428。按Enter键使我进入启动管理器,选择要启动的操作系统,仅显示Windows7。在Windows 7上按Enter键使我返回到同一错误屏幕,从而导致循环。
LChaos2,2015年

经过一些研究,听起来错误代码(0xc000428)与winload.exe相关联,尚未通过某些数字签名验证。它说什么吗?
Patrick

1
@ LChaos2的情况有任何更新吗?
hg8

10

更改分区之前,请进行备份并保存到另一台设备。如果不是sda,请更改为正确的驱动器。然后,如果使用testdisk恢复不正确的设置,则可以重新开始。使用testdisk还原时,您只希望当前所有内容以及缺少的Logical。

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

使用分批救援的用户:

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


3
我遇到了完全相同的问题,并且分开显示了Linux所在的“可用空间”。从/到“自由空间”运行救援,ext4又回来了!
speedogoo,2015年

3
只是想说gparted显示了ext4过去的自由空间。Ran分开了,设置为扇区,打印分区,使用“自由空间”的from / to进行救援(不要忘记为您的值添加一个s扇区),并且ext4返回了,与@speedogoo完全相同。根本不需要摆弄g。
Amedee Van Gasse 2015年

2
由于更多的人缺少分区,Windows 10对分区表的作用是什么?在我的情况下,ext4在逻辑分区中。
Amedee Van Gasse 2015年

谢谢你的面包屑。我可以通过部分营救来恢复妻子丢失的Linux分区。安装了grub之后,我们又恢复了运行。
bheeshmar

7

这是Windows分区程序中的一个讨厌的错误,而不是Linux特定的错误。具有讽刺意味的是,在我看来,它删除了一个NTFS分区。

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

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

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

如果查看庞大的Windows 10升级日志,则会看到类似“ 5之前的6,什么也没做”的消息,以及旧的和新的分区表。

Windows不会覆盖其删除的分区的内容,因此,如果可以找到它们所在的位置,则可以恢复它们。就我而言,我有分区表的备份,但是按照oldfred的答案所述使用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现在可以完成其升级。


感谢您对问题的清楚解释,这对我很有帮助。我处于问题所描述的相同情况。但是,testdisk无法找到已删除的linux分区。对我来说,分手营救成功了,之后我得以继续Windows 10升级
2015年

“ Windows不会覆盖它删除的分区的内容”这怎么可能?它为我创建的新分区(在杀死Linux分区之后)占用了整个磁盘。因此,这并不意味着写入可以在任何地方进行。
格雷格·贝尔

我无法表达我有多爱你
阿维吉亚诺

1

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

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

    旧版支持DISABLE

  • 禁用安全启动

可能您启用了安全启动,因此会出现“文件签名错误”错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.