从“grub救援>”崩溃中恢复

从“grub救援>”崩溃中恢复

最初发布到 AskUbuntu.com ...

AskUbuntu采取了关闭政策有关 EOL(生命周期结束)版本的问题。还有一支声乐队伍来清除他们。为了防止可能丢失这个热门问题(迄今为止有 342335 次浏览),我在此处放置了修订版本。 --- 文档保存者

“经典”系统...

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

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

这种情况下如何恢复呢?

答案1

这个答案适用于 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 
    

请参考这个来源直观地浏览这个过程。

答案2

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

  • grub rescue>不支持cd,cp或任何其他文件系统命令,除了它自己的变体,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在分区 上找不到目录(hd0,4)
    • ls (hd0,3)/boot/boot在分区 上找不到目录(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为使用/boot分区上的目录(hd0,2)
    • 加载 grub 模块linux
    • 设置该模块以使用内核映像vmlinuz-2.6.32-33-generic
    • 设置 initrd(init RAM disk) 以使用该映像initrd.img-2.6.32-33-generic
    • 启动Linux。
  • 这会启动到忙碌盒命令行提示符包含所有基本文件系统命令(然后还有一些!)。

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

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

也可以看看 ...

相关内容