原文地址:http://52sox.com/linux-resolv...在实际折腾Linux的过程中,遇到grub-rescue问题是很正常的。其实这个问题没什么技术含量,不过要看场合。记得之前教过某MM玩Linux,主要是工作需要。一开始一切都很顺利,结果下午就被一个电话吵醒了。电话那头很着急的告诉我,她的电脑无法启动,电脑无法启动的致命原因有千万种。于是我冷静的问她,有没有提示或者输出?然后她告诉我屏幕上出现了grubresume字样。这样的情况,不用说我就知道她坏了东西。但是按照网上的教程是修复不了的,所以详细查询后才出这篇文章。说实话,grub2主要分为两部分,一部分一般写在MBR里,另一部分写在某个分区的/boot/grub目录下。如果grub没有正确安装,可能会出现上述问题。对于这样的问题,我们可以通过以下方式解决:找到安装Linux的分区,将其与临时grub关联起来,重新生成grub。下面分别说明一下。这里要修改的Linux是Ubuntu14.04版本,其他发行版类似。要查找分区,我们首先在提示符grubrescue>中输入命令ls,列出所有的磁盘分区信息。这里我们假设结果如下:(hd0),(hd0,msdos8),(hd0,msdos7),(hd0,msdos6),....接下来,我们需要尝试列出/boot/grub目录是否存在于某个分区。Windows系统的分区,会直接得到unknownfilesystem的错误提示。也就是说,我们需要进行如下操作:ls(hd0,msdosX)/boot/grub这里的X代表在上面的分区中得到的数字,比如msdos8中的数字8。按照这个方法应该可以找到对应的分区,也是网上教程的方法,但是由于boot分区在她的电脑里是单独分区的,所以在打开的时候会提示对应的文件不存在使用上述方法。因此,我们需要将上面的方法修改为:ls(hd0,msdosX)/grub这里,我们去掉了boot目录,这样就可以搜索到对应的目录了。对于使用ls命令时文件不存在的情况,我们可以执行如下操作:ls(hd0,msdosX)/associate然后,如果找到正确的grub目录,我们需要将其与grub关联起来,在这里,我们主要使用set命令来设置操作,以便暂时执行相关操作:grubresume>setroot=(hd0,msdos6)grubresume>setprefix=(hd0,msdos6)和正常启动流程GRUB涉及使用grub-install生成的核心镜像的环境变量前缀。环境变量root主要用于从前缀加载普通模块。这里,我们假设正确的分区是(hd0,msdos6),我们通过set命令将它的root和prefix设置到这个分区。之后,我们需要加载:grubresuce>insmodnormalgrubresuce>normal这里,normal命令会读取/boot/grub/grub.cfg文件并运行菜单。重新生成grub通过上面的方法,我们就可以实现丢失的grub菜单。这个时候不要太高兴,所以这只是暂时的联系。如果重新启动,该问题将再次出现。解决这个问题,我们需要进入linux重新生成grub修改:cat@cat-pc:~$sudoupdate-grub生成grub配置文件...找到主题:/boot/grub/themes/deepin/theme.txt找到背景图像:/boot/grub/themes/deepin/background.png找到linux图像:/boot/vmlinuz-4.4.0-2-deepin-amd64找到initrd图像:/boot/initrd.img-4.4.0-2-deepin-amd64/dev/sda1donecat@cat-pc上的Windows7(装载程序):~$sudogrub-install/dev/sdaInstallingfori386-pc平台。安装完成。没有错误报告。这里假设我们使用的是deepin版本的release,那么使用update-grub重新生成grub菜单。最后用grub-install安装到硬盘上。这样我们就完美解决了开机时grubrescue无法正常启动的问题。如果哪天某个MM问你这个问题,千万不要吝啬这么好的机会,因为不会花你10分钟的时间,你可以拉近距离。参考文章:http://www.gnu.org/software/g...http://blog.chinaunix.net/uid...
