--- title: 多系统GRUB引导丢失修复 tags: - grub categories: - Tools comments: true abbrlink: 6d520ba7 date: 2018-05-10 12:27:11 images: --- ## 前言(垃圾话) 这段话忽略不影响教程。本文主要记录一下我粗心大意之下造成的大出血事件。前几天做了一个给电脑供电的移动电源(???)听起来很奇怪但是这个需求确实发生了。emmmm 可能是我和电源有着不可理解的对立关系(成功在实验室造成了两次电池事故😪),因为要实际测试"充电宝"的续航和充电情况,所以我成功的献祭了我的电脑,我自认为已经检查了线路,接口,电压,保证电流不超过限额,但是我万万没有想到,极性搞错了。我TM🙃...把正负极搞反了接上去瞬间黑屏(完全不慌.jpg),所幸的是只是烧了笔记本的电源管理芯片,没有伤及无辜。送去电脑店,没有这种芯片,上淘宝买芯片发顺丰修修修,一来一去就是3天,期间只能勉强靠树莓派过过日子。但是修好了之后出现了新的问题,开不了机进不去系统,然后经过3个多小时的搜查改,终于修好了,所以在这里记录一下。 ## 问题的具体描述 这个问题的表现就是,开机自检能通过,但是出现不了引导界面反而出现的是一个叫做 grub rescue的界面,我这里因为修的时候并没有拍照,所以只能用文字大概描述一下。 - 开机之后通过自检,然后检测引导什么的,但是他提示 `erro:file'/boot/grub/i386-pc/normal.mod' not found` 这个错误。 - 接下来就是如下的一个命令行界面, ``` grub rescue>>______________ ``` ## 问题的原因 这个问题本质上就是找不到引导的文件,迷路了找不到任何导航的东西。但是有两种不同的情况(据我搜索的结果)。 1. grub 文件还在系统里,但是引导至该文件的设置出错,也就是这个文件的路径不见了。 2. grub 的文件已经丢失了,也就是硬盘里不存在这个文件了。 ## 验证是哪种情况 下面几步即可完成。 1. `grub rescue>>` 输入 `ls` 。可以看到输出了很多 hd\*,msdos\* 之类的东西,hd\* 就是第几块存储设备,msdos\*也就是分区。 2. 通过 `ls (hd*,msdos*)/boot/grub` 可以查看是不是grub所在的分区以及文件是否存在。比如我查看 hd0,msdos5 那么命令就是 `ls (hd0,msdos5)/boot/grub`,这里我在网上看到有些直接输入`ls (hd0,msdos5)/grub` (grub摆放的位置不一样)。 - 如果结果显示 `error:unknown filesystem` 代表并不是 grub 所在的分区。 - 如果结果里有`i386-pc` 文件夹,那么代表你的是第一种情况。 - 如果结果里没有错误提示但是也没有显示`i386-pc` 文件夹,那么你的情况就是第二种(我的恰好也就是第二种)。 ## 设置 grub 路径 我不知道第二种情况需不需要这样设置,经过我的后来思考觉得应该不需要的,但是还是建议设置一下防止出问题。 1. 在`grub rescue>>` 输入 `set root=(hd*,msdos*)` 设置根目录。 2. 在`grub rescue>>` 输入 `set prefix=(hd*,msdos*)/boot/grub` 设置 grub 目录。 3. 通过在`grub rescue>>` 输入 `set`可以看到设置的结果。 ## 第一种情况解决办法 下面的步骤是网上搬过来的,因为我不是这个情况,原文见[博客](https://blog.csdn.net/peerless1994/article/details/52226169) 1. 输入 ` insmod normal` 回车 2. 输入 `normal`回车 就能进入 grub 引导菜单界面。 3. 如果你能选择 linux 并启动那么跳到第5步否则第4步。 4. 在 grub 界面按下键盘 `C` 进入命令行模式输入如下命令。\* 就是你刚找到的正确的引导分区的相关序号。 ``` set root=(hd*,msdos*) Set prefix=(hd*,msdos*) ``` 5. 启动 linux 在终端输入如下命令,(其实我更推荐使用 boot-repair 更傻瓜,更安全~ ~)。 ``` sudo update-grub sudo grub-install /dev/sda (通过 ls /dev/sd* 查看磁盘情况) ``` ## 第二种情况解决办法 对于二种情况稍显复杂。需要通过一个 liveCD 来拯救。 1. 需要 硬件:一个可以用的电脑、一个U盘(会格式化注意备份); 软件:一个 Ubuntu 系统镜像、UltraISO软碟通(亲测U深度一键装机没用)。 2. 打开软碟通菜单栏-->文件-->打开下载来的iso镜像。 3. 软碟通菜单栏-->启动-->写入硬盘镜像,在弹出的选项里选择U盘然后点击格式化,格式化完成之后点击写入。等待写入完成。 4. 插入U盘,进入你电脑的 bios ,我的是在按下电源键启动之后狂按 F2 这里你需要上网搜一下你电脑对应的按键是啥,进去时候找到 boot 设置将U盘列为第一启动项(这里因电脑而异希望你有点灵性),这里不懂的话上网搜一下怎么开机进入U启动盘。 5. 顺利的话就进入了一个 linux 的安装界面。在右边的语言列表里滑到最下面选择中文。然后在右边的两个大图标选项里选择试用 Ubuntu ,这样就进入了一个看起来和正常安装没有区别的 Ubuntu 系统。 6. `Ctrl+alt+T` 呼出终端,输入以下命令安装 boot-repair 并启动。 ``` sudo add-apt-repository ppa:yannubuntu/boot-repair //添加 boot-repair 软件源 sudo apt-get update //更新软件列表 sudo apt-get install -y boot-repair //安装 boot-repair boot-repair //启动 boot-repair ``` 7. 按照提示傻瓜式的操作即可完成修复,耐心等待。 - 在过程中如果提示某个硬盘是否是可拆卸的选择否,如果是移动硬盘就选择是。 - 修复完成会问你是否选择生成报告,点击是,生成报告然后给你一个网址,复制网址到浏览器即可访问结果,可以看到你的分区和引导以及引导的系统。 8. 关闭计算机,拔掉U盘,重启计算机即可进入引导~ ~。windows 和 linux 都可以进入了,美滋滋。 9. 启动 windows 可能会提示是否要跳过系统检查,这个很快的,也就20几秒就好了。 ## 后话 1. 我这里出现一个情况,我原本的默认引导是用那种黑白屏的引导,然后如果点击 Ubuntu 会跳转到 grub 引导但是经过这个操作之后,grub变成了默认的引导点击windows之后会跳到黑白屏的引导。 解决办法:下载EasyBCD编辑引导菜单删除 Ubuntu 的引导选项就OK了,就默认使用 grub 引导(之前就想这么搞来着误打误撞美滋滋)。 2. grub默认的不是windows启动,通过该[教程](https://jingyan.baidu.com/article/f71d60379e16021ab641d1ab.html) 即可调整默认的启动系统,如果链接失效搜索一下 grub 调整启动顺序~ ~。