我的配置:opensuse 11.4,引导分区位于 pendrive 和带有分区 sda1、sda2、sdb1 的硬盘上。
今天我更换了计算机的机箱,并且错误地将第二个驱动器连接到 SATA 3 而不是 SATA 2。因此第二个驱动器安装不正确。我关闭计算机,正确连接它,然后我的问题开始了。
现在,我根本无法启动系统。以前我在BIOS(pendrive)中设置从可移动驱动器启动,但现在计算机(BIOS)似乎不将pendrive识别为可移动驱动器,而是将常规HDD识别为可移动驱动器。因此它不会启动“可移动驱动器”。当我更改启动顺序,并选择从硬盘驱动器启动(并且我将第一个硬盘驱动器设置为随身碟驱动器)或者如果我直接从启动菜单设置为从随身碟启动器启动时,我会在 GRUB 中收到错误,该错误会进入救援模式。
我的猜测是,由于某种原因,笔式驱动器不再被识别为可移动媒体,但硬盘、硬盘驱动器的映射不同,我应该修复映射。
我可以启动 CD 安装程序并安装 pendrive 以查看 grub 配置的内容,但是当我处于 grub 救援模式并执行“ls”时,我得到
(hd0) (hd0,msddos1) (hd1) (hd1,msddos2) (hd1,msdos1) (hd2) (hd2,msddos1)
但我没有看到映射,所以我不知道 hd0 的真正含义。我只能怀疑这里的hd1是sda,因为它有2个分区(如果后缀msdsos表示分区)。
我怎样才能让 grub 再次工作?
答案1
问题可能是 grub 在启动时看到的 USB 磁盘与从正在运行的系统运行时看到的不同。以下是您可以解决该问题的方法:
当您启动(通常是从硬盘)并出现 grub 时,打开 grub 控制台(通常只需按c
)。在 grub 提示符下,开始输入root (hd
:
grub> root (hd
然后按Tab,您将看到磁盘作为可能的完成。选择您所在的磁盘和分区/boot
。如果您不确定,那么对于您怀疑的每一项,请执行以下操作:
- (完成
root
选择分区的命令后按Enter) - 输入
cat /
并按Tab。您将看到分区上找到的文件列表。 - 查看文件列表,确定它是否是包含内核的分区(在 下
/boot/
)。 - 如果没有,请按Esc并重新开始。
一旦您发现 grub 如何识别该分区,您就可以重新安装引导加载程序(使用setup
命令)并指向您的文件中的正确分区/文件。/boot/grub/menu.lst
或者 /boot/grub/grub.conf
(您必须确定您的版本使用哪一个,或者只是让它们包含相同的内容)。
[编辑]:根据 Macias 的特殊请求,以下是有关如何使用 grub 修复 MBR 的更多详细信息:
在驱动器上重新安装 MBR 的一种方法grub
是使用setup
我上面提到的命令。这是 grub 版本 0.9X 已知的命令(请参阅文档)。但您似乎使用的是较新的 grub 分支(1.9X),并且它的命令有所不同。看一下相应的文档- 在此版本中,您可以将grub安装到MBR使用grub-install
实用程序我不确定是否还有其他方法 - 从 grub“rescue”提示符处,就像 grub-0.97 一样。也许不是,也许这就是许多发行版更喜欢“旧版”版本的原因之一。
答案2
该文件menu.lst
仅由 grub-legacy 使用。您似乎正在使用 grub2,它使用的grub.cfg
是。 Grub2 也喜欢在没有 的情况下工作device.map
,因此您也可以将其删除,然后重新安装 grub。
答案3
这个问题的解决方案是双重的。一件事是修复 grub,另一件事是修复 MBR。
第一个非常简单(?)。使用安装 CD 运行计算机(openSUSE!),选择“救援模式”,一旦进入救援模式运行,以 root 身份登录(不需要密码),插入 pendrive,挂载它(例如 ~/pendrive),然后转到到 ~/pendrive/grub 并编辑两个文件:device.map 和 menu.lst。在这两个文件中,您必须查找条目 (hdX),其中 X(通常)是 0 和 1。在我的例子中,我只需将所有 0 交换为 1,将所有 1 交换为 0。
我不知道如何简单地修复 MBR,但我希望 Rozcietrzewiacz 能提出解决方案:-),以防万一,最困难的方法是抓住另一个随身碟和另一个硬盘,拔掉所有常规硬盘并执行模仿原始安装的“假”安装。如果一切正常,并且您的新“假”系统已启动,则可以将 MBR 扇区从工作随身碟复制到不工作的随身碟(请参阅:如何用 grub 完全重建引导分区?)。您按照以下说明进行操作:
“在这里,我假设 /dev/sdb 是您的旧随身碟,而 /dev/sdc 是新随身碟 - 确保用适当的设备名称替换它们,否则您甚至可能会搞乱整个系统!
dd if=/dev/sdc bs=512 count=1 of=/dev/sdb
”(Rozcietrzewiacz 的解决方案)
这两个步骤就是在磁盘重新分配后让 grub 再次工作所需的全部步骤。