2021-05-12 14:32:11
grub引導錯誤解決範例
我的電腦上一共是兩塊硬碟,1塊固態硬碟(sda)裝了win7,另外一塊普通硬碟(sdb)裝了Ubuntu和CentOS兩個系統,系統啟動的引導是裝在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一下就可以看到它指向哪塊硬碟了,如下:
我改了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
}
這是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.32-504.12.2.el6.i686)
root (hd0,9)
kernel /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
我原來只改了第2行的root命令選擇的分割區,而沒有改第三行中root命令選擇的分割區,這樣我的系統還是啟動不了。。
OK,把centos的組態檔一改,問題總算都是解決了!^ . ^
如何在Ubuntu12.04/12.10中重灌或修復Grub2引導 http://www.linuxidc.com/Linux/2012-11/74901.htm
Linux啟動引導過程 grub和mbr http://www.linuxidc.com/Linux/2013-07/87923.htm
grub 的安裝與使用 http://www.linuxidc.com/Linux/2013-07/87682.htm
grub載入程式組態檔分析 http://www.linuxidc.com/Linux/2013-07/87547.htm
CentOS 6.4 grub加密碼 http://www.linuxidc.com/Linux/2013-07/87124.htm
CentOS GRUB引導錯誤無法進入系統解決辦法 http://www.linuxidc.com/Linux/2014-11/108835.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-03/115303.htm
相關文章