LCh*_*os2 80 boot grub2 dual-boot grubrescue windows-10
我在我的桌面上双启动 Windows 7 和 Linux Ubuntu,今天是他们免费升级 Windows 10 的日子。多么激动人心!我得到了更新,它正在安装,然后我离开去小睡 30 分钟。然而,当我回到我的电脑时,它把我带到了 grub 救援提示。
error: no such partition.
Entering rescue mode...
grub rescue>
Run Code Online (Sandbox Code Playgroud)
当我输入时,我得到以下信息ls
:
grub rescue> ls
(hd0) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)
Run Code Online (Sandbox Code Playgroud)
在快速浏览了遇到 grub 救援提示的人后,我输入set
并得到以下内容
grub rescue> set
cmdpath=(hd0)
prefix=(hd0,msdos6)/boot/grub
root=hd0,msdos6
Run Code Online (Sandbox Code Playgroud)
在发现某些命令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
Run Code Online (Sandbox Code Playgroud)
在这里说我的设备都没有 Linux 系统!而且我不能再遵循视频教程了......
我想了想,确定 sda2 包含我的 Windows 系统(因为我记得我的 C: 驱动器有大约 700 GB 的空间)。想了想之后,我记得在安装 Ubuntu 时将大约 200 GB 的硬盘空间分配给与 Ubuntu 相关的东西。我不完全记得是哪个,但我认为它基本上是 Ubuntu“硬盘空间”,并且其中没有任何引导文件。我为 linux 分配了另外两个东西,但它们的大小非常小(尚未突破 1 GB 标记)。
那么,这里的任何人都可以帮助我让我的升级重回正轨吗?如果我最终不得不完全删除其中包含 Linux 的分区,我不会介意。
nob*_*ody 69
我的电脑预装了 Windows 8,所以我缩小了 Windows 分区,为 Ubuntu 腾出空间。这就是它去年的工作方式。在 Windows 10 升级中第二次重新启动后,计算机不再启动。GRUB 只显示grub rescue
命令提示符。后来我发现问题的发生是因为 Windows 以某种方式更改了分区方案。引导分区(包含普通 GRUB 数据)不再是 GRUB 预期的位置。我不知道这是如何以及为什么发生的。
您可以在救援模式下做的第一件事是使用ls
命令查看分区。我的是:
尝试找出哪个分区是您的启动分区。没有Tab完成,你必须完整地输入它。我尝试了以下命令,直到找到正确的分区:
ls (hd0,gpt1)/
ls (hd0,gpt1)/boot
ls (hd0,gpt2)/
Run Code Online (Sandbox Code Playgroud)
等等。
然后输入set
相同的提示。它将显示 GRUB 查找其文件的位置。就我而言,(hd0,gpt6) 已移至 (hd0,gpt7)。设置命令显示:
prefix=(hd0,gpt6)/boot/grub
root=hd0,gpt6
Run Code Online (Sandbox Code Playgroud)
要恢复正常的 GRUB,首先将prefix
设置更改为指向正确的分区。在我的情况下,命令是:
set prefix=(hd0,gpt7)/boot/grub
Run Code Online (Sandbox Code Playgroud)
然后你可以从救援模式切换到正常模式:
insmod normal
normal
Run Code Online (Sandbox Code Playgroud)
还可以通过以下方式修复root
设置:
set root=(hd0,gpt7)
Run Code Online (Sandbox Code Playgroud)
但这并不是绝对必要的,因为这对于 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
Run Code Online (Sandbox Code Playgroud)
那时唯一剩下的问题是加密。由于 root Ubuntu 分区数增加了 1(7 而不是 6),swap 分区也发生了类似的变化。我不得不将/etc/crypttab
文件更改为指向/dev/sda8
而不是/dev/sda7
.
我只为 Ubuntu 使用两个分区(root 和 swap)。如果与 Windows 共存的其他操作系统使用更多分区,则可能需要进行更多更改。特别是如果分区是根据它们的编号而不是它们的 UUID 安装的。看看你的/etc/fstab
. 如果分区由 UUID 标识,则应该没有问题。但是如果有/dev/...
行,如果这些分区已重新编号,则应更正编号。
小智 13
与 linux 一起安装 Windows(或升级它)可能会出现问题。
试试这个:https :
//help.ubuntu.com/community/Boot-Repair
安装 Windows 10 技术预览版后,我用它来解决一个问题,它奏效了。基本上,它所做的是重新安装 grub 以适用于所有当前安装的操作系统。确保告诉它安装 grub 到你的 linux 分区 (sd#)。
祝你好运!
old*_*red 10
在更改分区之前,请进行备份并保存到另一台设备。如果不是 sda 更改为正确的驱动器。然后,如果您使用 testdisk 恢复不正确的设置,则可以重新开始。使用 testdisk 恢复时,您只需要所有当前加上缺少的逻辑。
sudo sfdisk -d /dev/sda > parts.txt
Run Code Online (Sandbox Code Playgroud)
您丢失的分区位于此处或在 1547 处的扩展分区开始...与 1915 处显示的第一个分区之间...:
/dev/sda4 1547945982 1953521663 202787841 f W95 Ext'd (LBA)
/dev/sda5 1915731968 1953521663 18894848 7 HPFS/NTFS/exFAT
Run Code Online (Sandbox Code Playgroud)
您可以使用 testdisk,但它使用 CHS。您必须选择所有现有分区和丢失的分区作为逻辑。它可能会显示许多版本,具体取决于您更改分区的次数。所以选择匹配缺失的大小而不与任何其他当前分区重叠。一些正确恢复的只能启动,其他人必须重新安装 grub。还有一些无法正确恢复分区。
http://www.cgsecurity.org/wiki/TestDisk_Step_By_Step
另一个恢复工具是 parted 救援。它使用扇区,但您提供的范围必须刚好在丢失的分区之外,与当前分区没有重叠。最好知道确切的开始和结束。看到男人分手了
http://www.gnu.org/software/parted/manual/html_node/rescue.html
使用 parted 救援的用户:
http://ubuntuforums.org/showthread.php?t=1775331&p=10905969#post10905969
这是Windows 分区程序中的一个令人讨厌的错误,而不是 Linux 特有的。就我而言,它具有讽刺意味的是删除了一个 NTFS 分区。
如果 Windows 启动分区太小而无法包含 Windows 10 恢复环境,Windows 10 安装程序会/dev/sda3
在主 Windows 分区的末尾创建一个新分区(您的)。sda2
sda1
当它为此重写分区表时,对于扩展分区表中的每个逻辑分区sda4
,如果它位于前一个分区号之前的磁盘上,则放弃。
在您的情况下,您的 Linux 分区在您的新sda5
分区之前位于您的磁盘上,但分区编号高于sda5
重新分区之前的分区编号。
如果您查看庞大的 Windows 10 升级日志,您会看到类似“6 之前 5,无事可做”之类的消息,以及新旧分区表。
Windows 不会覆盖它删除的分区的内容,因此如果您能找到它们的位置,则可以恢复它们。在我的情况下,我有分区表的备份,但是按照oldfred 的回答中的解释使用testdisk很有可能找到它们。 分区救援将很难使用,因为在您的情况下删除了多个分区。
要使用Ubuntu Live CD 中的testdisk,请在终端类型sudo apt-get install testdisk
中安装它并sudo testdisk
运行。
修复分区表后,包含 GRUB 的 Linux 分区现在可能具有与之前不同的编号,因此您可能仍会以 GRUB 救援提示结束。如果是这样,引导修复现在将能够修复 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
Run Code Online (Sandbox Code Playgroud)
安装并运行它。
现在 Windows 可以完成它的升级。
归档时间: |
|
查看次数: |
255005 次 |
最近记录: |