Grub救援 – 错误:未知的文件系统

我有一个多重启动系统设置。 该系统有三个驱动器。 多重启动配置了Windows XP,Windows 7和Ubuntu – 所有这些都在第一个驱动器上。 我在驱动器上留下了很多未分区的空间,并将其保留用于添加其他操作系统以及将来存储文件。

有一天,我继续下载了分区向导,并在Windows 7中创建了一个逻辑NTFS分区,还剩下一些未分区的空间。 一切正常,直到几天后重新启动计算机。

现在我得到:

error: unknown filesystem. grub rescue> 

首先,我很惊讶没有找到任何帮助命令,尝试:

help?man , – --help-hbashcmd

现在我陷入了不可启动的系统。 我已经开始研究这个问题并发现人们通常建议启动Live CD并从那里解决问题。 有没有办法从grub救援中解决这个问题,而不需要Live CD?

UPDATE

按照从输入的Persist命令到GRUB rescue的步骤,我能够启动到initramfs提示符。 但不能比这更进一步。

到目前为止,阅读grub rescue手册,我能够使用ls命令查看我的驱动器和分区。 对于第一个硬盘驱动器,我看到以下内容:
(hd0)(hd0,msdos6)(hd0,msdos5)(hd0,msdos2)(hd0,msdos1)

我现在知道(hd0,msdos6)包含Linux,因为ls (hd0,msdos6)/列出了目录。 其他人会给出“错误:未知文件系统”。

更新2

在以下命令之后,我现在进入启动菜单并可以启动到Windows 7和Ubuntu,但重启后我必须重复这些步骤。

 ls ls (hd0,msdos6)/ set root=(hd0,msdos6) ls / set prefix=(hd0,msdos6)/boot/grub insmod /boot/grub/linux.mod normal 

更新3

感谢Shashank Singh,根据您的指示,我简化了以下步骤。 我从你那里了解到我可以用一个6替换msdos6,而我可以只用insmod /boot/grub/linux.mod来修复insmod /boot/grub/linux.mod 。 现在我只需要弄清楚如何从grub本身保存这些设置,而无需启动到任何操作系统。

 set root=(hd0,6) set prefix=(hd0,6)/boot/grub insmod normal normal 

更新4

好吧,似乎需要启动Linux。 启动到Ubuntu后,我执行了手册中描述的以下步骤:

 sudo update-grub sudo grub-install /dev/sda 

这并没有解决问题。 我仍然得到了grub救援提示。 我需要做些什么才能永久修复它?

我还了解到,在hd0中的驱动器号需要转换为驱动器号,如/ dev / sda中的某些命令。 hd1将是sdb,hd2将是sdc,依此类推。 grub中列出的分区为(hd0,msdos6)将转换为/ dev / sda6。

更新5

我无法弄清楚为什么以下没有修复grub:

 sudo update-grub sudo grub-install /dev/sda 

所以我根据https://help.ubuntu.com/community/Boot-Repairpost的答案下载了boot-repair 。 在我选择“推荐修复(修复最常见问题)”选项后,这似乎就成了伎俩。

我无法弄清楚为什么以下没有修复grub:

 sudo update-grub sudo grub-install /dev/sda 

所以我根据输入到GRUB救援帖的Persist命令的答案下载了boot-repair 。 在我选择“推荐修复(修复最常见问题)”选项后,这似乎就成了伎俩。

我还使用了Grub Customizer来定制引导条目的顺序。

这个问题有另一个原因。 在这种特殊情况下,GRUB以某种方式损坏并需要修复或重新安装。 但是,如Grub救援失败并显示错误“未知文件系统”的“引导修复”,则安装GRUB的根分区也可能已损坏。 解决这个问题:

这是一种可能的解决方案,但不应该使用它,以免您的根分区进一步损坏。 运行命令fsck -t ext4 /dev/sda1 ,此程序尝试搜索和修复损坏的文件系统上的错误。 将sda1替换为您的实际根分区。 将ext4替换为实际的文件系统; 您必须知道文件系统,否则分区将更加损坏。 有关更多信息,请参阅修复损坏的文件系统 。


尽管这个问题有答案,但还有另一种方法可以解决对我有用的问题。 这些步骤在痛苦的videoGrub Rescue – 初学者指南中进行了解释。 简而言之,它将完全重新安装GRUB 2而不是修复它。

因为这段video非常难以观看,所以我将列出以下步骤(无论观看video多么痛苦,我都应该这样做)

  1. 启动Ubuntu的实时会话。 该video使用的是现场CD,而我使用的是现场USB。 我确保现场USB与我硬盘上的Ubuntu版本相同。
  2. 查找挂载根分区的位置。 在video中,用户使用Nautilus浏览已安装的每个驱动器。 它装有一长串数字和字符。 如果是这种情况,请按照以下步骤重新安装分区。 否则,请继续执行步骤5。
  3. 使用Ctrl + Alt + T打开终端并使用mount命令查找分区的名称。
  4. 安装分区。 在媒体文件夹中创建一个新文件夹。 sudo mkdir /media/ubuntu 。 然后只需将分区挂载到该文件夹​​即可。 sudo mount /dev/sdxx /media/ubuntu其中sdxx xx在步骤3中确定。
  5. 将以下目录从活动CD / USB的根目录绑定到您的Ubuntu版本的根目录。 目录是dev procsys 。 使用以下命令执行此操作:

     sudo mount --bind /dev /media/ubuntu/dev sudo mount --bind /sys /media/ubuntu/sys sudo mount --bind /proc /media/ubuntu/proc 
  6. 将根目录更改为Ubuntu分区上的目录。 sudo chroot /media/ubuntu/

  7. 完成上述操作后,再次安装GRUB 2会将其安装到您的Ubuntu发行版的根目录,而不是现场CD / USB的根目录。 所以继续运行sudo grub-install /dev/sdx

这就是如何使用Live CD / USB修复GRUB。 此方法由YouTube用户crazytechzone开发。

使用:

  1. set prefix=(hdX,Y)/boot/grub 。 使用先前确定的值。
    示例:如果Ubuntu系统位于sda5上,请输入:
    set prefix=(hd0,5)/boot/grub
  2. set root=(hdX,Y) 。 示例: set root=(hd0,5)
  3. insmod normal 。 尝试加载正常模块。
  4. normal

我们基本上需要GRUB来知道/boot/grub文件夹的位置。 如果这不起作用,我想从启动CD安装GRUB是一个不错的选择。

有趣的是,我一小时前也有同样的问题!

无论如何,这就是我所做的。

  1. 加载ubuntu:

     set root=(hd0,6) set prefix=(hd0,6)/boot/grub insmod normal normal 

    因为你的ubuntu安装在6对吗?

  2. 运行终端:

     sudo -i *to access root* grub-install --root-directory=/mnt/ /dev/sda sudo update-grub sudo grub-install /dev/sda