grub rescue模式下启动并修复

2024-04-15 01:18
文章标签 启动 模式 修复 grub rescue

本文主要是介绍grub rescue模式下启动并修复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天再次遇到grub修复问题,以前也遇到过一次。
我装的ubuntu 10.04和window 7的双系统,默认的系统启动项是Ubuntu。因为第一次装Ubuntu的时候只划了15G(对于长期使用Linux的人来说 o(∩∩)o...知道很小啦),于是就直接在windows系统下把装Ubuntu的那个分区删除了~~这下。。惨了,windows系统启动不起来了~~grub又不会修复,在网上找的东东又不管用。。当时真是无语了,然后就求助别的童鞋。用WINPE修复了grub。
我这个人不知道要求甚解,于是修好了就修好了~~继续玩去了~   
一个跟头不能栽两次,这次我想装meego系统,所以就又给windows分区了,这样由于window分区的碎片和Linux分区碎片不兼容,于是乎~~我再次进入到那个黑框框中~~敲神马命令都是"Unknown Command",除了ls~~列出了一些貌似分区的(hd0),(hd0,8)等等~~(当然啦`这是因为我当时不会嘛,而且grub rescue和grub的命令也不太一样麼)。。但是~~~这次。。我决定自己折腾一下,解决问题。。在网上找到一个所谓的完美解决方案~~但是结果是。。依然不行。。其实人家童鞋的解决方案是对的,只是不适合我的这种情况罢了。还有就是对于我这个对grub命令了解为0的菜鸟来说,照着他给的命令敲也不晓得是神马意思。。。。
不过还好啦,以前有学长给过一些很详细的grub基础教程的pdf,所以我就小学习了一下,如何在rescue模式下启动并修复grub,当然你也可以用当时你安装系统的光盘修复grub,在这里,我只简单的说一下如何在rescue模式下启动并修复呐~~好滴~~进入正题:(我嘚废话好多哈)


由于分区问题,启动时会自动进入grub rescue模式,一般会显示如下内容:
  1. error: unknown filesystemgrub rescue >

一般只要grub核心文件还在分区内,我们就能由rescue模式转换到normal模式下,进而通过命令进入系统。
在rescue模式下,只有一下命令可用(我觉得最让我不解的是为什么木有help命令?为神马?是我不知道麼?):
  1. set---设置变量值(同grub2命令)ls--- 列出当前的所有设备。 e.g:(hd0) (hd0,1) (hd0,8) (hd0,7) and so on这个命令可以有参数:ls / 列出当前设为root的分区下的文件ls (hd0,1)/ 列出(hd0,1)分区根目录的文件insmod --- 加载模块normal --- 进入正常模式(只有模块加载正确了才能进入normal模式)

因为在rescue模式下,木有search命令,所以我们就用ls命令来查看grub2文件处于那个分区
  1. e.g: grub rescue> ls (hd0)/ error: unknown filesystem /*可以用此命令挨个儿的遍历ls显示的所有设备,直到列出的目录文件,就说明grub2的核心文件在此分区了*/
我看了很多帖子,嗯,发现大家的grub2核心(core.img)文件都在(hd0,8)分区,不晓得是不是巧合(这个我木有深究阿),反正我的也是在(hd0,8)这个分区

/* ok. 小小的记录一下,我刚才有故意给windows分区,把grub搞坏了,这次设备列表里木有(hd0,8)
* 嗯嗯,,是(hd0,6)看来是巧合咯
*/

  1. ls (hd0,8)/                /* 查看(hd0,8)分区根目录,看有木有boot/ 文件夹*/ls(hd0,8)/boot/          /*查看此分区的/boot/目录文件,能看到有grub/文件夹*/ls(hd0,8)/boot/gurb/     /*查看此分区/boot/grub/目录下的文件,能看到很多.mod格式的文件还有.img文件 */
这样确定了grub2的核心文件在哪里之后,我们就开始转换工作咯:

  1. grub rescue> set(回车)                  /* 查看grub当前的启动分区和路径 */prefix=(hd0,8)/grub                    /* 确定预启动路径 */root=hd0,8                             /* 确定启动分区 */grub rescue> set root=hd0,8            /* 设定grub启动分区 */grub rescue> set prefix=(hd0,8)/boot/grub       /* 设定grub启动路径 */grub rescue> set(回车)                 /* 查看grub设定内容是否和实际的分区路径一致 */root=hd0,8                            /* 确定启动分区 */prefix=(hd0,8)/boot/grub              /* 确定启动路径 */grub rescue> insmod /boot/grub/normal.mod /* 刚才在查看分区/boot/grub/目录文件时,要注意看看是否有normal.mod文件,木有的话,此命令后会提示找不到此文件*/ grub rescue> normal                  /* 加载正常模块 */

/*以上操作成功后,我们就会进入正常模式,就能看到熟悉的grub启动菜单了*/
通常情况下,当我们进入到grub启动菜单后,就直接可以选择进入系统。然后更新重建grub。
但是有些人可能会碰到这种情况,虽然进入了normal模式出现启动选择菜单,却依然不能进入系统,这是由于缺少加载内核的Linux命令,直接从菜单不能进入系统。(请直接进入下面操作,因为紧接着我有点跑题咯~如果你急着解决问题的话)
还有一种情况,就是你更新过内核,所以会像我的启动菜单一样会有很多个不同内核的启动项,由于我的本本装的是Ubuntu10.04+win7,默认系统启动项为Ubuntu,这样如果我要进Win7就必须跳过好几个内核启动项,多麻烦阿~~~手疼~~o(∩∩)o...
对此我的解决方法是把/boot/grub/grub.cfg中的其他Ubunut内核启动项用“#”注释掉。但是这样的问题就是一旦你更新了grub,那么其他的内核镜像又会被搜到,于是就又造成了so长的启动项选择菜单。
有学长说,可以用命令移除旧版本的内核镜像,不过这个,现在我暂时还木有去找。等知道了,再补上来~~
好吧,回到我们的进入正常模式加载Linux内核模块问题。我想对于上面我说的多个旧版本的内核镜像,这时候你就可以使用下面的操作,加载指定的内核镜像。

如果不能直接进入系统请继续下面的操作:

进入正常模式后,出现我们熟悉的系统启动项选择菜单,此时需要按c,进入命令行然后加载linux模块
  1. normal grub> insomd /boot/grub/linux.modnormal grub> set root=hd0,8                          /* 确定正常启动分区 */normal grub> linux /boot/vmlinuz-* root=/dev/sda8 (注:*是通配符哦,此处可以以tab键查看具体内核版本镜像)                                               /* 加载内核并确定 /(根)分区 */normal grub> initrd /boot/initrd.img-* (同上)      /* 加载initrd.img */normal grub> boot

boot启动系统后,打开终端,执行命令修复grub(建议以root用户登录吧,或者直接切换到root用户,这样操作方便些 )

  1. root@wuyun:~# update-grub                         /* 更新重建grub.cfg grub配置文件 */root@wuyun:~# grub-install /dev/sda               /* 重建grub到第一硬盘mbr */
注:
1.命令grub-install /dev/sda 是将grub装入第一硬盘的mbr,如果要装入第二硬盘的mbr则把sda改为sdb即可,第三第四分别为sdc,sdd等。至于要把grub装到那个硬盘的mbr上,根据自己的实际情况而定,主要是看要设置哪一块硬盘为启动盘,就把grub装到哪个硬盘的mbr上。
2.分区号例(hd0,8)单独使用时可以不加括号,在使用路径时必须加括号;
3.由于我在装Ubuntu 10.04时没有使用/boot单独分区,直接就一个/分区就完了,如果你使用了/boot单独分区了,那么就应该修改路径:
prefix=(hd0,8)/grub
insmod /grub/normal.mod
root=/dev/sda8 也要修改跟分区的分区号


1:1.Ubuntu Grub Rescue 双系统重装 Windows造成grub2被改写的修复
       grub4 Dos0.4.4    在Windows启动项上加上grub4dos启动(不多说了,看置顶贴),重启选择进入grub,在命令行下输入(/boot单独分区的去掉 /boot)
代码:
grub>find --set-root /boot/grub/core.img
grub>kernel /boot/grub/core.img
grub>boot
进入grub2菜单,进入系统后再执行
代码:
sudo grub-install /dev/sd?
Ubuntu Grub Rescue方法二 进入Livecd 后修复
引用:
sudo -i
mount 你的根分区 /mnt
mount 你的/boot 分区 /mnt/boot #如果有的话
#挂载你其他的分区,如果有的话
# 重建grub到sda的mbr
grub-install --root-Directory=/mnt /dev/sda

2:Ubuntu Grub Rescue由于root分区uuid改变造成的不能正常启动,只能进入grub rescue模式的修复
grub rescue>set  grub rescue>prefix=(hd?,?)
/grub  grub rescue>root=hd?,?  
grub rescue>set root=hd?,?  
grub rescue>set prefix=(hd?,?)/boot/grub  
grub rescue>set  
grub rescue>root=hd?,?  
grub rescue>prefix=(hd?,?)/boot/grub  
grub rescue>insmod /boot/grub/normal.mod  
grub rescue>normal  
这时就可以调出 /boot/grub/grub.cfg,修改相应uuid,
改到命令行下
grub>insmod /boot/grub/linux.mod  grub>set root=hd?,?  
grub>linux /boot/vmlinuz-*** root=/dev/sd??  
grub>initrd /boot/initrg.img-****  进入系统
hd?,? 是grub文件所在分区 sda? 是/分区。

3:grub模块和配置文件grub.cfg受损无法启动时修复
Livcd启动进入试用
引用:
sudo -i
mount 你的根分区 /mnt
mount 你的/boot 分区 /mnt/boot #如果有的话
# 挂载你其他的分区,如果有的话
# 重建grub到sda的mbr
grub-install --root-directory=/mnt /dev/sda
# 重建grub.cfg
mount --bind /proc /mnt/proc  
mount --bind /dev /mnt/dev  
mount --bind /sys /mnt/sys  chroot /mnt update-grub  
umount /mnt/sys  
umount /mnt/dev  
umount /mnt/proc



Ok~~Now we have already made it. Enjoy your OS~!

这篇关于grub rescue模式下启动并修复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904534

相关文章

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor