从“ grub救援>”崩溃中恢复[关闭]


25

最初发布到AskUbuntu.com ...

AskUbuntu采取了关闭有关EOL(停产)版本的问题的政策。也有一个声音要删除它们。为避免可能丢失此热门问题(迄今为止有342335次观看),请在此处放置修订版。--- docsalvager

“经典”系统...

  • 基于Ubuntu 10.04(Lucid Lynx)的Puppy Linux 5.2.8(Lucid)
  • GRUB 2引导程序

GRUB 2在中放入了许多*.mod文件(内核模块)/boot/grub。删除这些文件(认为它们是放错位置的声音文件)会导致重新引导和提示失败grub rescue>

在这种情况下如何恢复?


1
似乎是一个愚蠢的问题..显然,您要么从备份中还原了已删除的文件,要么重新安装了grub(并且已经有很多有关如何执行此操作的问题)
psusi 2014年

过去的绝对观看统计数字与昨天的报纸一样重要。
Anthon 2014年

过去的报纸解决了无数犯罪,并为解决问题做出了巨大贡献,使世界变得更加美好。
DocSalvager 2014年

在我看来,从DVD启动进入救援模式并从那里重新安装grub可能是理想的选择。对于大多数人来说,这可能要简单得多,因为上述数据丢失应仅限于软件包中的文件。
布拉奇利2014年

并不是说我不认为从initrd中获取特定文件并不聪明。我只是认为这很可能会混淆人们的帮助。引导到救援/恢复模式是一个更常见的过程。
布拉奇利2014年

Answers:


43

该答案是针对DocSalvager的答案不起作用的其他人的。

  1. 我遵循DocSalvager的使用ls来查找正确的硬盘驱动器分区。就我而言(hd0,msdos5)
  2. 然后,我执行了以下命令以返回到正常的grub引导加载程序屏幕。

    grub rescue>  set boot=(hd0,msdos5)
    grub rescue>  set prefix=(hd0,msdos5)/boot/grub
    grub rescue>  insmod normal  
    grub rescue>  normal  
    
  3. 引导到Ubuntu后,我从终端使用以下命令修复了grub引导加载程序。

    sudo grub-install /dev/sda 
    

请参考此资源以直观地了解此过程。


6
我很高兴你们在此关闭之前发布
smac89 2015年

2
完美-正是我需要引导的帮助!我也跑sudo update-grubgrub-install,因为我的分区布局发生了变化。
mwfearnley'8

insmod normal命令需要多长时间?按Enter后,我的ubuntu挂起。诚然,它正在Oracle VirtualBox中作为VM“运行”。
snark

1
更新:它最终回来了,error: failure reading sector 0x8019a4 from 'hd0'所以我想这是一个漂亮的终端!
snark

传奇的答案!
zack

28

从grub救援崩溃中恢复...

  • grub rescue>不支持cdcp或除其自身变化的任何其他文件系统命令,ls这实在是一种find命令。
  • 因此,首先,必须找到/boot包含包含vmlinuz和其他启动映像文件的目录的分区...

    grub rescue>  ls  
    (hd0,4) (hd0,3) (hd0,2) (hd0,1)  
    
    grub rescue>  ls (hd0,4)/boot
    ... some kind of 'not found' message
    
    grub rescue>  ls (hd0,3)/boot
    ... some kind of 'not found' message
    
    grub rescue>  ls (hd0,2)/boot
    ... grub ... initrd.img-2.6.32-33-generic ... vmlinuz-2.6.32-33-generic 
    
    • ls 不带参数的参数将返回此系统上的四个分区。
    • ls (hd0,4)/boot/boot在partition上找不到目录(hd0,4)
    • ls (hd0,3)/boot/boot在partition上找不到目录(hd0,3)
    • ls (hd0,2)/boot/boot在分区上找到一个目录(hd0,2),其中包含vmlinuz我们想要的和其他启动映像文件。
  • 要从grub rescue>提示手动启动...

    grub rescue>  set root=(hd0,2)/boot  
    grub rescue>  insmod linux  
    grub rescue>  linux (hd0,2)/boot/vmlinuz-2.6.32-33-generic  
    grub rescue>  initrd (hd0,2)/boot/initrd.img-2.6.32-33-generic  
    grub rescue>  boot  
    
    • 设置root为使用/bootpartition上的目录(hd0,2)
    • 加载grub模块linux
    • 设置该模块以使用内核映像vmlinuz-2.6.32-33-generic
    • 设置initrd(初始RAM磁盘)以使用映像initrd.img-2.6.32-33-generic
    • 启动Linux。
  • 这会引导至BusyBox命令行提示符,其中包含所有基本文件系统命令(然后是某些!)。

  • 然后可以将*.mod文件移回/boot/grub目录...

    busybox>  cd /boot  
    busybox>  mv mod/* grub
    busybox>  reboot
    
  • 重新启动成功!

也可以看看 ...


我在BusyBox的根目录级别找不到任何引导文件夹
souparno majumder

1
vmlinuz,...您要查找的引导映像可能位于顶级根文件系统中,因此请尝试仅使用斜杠。这还将显示顶级目录。如果引导映像不在顶级根目录中,则可以开始尝试最有前途的目录,直到找到它们为止。例如:ls (hd0,1)/ls (hd0,2)/ls (hd0,2)/initramfs/,等
DocSalvager

以我为例,运行后ls (hd0,7)/boot显示attempt to read or write outside of disk 'hd0'
雏菊

hd0驱动器上的分区少于7个。也可能是驱动器上有一些未分配的空间,它不属于任何分区。
DocSalvager '16

1
在允许运行insmod linux之前,我必须将前缀设置为/ boot / grub!
埃米尔(Emil)
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.