grub引导错误解决实例

我的电脑上一共是两块硬盘,1块固态硬盘(sda)装了win7,另外一块普通硬盘(sdb)装了UbuntuCentOS两个系统,系统启动的引导是装在sdb上面的ubuntu的grub2,它负责选择不同的操作系统来启动,OK,背景交代完了,接下来开始讲述我们出现的问题。

  昨天晚上给sdb新添加了一个分区,如下: 

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xa887a887

Device Boot      Start        End      Blocks  Id  System
/dev/sdb1            2048  125829119    62913536  83  Linux
/dev/sdb2      125829246  970502711  422336733    f  W95 Ext'd (LBA)
Partition 2 does not start on physical sector boundary.
/dev/sdb5      125829248  221983352    48077052+  7  HPFS/NTFS/exFAT
/dev/sdb6      221983424  228274807    3145692    b  W95 FAT32
/dev/sdb7      228274872  518603944  145164536+  7  HPFS/NTFS/exFAT
/dev/sdb8      518604008  782021941  131708967    7  HPFS/NTFS/exFAT
/dev/sdb9      782024704  918054911    68015104  83  Linux
/dev/sdb10      918056960  934834175    8388608  83  Linux
/dev/sdb11      934836224  951613439    8388608  83  Linux
/dev/sdb12      951615488  960004095    4194304  82  Linux swap / Solaris
/dev/sdb13      960004159  970502711    5249276+  83  Linux
Partition 13 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.0-46-generic
Found initrd image: /boot/initrd.img-3.13.0-46-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (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一下就可以看到它指向哪块硬盘了,如下:

grub引导错误解决实例

  我改了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-4937-8411-a69681c3b54e
        else
          search --no-floppy --fs-uuid --set=root d24c3228-5ffc-4937-8411-a69681c3b54e        fi
        linux /boot/vmlinuz-2.6.32-504.12.2.el6.i686 ro root=/dev/sdb8 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet vga=791
        initrd /boot/initramfs-2.6.32-504.12.2.el6.i686.img

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16588.html