解决grub引导错误的一次经历
我的电脑上一共是两块硬盘,1块固态硬盘(sda)装了win7,另外一块普通硬盘(sdb)装了ubuntu和centos两个系统,系统启动的引导是装在sdb上面的ubuntu的grub2,它负责选择不同的操作系统来启动,OK,背景交代完了,接下来开始讲述我们出现的问题。
昨天晚上给sdb新添加了一个分区,如下:
Disk /dev/sdb: 500.1 GB, bytes
heads, sectors/track, cylinders, total sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk identifier: 0xa887a887 Device Boot Start End Blocks Id System
/dev/sdb1 Linux
/dev/sdb2 f W95 Ext'd (LBA)
Partition does not start on physical sector boundary.
/dev/sdb5 + HPFS/NTFS/exFAT
/dev/sdb6 b W95 FAT32
/dev/sdb7 + HPFS/NTFS/exFAT
/dev/sdb8 HPFS/NTFS/exFAT
/dev/sdb9 Linux
/dev/sdb10 Linux
/dev/sdb11 Linux
/dev/sdb12 Linux swap / Solaris
/dev/sdb13 + Linux
Partition does not start on physical sector boundary.
其中那个13行的sdb6就是我新添加的分区,由于这个分区是在磁盘中间添加的所以就导致后面的分区号全部变了(比如centos的根目录原来装在sdb8,现在变成了sdb9了),我的ubuntu的根目录是装在sdb1中,由于它的分区号还没有改变,所以ubuntu系统还能正常启动,而centos系统就启动不了了!
启动不了我就得去排除错误啊,刚开始我就想着是引导的问题,于是我在ubuntu下面调用了update-grub命令,来更新一下grub2的启动条目,更新的结果是这样的:
Generating grub configuration file ...
Found background image: ubuntu_kylin_grub_bg.tga
Found linux image: /boot/vmlinuz-3.13.--generic
Found initrd image: /boot/initrd.img-3.13.--generic
Found linux image: /boot/vmlinuz-3.13.--generic
Found initrd image: /boot/initrd.img-3.13.--generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows (loader) on /dev/sda1
Found CentOS release 6.6 (Final) on /dev/sdb9
done
从上面可以看到,三个操作系统都找到了,现在应该能正常启动了吧,我重启试了试,centos启动还是失败。。。。
后来我有在想,我的centos系统的home目录和var目录是单独的分区,是不是它启动的时候自动挂载出问题了,于是我又去修改centos的/etc/fstab文件,原来我是用分区号来标识分区的(比如/dev/sdb9之类的),这里我就全部改成了用UUID来标识分区。这里还学到了一个小技巧,原来分区的UUID号码都保存在/dev/disk/by-uuid/这个目录下面,都保存的是软链接,ll一下就可以看到它指向哪块硬盘了,如下:

