grub rescue救援模式的处理

    技术2022-05-20  54

    本人现在安装的是Windows 7+Ubuntu 10.10 双系统。今天想在自己的烂PC上装Mac,于是分了两个区,并且都没格式化。用leopard硬盘安装工具把dmg镜像加载到新分区后(现在应该被格式化成HFS+分区了),又安装了MacDrive,然后重启系统。

     

    再然后,就悲剧了。

     

    grub无法引导进入系统,大黑屏上出现:

    unkown filesystem

    grub rescue>

     

    OK,确实悲剧了:估计Windows刚才的分区活动把Grub搞郁闷了,Grub进入Rescue模式。之后,手机google了一下,发现“love-姜红阳”的一篇blog 写得很好。现在转贴过来。

     

    我的linux在调整分区后,出现了grub rescue> 这表示grub2的配置文件坏了,由于分区调整或分区UUID改变造成GRUB2不能正常启动,从而进入修复模式(grub rescue)也称救援模式。 在救援模式下只有很少的命令可以用: set  ,  ls , insmod , root , prefix (1)set  查看环境变量,这里可以查看启动路径和分区。 (2)ls   查看设备 (3)insmod  加载模块 (4)root  指定用于启动系统的分区,在救援模式下设置grub启动分区 (5)prefix 设定grub启动路径 一、分区乱了,我不知道boot目录在什么地方了 ls  #查看一下设备状态 如图: grub rescue> ls (hd0,msdos3) error: bad filename. 提示:错误的文件名,我在测试时发现必须是后面加一个/ grub rescue> ls (hd0,msdos3)/ ./  ../  lost+found/ 通过查看发现在(hd0,msdos1)/下有一个boot目录 二、设置grub的启动分区和路径 set root=(hd0,msdos1)  #设置grub启动分区 set prefix=(hd0,msdos1)/boot/grub/  #设置grub启动路径 查看一下设置情况: grub rescue> set prefix=(hd0,msdos1)/boot/grub root=hd0,msdos1 三、加载基本模块 insmod /boot/grub/normal.mod  #加载基本模块 四、进入正常模式 normal  #进入正常模式,出现菜单,如果加载grub.cfg(错误的)可能出现问题,按shift可以出现菜单,之后按c键进入控制台 进入正常模式后就会出现grub>这样的提示符,在这里支持的命令就非常多了。 五、引导系统 set root=(hd0,msdos1)  #设置正常启动分区 linux /boot/vmlinuz ....  ro text root=/dev/sda1  #加载内核,进入控制台模式 initrd  /boot/initrd ....  #加载initrd.img boot #引导 六、更新grub 安装:grub-install /dev/sda 更新:update-grub 虚拟机实验: 经过上面的经历,我在虚拟机里进行了一下实验,加深巩固。 一、把boot目录移到别的分区 mv /boot/   /home/ 这样重启之后就出现了 grub rescue>救援模式。 二、手动启动过程记录 ls (hd0,msdos6)/  #找到了boot所在的分区 set root=(hd0,msdos6)  #设置grub启动分区 set prefix=(hd0,msdos6)/boot/grub/  #设置grub启动路径 insmod /boot/grub/normal.mod  #加载基本的模块 normal #从救援模式进入正常模式 set root=(hd0,msdos6) #设置系统启动分区,在这里指向内核所在的分区 linux /boot/vmlinuz-2.6.35-22-generic ro text root=/dev/sda1 #加载内核 initrd  /boot/initr .....  #加载initrd.img boot  #启动

    测试中正常启动并出现登录对话框。

     

    双系统,win7 下一键Ghost ,进入grub rescue 的解决方法

     

    本人安装的是win7+ubuntu10.10, 硬盘直接安装。因为win7 下装了几个大软件,所以决定一键Ghost 备份一下,结果重启之后,就进入了grub rescue 界面:

    error:unknown filesystem

    grub rescue>

     

    研究了半天,才解决这个问题。先说说是怎么回事。

    安装ubuntu 时,启动是用grub2 进行启动。我的win7C 盘, Ubuntu 空间是从D 盘里分出来的。我们知道,每次系统启动时都是先进入grub ,也就是先在ubuntu 的启动目录里选择进入哪个系统,如果按分区来讲,grub2(hd0,msdos7) 也就是我的ubuntu 所在的分区。那么启动时root 应该设在(hd0,msdos7), 可一键ghost 会修改启动,它把root 改在(hd0,msdos9), 这是个windows 分区,也就是NTFS 分区,ubuntu 是不能识别这种文件系统的,所以就有了error:unknown filesystem ,这种情况下自然不能启动,那么grub2 就会启动grub rescue 模式,就是修复模式。那么我们要做的就是把grub 重新指向(hd0,msdos7)

     

    下面是具体步骤:

     

    ①查看分区

    因为每个人的分区不一样,所以我们要查看分区,ls 指令

    grub rescue>ls

    回车后,就会出现

    (hd0) (hd0,msdos9) (hd0,msdos8) (hd0,msdos7) (hd0,msdos6) (hd0,msdos5) (hd0,msdos1)

    grub rescue>

    注:我用的是grub2, 对于grub 用户,分区前没有msdos 字样

    上面是我的分区,每个人的不一样。

    grub rescue>set 回车

    prefix=(hd0,msdos9)/boot/grub

    root=hd0,msdos9

    从上面可以看出来现在我的系统是从(hd0,msdos9) 里启动的。

    那么怎么知道ubuntu 在哪个分区呢?进入第二步

     

    ②寻找 ubuntu 所在分区

    这一步我们要一个一个的试,

    还是用ls 指令

    先试下在不在(hd0,msdos8 )里边

    grub rescue>ls (hd0,msdos8)

    回车会发现,不是,还是unknown filesystem

    接着来

    。。。。。。。。。

    当我试到

    (hd0,msdos7) 的时候,可以看到一下子多了很多字,这些就是我ubuntu 主文件夹下的文件夹和文件的名字。OK ,找到分区了!

     

    ③修改启动分区

    grub rescue>root=(hd0,msdos7) grub rescue>prefix=/boot/grub //grub 路径设置 grub rescue>set root=(hd0,msdos7) grub rescue>set prefix=(hd0,msdos7)/boot/grub grub rescue>insmod normal // 启动 normal 启动

    grub rescue>normal

    依次敲入上面的指令,是不是看到熟悉的启动菜单了?选 win7 后,一键 Ghost 就开始备份系统了。别高兴太早,一切还都没开始呢。如果你不是因为一键 Ghost 问题进入 grub rescue, 可以直接跳到第⑤步

     

    ④再来一遍

    当你等着一键Ghost 备份完系统,重启后,你发现还是

    error:unknown filesystem

    grub rescue>

    别着急,再把前三步进行一遍就可以了

     

    ⑤进入命令行 启动 Ubuntu

    进入系统启动选项界面后,你发现,无论点那个还是进不去,这是因为你还没有真正的修改grub, 这个要到ubuntu 里修改

    进入系统启动项界面后,按C 进入命令行模式

    grub >set root=hd0,msdos7

    grub >set prefix=(hd0,msdos7)/boot/grub

    grub >linux /vmlinuz-xxx-xxx root=/dev/sda7 // 里边的 xxxx 可以按 Tab 键,如果有 acpi 问题 , 在最后加一句 acpi=off grub >initrd /initrd.img-xxx-xxx grub >boot

    Ubuntu 正常启动了吧?

     

    ⑥进入 ubuntu 修复 grub

    大功就要高成了

    进入Ubuntu, 修复grub

    在终端里运行

    sudo update-grub

    重建 grub 到第一硬盘 mbr sudo grub-install /dev/sda

    好啦,重启,一切搞定!

     

     

    感谢姜红阳的解决方案。


    最新回复(0)