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


58

我已经建立了多重启动系统。系统具有三个驱动器。Multiboot已配置Windows XP,Windows 7和Ubuntu-都在第一个驱动器上。我在驱动器上留有很多未分区的空间,并保留了该空间以供将来添加其他操作系统以及在此处存储文件之用。

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

现在我得到:

error: unknown filesystem.  
grub rescue>

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

help?man--help-hbashcmd,等。

现在,我无法启动系统。我已经开始研究此问题,发现人们通常建议启动到Live CD并从那里修复问题。有没有一种方法可以从grub抢救中解决此问题,而无需Live CD?

更新

通过遵循从Persist命令键入到GRUB rescue的步骤,我能够启动到initramfs提示符。但是没有比这更远的地方了。

到目前为止,除了阅读有关grub抢救的手册之外,我还可以使用lscommand 查看我的驱动器和分区。对于第一个硬盘驱动器,我看到以下内容:
(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 normal代替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-Repair帖子中的答案下载了Boot-repair。在我选择了“建议的维修(修复最常见的问题)”选项之后,这似乎可以解决问题。


zdnet.com/…在此主题上也有一些有用的信息。
K7AAY

有类似的问题,但在我的实时USB中也没有用goo.gl/Mr61V1
Ramesh

更改启动顺序,从Windows 7 Recovery CD开始,启动终端,键入“ Bootrec.exe / FixMbr”(不带引号),然后重新启动,解决了我的问题。
consuela '16

在以前的update3中,它对我有用,但是现在出现了同样的问题。即使我尝试使用grub抢救中列出的文件夹也无法正常工作。我试图使用ubuntu ISO设备备份数据,但现有的ubuntu并未列出。帮帮我,我现在应该怎么办?
Jaccs

这似乎是一个规范的问题,但是一个更老的问题是未知文件系统:grub rescue
Peter Mortensen

Answers:


24

我不知道为什么以下内容无法修复grub:

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

因此,我根据键入到GRUB救援帖子的Persist命令的答案下载了引导修复程序。在我选择了“建议的维修(修复最常见的问题)”选项之后,这似乎可以解决问题。

我还使用了Grub Customizer自定义启动项的顺序。


它不起作用,因为在运行最后一个命令后,您将需要再次运行sudo update-grub。在实时会话中,您需要将目标文件系统安装到mnt,将chroot挂载到文件系统,然后需要从chroot运行sudo update-grub。
mchid '16

使用此答案中的信息(安装和使用引导修复)以及问题,它可以在Acer上网本中恢复,在其中我在GRUB菜单中选择了错误的项“ Windows Recovery Environment(loader)(在上/dev/sda1)”,在启动期间。
彼得·莫滕森

7

有此问题的另一种原因。在这种情况下,GRUB某种程度上已损坏,需要修复或重新安装。但是,如Grub抢救中所显示的那样,“启动修复”失败并显示错误“未知文件系统”,这也可能损坏了安装GRUB的根分区。要解决此问题:

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


即使这个问题有答案,也有替代方法可以解决对我有用的问题。痛苦的视频Grub Rescue-Guide(初学者)中介绍了这些步骤。简而言之,它将完全重新安装GRUB 2,而不是对其进行修复。

由于观看该视频非常痛苦,因此我将列出以下步骤(无论观看视频有多痛苦,我都应该这样做)

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

这就是使用实时CD / USB修复GRUB的方法。此方法由YouTube用户crazytechzone开发。


5

采用:

  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是一个不错的选择。


谢谢你的协助。我认为我的问题可能是我的引导目录位于/ dev / sdb而不是/ dev / sda上。但是启动修复会自动修复它,因此我不必做任何其他事情。
user53817

3

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

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

  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
    

感谢您的回答,但是在您发布答案之前,我已使用引导修复工具修复了问题。我现在用我的解决方案更新了这篇文章。我希望我也可以尝试您的方法。
user53817'4

2

在Ubuntu中安装启动修复

  1. 在Ubuntu live CD或live USB上引导计算机。

  2. 选择“尝试Ubuntu”

  3. 连接互联网

  4. 打开一个新的终端(Ctrl+ Alt+ T),然后键入:

    sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
    
  5. Enter

  6. 然后输入:

    sudo apt-get install -y boot-repair && boot-repair
    
  7. Enter

使用引导修复

在此处输入图片说明

推荐维修

  1. 从以下任一位置启动引导修复:

    一种。Dash(屏幕左上方的Ubuntu徽标)

    b。或系统->管理->引导修复菜单(仅适用于Ubuntu 10.04)

    C。或者在终端中键入“ boot-repair”

  2. 然后单击“建议的维修”按钮。修复完成后,记下出现在纸上的URL(paste.ubuntu.com/XXXXX),然后重新启动并检查是否恢复了对操作系统的访问。

  3. 如果修复不成功,请通过电子邮件或论坛向帮助您的人指出URL。


@penreturn非常感谢,这个工作很棒。:D
Jeel Shah 2013年

0

该问题的另一个原因是,在极少数情况下,启动驱动器上的文件系统可能会崩溃。如其他答案中所述,我最初使用该ls命令在GRUB救援提示中列出所有驱动器/分区,但所有报告未知文件系统错误。我终于通过如下恢复文件系统来解决了Ubuntu 16.04(Xenial Xerus)上的问题:

  1. 从USB闪存盘引导(不安装即可尝试Ubuntu)

  2. 查找启动驱动器(检查驱动器容量或fsck在每个分区上执行该操作):

    sudo fdisk -l
    
  3. 恢复文件系统:

    sudo fsck /dev/sdb1
    
  4. 修复并清理文件系统后,从引导驱动器重新引导计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.