我有一台安装了 Windows 7 和 Ubuntu 的双启动 PC。昨晚我从 12.04 升级到了 12.10,但从那以后我就无法启动了,因为 PC 进入 grub 救援模式,并出现错误“文件未找到”。
我已尝试以下步骤:
set prefix=(hd0,msdos5)/boot/grub/i386-pc/
set root=(hd0,msdos5)
insmod normal
我收到错误symbol not found : 'grub_disk_dev_list'
。
当我尝试时:
linux /boot/vmlinuz-3.2.0-32-generic root=/dev/sda5 ro
我得到错误- command not found 'linux'
;同样initrd
我也不知道该设置什么 sdXX。
答案1
解决了。以下是针对我这样的新手的分步说明。
- 进入 grub 恢复后的第一步是找出磁盘上的分区。
a) 在 grub-recovery 提示符下输入“ls”。这将为您提供磁盘上的所有分区。
grub-恢复>ls
我的输出是 (hd0),(hd0,msdos1),(hd0,msdos2),(hd0,msdos3)....等等
2)现在我们必须找出这些分区中哪些包含 Ubuntu 文件来执行此类型
例如ls (hd0,msdos5)
如果您看到错误,则意味着这不是我们要查找的分区。继续尝试其他分区,直到看到如下所示的内容
例如lost+found dev bin usr etc-2
对我来说结果是(hd0,msdos5)
3)现在我们需要找到名称以 vmlinuz.... 开头的文件的位置以及 initrd...
它们通常位于 /boot 文件夹下
ls /boot/
记下文件的全名和路径,我们稍后可能会需要它们。对我来说,它们位于 /boot/ 文件夹下,并被命名为vmlinuz-3.2.0-32-generic 和 initrd-3.2.0-32-generic
4) 现在制作一个 Linux 的 Live CD 或 U 盘,插入并启动你的电脑。当你看到grub 菜单(菜单要求用户安装 Ubuntu 或尝试不安装)按字符C
并按回车键。
这将带您进入 grub 提示符。
我们不会全新安装 Ubuntu,我们只想使用 grub 命令提示符。
5)在 grub 提示符下输入以下命令
set root=(hd0,x)
如果你的分区是 sda5,则输入 5 代替 x,例如设置根=(hd0,5)
6)linux /vmlinuz root=/dev/sdXY ro
如果您看到错误,则必须使用我们在步骤3中注意到的完整路径。
例如Linux /boot/vmlinuz-3.2.0-32-generic root=/dev/sda5 ro
7)initrd /initrd.img
如果看到错误,请按照步骤 E 中所述指定完整路径
例如initrd /boot/initrd.img-3.2.0-32-generic
8)boot
使用上述方法,我能够启动 Ubuntu 并访问我的所有数据。
9)最后一步,我们需要修复 grub,这样我们不必每次登录时都按照这些步骤操作。
答案2
您是否为 W7 和 Ubuntu 准备了 2 个独立的物理磁盘?如果是,请尝试在 BIOS 屏幕中更改磁盘的启动优先级顺序。我也遇到了类似的事情,这彻底解决了问题。