我在我的台式机上双启动了 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 中是:)
禁用旧版支持
禁用安全启动
可能是您启用了安全启动,所以出现“文件签名不正确”的错误。