您的位置:首页 > 产品设计 > UI/UE

Ubuntu系统开机进入grub rescue模式解决办法

2014-03-21 21:48 756 查看
Ubuntu系统开机后进入"grub rescue>"模式?肯定是grub开机管理程序出问题了,出现这种问题也不用急着重装系统,还有解救办法。下面我就描述下自己的经历吧。

我们有10台普通PC机用作服务器(OS为Ubuntu 12.04 LTS),之前安装系统的时候没有规划好硬盘分区,采用根目录/(498GB)+swap(2GB)的简单分区方式。后来服务器要用来做云计算虚拟化技术的研究,采用OpenStack构架,而对象存储组件Swift需要Proxynode和Storagenode节点,在Storagenode节点上主机需要分出一个区采用xfs文件系统。这样我之前的根目录(/)和交换区(swap)的分区方式显然不合适。而且根本没有任何办法从主分区/dev/sda1(挂载在根目录/下)分出一个新区,如果采用fdisk
/dev/sda的方式去强行修改分区会导致系统出问题(Linux核心/boot/vmlinuz及核心模块/lib/modules/$(uname -r)/kernel都在根目录所在分区下面,修改分区必然要重新分割根目录所在分区,导致文件系统出问题),我一开始就这样试过,最后弄得系统都无法启动。

最后就是重新装系统咯!我采用了下面的分区:

/dev/sda1 300MB ext4 /boot

/dev/sda2 350GB ext4 /

dev/sda3 2GB swap

/dev/sda5 145GB xfs /srv

boot loader安装在/dev/sda即/dev/sda的MBR上

系统安装后重启,悲剧就发生了,File not fonund grub rescue>

第一次碰到这种问题还是挺无语的,装系统都装了这么多次了,唯一可能出问题的地方就是磁盘分区了。但是还是在网上搜了一下解决办法,发现还有得救,就抓紧尝试了一下,具体过程如下:

首先,在grub救援模式下只有很少的命令可以用:
set , ls , insmod , root , prefix
说明:

(1)set 查看环境变量,这里可以查看启动路径和分区。
(2)ls 查看设备
(3)insmod 加载模块
(4)root 指定用于启动系统的分区,在救援模式下设置grub启动分区
(5)prefix 设定grub启动路径
使用ls命令查看一下设备状态,在我的系统下有:(hd0) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) 这几项,顿时想起鸟哥对硬盘及分区在grub中的代号的介绍(在CentOS5.3上的情况)。


在Ubuntu系统下就有所不同了,(hd0)应该对应/dev/sda的MBR,(hd0,msdos1)应该对应/dev/sda1

然后具体查看设备下的文件:

grub rescue> ls (hd0,msdos1)
error: bad filename.
提示:错误的文件名,我在测试时发现必须是后面加一个/

grub rescue> ls (hd0,msdos2)/
./ ../ lost+found/ ...
通过查看发现在(hd0,msdos1)/下有vmlinuz和Initrd等文件,这正是要找的/boot文件夹所在分区。


设置grub的启动分区和路径
set root=(hd0,msdos1) #设置grub启动分区
set prefix=(hd0,msdos1)/grub/ #设置grub启动路径,注意/boot为独立分区(hd0,msdos1)

查看一下设置情况:
grub rescue> set
prefix=(hd0,msdos1)/grub
root=hd0,msdos1


加载基本模块
insmod $prefix/normal.mod #加载基本模块,加载成功后grub rescue>提示符会变亮

进入正常模式
normal #进入正常模式,出现菜单
这样就可以进入系统了,进入系统以后可以对grub就行修复,上面主要的原因可能在于MBR上grub开机管理程序出现问题,所以直接用grub-install重新建置MBR的grub程序。
#grub-install /dev/sda
Installation finished.No error reported.
安装没有错,这一步是将grub安装在目前系统的MBR底下,我的系统为/dev/sda
最后重启系统,正常启动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