修复grub2引导

项目最近都在windows下开发,整个team都被迫装了fedora和win7双系统。如果先装的是win7,后装的fedora会把grub引导装好。如果最后装的是windows,就必须修复一下grub,才能正确启动。GUN grub是一个多系统启动引导程序,具体介绍看这里。关于重装系统后怎么修复grub,网上有很多介绍,但是很多都是不求甚解,并不完全解决我的问题,特此将自己实践出的步骤记录在此,以备后用。

用LiveCD修复grub2

安装windows后修复grub2的方法很多,有各种系统修复工具还可以用grub4dos,但是我手边就有fedora16的liveCD,就不折腾其他的方法了。
使用live CD启动进入fedora16(这里因为我的window和linux装在不同的硬盘上,需要确保在bios里设置硬盘顺序是linux硬盘在前),

先找到linux安装在哪个硬盘分区

1
2
su
fdisk -l

因为我以前安装了fedora 16和19,两个系统还挂载了共同的数据分区,fdisk的结果是相当的复杂。

到底哪个才是我想找的Linux分区呢,只好把分区mount上来,看一下里面都是神马东西。

1
2
mount /dev/sda1 /mnt
ls /mnt

最后发现/dev/sda6里面的内容是这样的

其中包含启动时会加载的内核,这就是fedora16的/boot分区,那对应的/dev/sda7就是fedora16系统的其他部分了。

接下来把fedora16的硬盘挂载上来,重新安装grub,生成配置文件。

1
2
3
4
mount /dev/sda7 /mnt
mount /dev/sda6 /mnt/boot
grub2-install --root-directory=/mnt /dev/sda
grub2-mkconfig -o /boost/grub2/grub.cfg

修改grub2设置

关于修改grub2的设置,比如等待时间、启动顺序等,网上很多帖子给出的方法是修改/boot/grub2/grub.cfg,其实这是官方不推荐的方法,因为这个配置文件会在你重装系统或者升级内核之后被更新,你的个人设定都会丢失。更正确的方法是修改/etc/default/grub ,然后每次系统有修改时,执行grub2-mkconfig,都会根据这个文件生成新的/boot/grub2/grub.cfg。
我自己的grub(v1.99)配置如下:

1
2
3
4
5
GRUB_TIMEOUT=15
GRUB_DISTRIBUTOR="Fedora"
GRUB_DEFAULT=saved #使用上次启动的系统作为默认系统
GRUB_SAVEDEFAULT=true #记住上次启动的系统
GRUB_CMDLINE_LINUX="rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=us quiet SYSFONT=latarcyrheb-sun16 rhgb rd.luks=0 LANG=en_US.UTF-8 nouveau.modeset=0 rd.driver.blacklist=nouveau"

如果需要指定默认启动项,使用下面的命令

1
2
3
grep "submenu\|^\smenuentry" /boot/grub2/grub.cfg | cut -d "'" -f2 #list all possible menu entries
grub2-set-default "<submenu title>><menu entry title>" #set the desired default menu entry
grub2-editenv list #Verify the default menu entry