我改了fstab之后,再来重启系统,发现还是不行。这我就非常郁闷了,一直在想问题出在哪里?后来我又看了一下grub2的配置文件(grub.cfg),终于发现问题还是在那个启动命令上面,如下所示:
menuentry 'CentOS release 6.6 (Final) (on /dev/sdb9)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-d24c3228-5ffc-4937-8411-a69681c3b54e' {
insmod part_msdos
insmod ext2
set root='hd1,msdos9'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos9 --hint-efi=hd1,msdos9 --hint-baremetal=ahci1,msdos9 d24c3228-5ffc---a69681c3b54e
else
search --no-floppy --fs-uuid --set=root d24c3228-5ffc---a69681c3b54e fi
linux /boot/vmlinuz-2.6.-504.12..el6.i686 ro root=/dev/sdb8 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF- rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet vga=
initrd /boot/initramfs-2.6.-504.12..el6.i686.img
}
这是grub.cfg文件中关于centos启动的部分,在第九行linux命令中,它选择好了内核以只读命令来挂载根文件系统的时候,选择的分区是sdb8,而此时sdb8已经变成了windows的ntfs分区,所以此时我的系统启动的时候,就会提示一大串的无法识别文件系统类型(ntfs),只要把这里改成sdb9,我的系统就能正常启动了!
^ o ^
启动之后,我还没高兴多久呢,发现在ubuntu下面运行一遍update-grub命令,那么grub.cfg文件又被覆盖了。。没办法,还得继续分析!
经过分析之后,发现centos的那个启动条目是由/etc/grub.d/30_os-prober这个配置文件产生的,而在这个文件中,linux-boot-prober命令最终生成了grub.cfg文件中的第9行中root命令后面跟着的分区名!而这个linux-boot-prober命令就是查找给定的分区名中的类似于"menu.lst"的配置文件,结果我最终发现,问题还是出在centos系统的配置文件上,如下所示:
title CentOS (2.6.-504.12..el6.i686)
root (hd0,)
kernel /boot/vmlinuz-2.6.-504.12..el6.i686 ro root=/dev/sdb8 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF- rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet vga=
initrd /boot/initramfs-2.6.-504.12..el6.i686.img
我原来只改了第2行的root命令选择的分区,而没有改第三行中root命令选择的分区,这样我的系统还是启动不了。。
OK,把centos的配置文件一改,问题总算都是解决了!^ . ^
解决grub引导错误的一次经历的更多相关文章
- deepin linux 安装之后 引导错误 出现 grub>
deepin 安装之后 引导错误 ,,, 忙了一晚上 终于解决了 太辛苦了 不过明白了grub的工作原理也不亏,,,, 就是 整个过程满满的绝望 (哭 环境说明 华硕顽石4 笔记本 硬盘分区表GPT ...
- Centos7 优盘U盘安装以及解决安装时引导错误
一.使用UltraISO将安装镜像iso文件,写入优盘(写入硬盘映像).将优盘盘符名改为CENTOS7,否则以后引导很麻烦二.将优盘插入要安装CentOS7的电脑,设置开机U盘启动三.并启动到安装界面 ...
- ubuntu10.04+win7双系统,重装win7后,恢复grub引导菜单以及命令行引导linux
我在我的小Y上安装了ubuntu10.04和win7旗舰版的双系统,采用的是grub引导.今天win7不知道哪儿出了问题,windows update更新一直报错,(当然360也是打不上滴)网上查了很 ...
- kali linux 更新软件源,安装中文输入法,修复Linux与windows引导菜单解决windows引导丢失
1. 更新软件源打开sources.list文件,进行添加更新源:leafpad /etc/apt/sources.list 2. 添加软件源#官方源 deb http://http.kali.org ...
- Windows恢复Grub引导,用grub安装ubuntu
http://www.linuxidc.com/wap.aspx?nid=18027&p=&cp=&cid=http://m.blog.chinaunix.net/uid-22 ...
- Linux与Windows 10用grub引导教程
前言 去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了简书上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程.由于去年对于写教程还 ...
- [转]使用Ubuntu Live CD修复Grub引导教程
这个教程的方法我用过了,能够解决了我的问题. 这篇文章主要介绍了使用Ubuntu Live CD修复Grub引导教程,本文以 Ubuntu Live CD 修复 Grub 引导为例,需要的朋友可以参考 ...
- windows重装系统后grub引导菜单修复方法(亲自实验过)
问题: 电脑安装的是windows7+ubuntu 15.10双系统.windows重装后,grub引导界面消失. 解决方法有两大步: 1.进入ubuntu; 2.在ubuntu中修复grub. 一. ...
- win + ubuntu 双系统 grub引导项修复
ubuntu liveCD模式,找到ubuntu的系统盘位置,挂载到系统上面,然后使用grub进行修复 ubuntu liveCD模式下是用boot-repair软件进行修复 grub急救模式 1. ...
随机推荐
- Jquery实现文本框获取焦点清空内容,失去焦点重新获得内容的公共函数
最近在做一个同城交友网站你给我吧(www.niyuewo.com)时写的一个函数与大家分享: //清除input中的内容 $(document).ready(function(){ $("i ...
- Disruptor 源码阅读笔记--转
原文地址:http://coderbee.net/index.php/open-source/20130812/400 一.Disruptor 是什么? Disruptor 是一个高性能异步处理框架, ...
- LeetCode18 4Sum
题意: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...
- WPF之复杂形状控件
有的时候想将一张图片变成一个按钮.当然这里不是单纯讲图片作为按钮的背景. 这两者是有区别的: 前者图片即按钮,比如你有一个空心的圆圈,当你点击中间空心部分的时候是没有任何反应的因为它不是属于按钮的一部 ...
- 【阿里云产品公测】一句话告诉你什么样的人该使用ACE,如何使用ACE
作者:阿里云用户小鸡咕咕 首先回应标题,这一句话就是:看完这篇帖子你就知道了. 前言 写在文章之前,我想先阐述一下写这篇文章的意义.可能大伙就要说了,写这篇文章不就是为了200的代金券吗?错, ...
- 新手教程之使用Xib自定义UITableViewCell
新手教程之使用Xib自定义UITableViewCell 前言 首先:什么是UITableView?看图 其次:什么是cell? 然后:为什么要自定cell,UITableView不是自带的有cell ...
- NSDate简单介绍
NSDate简单介绍 一:NSDate是一个日期\时间方面的类,主要用来创建\获取时间 1.NSDate对象的创建: date 创建一个当前系统日期和时间的对象 dateWithTimeInterva ...
- iOS 导航栏颜色字体等的自定义
1.设置导航栏中间文字的文字颜色和文字大小 方法一:系统方法 self.title = @"下载微课";//在有navigationController的控制器中,作用与self. ...
- 使用spring + cxf +tomcat构建webservice
这里使用maven构建的项目. 首先,我们构建一个maven项目: 然后将pom.xml文件中的内容拷贝到新建项目的pon.xml文件中: <project xmlns="http:/ ...
- 强大的JQuery(一)--基础篇
JQuery是一个优秀的Javascript框架,是轻量级的js库,使用jQuery将极大的提高编写javascript代码的效率,,让写出来的代码更加优雅,更加健壮. 学好了jquery,我们相当于 ...