总结一下网上找的一些grub的资料:
以前grub的启动配置文件还是menu.lst,到了ubuntu9.10的时候更名为grub.cfg,之后ubuntu 一直沿用grub.cfg,不过这个文件的内容变更不大。在ubuntu中,grub.cfg(menu.lst)就相当于windows系统下的boot.inf文件,记录着一些启动配置信息,在这里为大家介绍一些简单的设置规则。
grub.cfg文件目录:/boot/grub/grub.cfg,
下面贴个别人分析过的代码压压阵,是老版的menu.lst,但用法跟现在的grub.cfg基本类似。上代码!
==============================================================================
default 0
timeout 3
hiddenmenu
title Ubuntu 9.04, kernel 2.6.28-11-generic
uuid bb77114e-07a7-44a4-9345-4cc9f6e25296
kernel /vmlinuz-2.6.28-11-generic root=UUID=5e0cc8d2-2b7f-41a5-aa58-acc670569b5f ro quiet splash
initrd /initrd.img-2.6.28-11-generic
quiet
title Ubuntu 9.04, kernel 2.6.28-11-generic (recovery mode)
uuid bb77114e-07a7-44a4-9345-4cc9f6e25296
kernel /vmlinuz-2.6.28-11-generic root=UUID=5e0cc8d2-2b7f-41a5-aa58-acc670569b5f ro single
initrd /initrd.img-2.6.28-11-generic
title Windows 95/98/NT/2000
root (hd0,0)
makeactive
chainloader +1
title Ubuntu 9.04, memtest86+
uuid bb77114e-07a7-44a4-9345-4cc9f6e25296
kernel /memtest86+.bin
quiet
==============================================================================
(1)default 0:此选项是在默认的情况下,GRUB启动哪个操作系统,如果装了多个操作系统,GRUB能够指定默认是启动那个操作系统。如果是0,则默认启动第一个(最上面的)的操作系统;如果是1,则默认第二个,以此类推。
(2)timeout 3:超时时间,单位是秒,在此时间内如果用户没有进行任何操作,那么将启动default指定的操作系统,如果是正数,则此等待时间规定为秒数,如果是0,则立刻进入指定操作系统,如果是负数,则进入GRUB的程序界面,一直等待用户选择进入指定的操作系统。
(3)hiddenmenu:表示隐藏GRUB的程序界面,在Ubuntu系统中,默认情况下GRUB的程序界面是隐藏的,如果想显示,则需要按提示按下Esc键。
(4)title Ubuntu 9.04, kernel 2.6.28-11-generic:表示出现在GRUB程序界面中的字符串,这里可以是任何字符串,原则上都使用引导的操作系统的名称。
(5)root(hd0,1):这个是GRUB中分区的表示方法,GRUB程序中分区的表示方法与Ubuntu系统中的表示分区方法不同,在Ubuntu中表示分区的方法如同hda1:其中h表示IDE硬盘,d表示设备,a表示第一个IDE设备中的主盘,1表示此硬盘的第一个主分区(具体分配信息请查阅其他有关资料)。而在grub中是使用(hd0,1)的方式表示的,其中h表示IDE硬盘,d表示设备,0表示第一块IDE设备中的主盘,1表示此硬盘上的第二个分区。因此在GRUB程序v中,硬盘的分区是从0开始的,而硬盘数也是从0开始的,如Ubuntu系统的hdb5在GRUB程序中就表示为(hd1,4)。注意,前面的root表示的是操作系统的启动分区,而不是root目录。
(6)kernel:kernel及其后面的部分指定的是具体的内核文件,并且根据分区的挂载点和特性,后面指定了内核文件所在位置以及内核文件名,并且指明了跟目录所在的分区,并且将其以只读(ro)方式挂载。
(7)initrd:这部分是虚拟磁盘的文件名。
(8)chainloader+1:存在Windows操作系统的时候就会有这一项,这是Ubuntu采用的链式启动引导器,即表示启动分区有GRUB的启动分区直接下移到下一个位置(windows的引导位置)。
下面贴一段另一个地方找来的旧一点grub.cfg的代码:
在### BEGIN /etc/grub.d/10_linux ###后面的部分记录着启动选项的信息。
例如:
menuentry "Ubuntu, Linux2.6.32-22-generic" {
insmod ntfs
set root=’(hd0,5)’
search –no-floppy –fs-uuid –set 0e9ca6229ca60475
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz-2.6.32-22-generic root=/dev/sda5loop=/ubuntu/disks/root.disk ro quietsplash
initrd /boot/initrd.img-2.6.32-22-generic
}
这是奶牛的ubuntu系统的第一个启动选项,第一行显示的是ubuntu的名称Ubuntu, Linux 2.6.32-22-generic,引号内的内容可以任意修改, insmod ntfs是载入模块信息,例如insmod jpeg可以添加jpg支持,如要使用png或tga 文件做背景,加上insmod png或insmod tga,。set root=’(hd0,5)’这里很关键,这里是记录系统从那个分区启动,这里的顺序可能与你在windows下看到的顺序有所不同,因为windows下系统分区顺序是根据分区号来的,而分区号可以任意更改,而这里是物理意义上的顺序,你可以通过在终端中输入df命令查看挂载分区信息。这里hd0是指第一块物理硬盘,顺序也是从0开始,后面的5是指第6个分区,顺序也是从0开始排。讲到这里,那些在安装完ubuntu之后却没有windows启动选项的朋友们应该找到些思路了吧,对,我们就可以利用这个信息进行添加,比如我们可以添加
title Windows XP
root (hd0,0)
makeactive
chainloader +1
表示从第一块儿硬盘的第一个分区进行启动widows xp系统。
linux /boot/vmlinuz-2.6.32-22-genericroot=/dev/sda5 loop=/ubuntu/disks/root.disk ro quiet splash
在这句中,splash表示闪屏,如果你不喜欢开机看到那个ubuntu的logo界面,你可以删除splash这个单词,这样ubuntu就不会以文字模式启动。
最后再附加一个windows 7的默认启动选项
menuentry "Windows 7 (on /dev/sda1)" {
insmod ntfs
set root=’(hd0,1)’
search –no-floppy –fs-uuid –set 44c07536c0752f74
chainloader +1
}
这里的search –no-floppy –fs-uuid –set 44c07536c0752f74是设定uuid=****的分区为root,和上句set root=’(hd0,1)作用一样,如果一致,可删除,如果不一致则uuid起作用。
再贴一段带注释的grub.cfg的源代码,也是网上找来的:
grub2改用grub.cfg为配置文件,配置文件包含以下基本内容:
### BEGIN /etc/grub.d/00_header ###
load_env
#加载变量,如果在grubenv保存变量,则启动时装载
set default="0"
#设置默认引导项,默认值为0
insmod ext2
#插入文件系统支持的模块,除了用作启动的分区外,其他分区格式可在menuentry底下再添加
set root=(hd0,8)
# 指定系统root分区,也就是 / 分区
search --no-floppy --fs-uuid --set 2d61e5f9-1d2a-4167-a6f1-b991ba00878b
#指定uuid=2d61e5f9-1d2a-4167-a6f1-b991ba00878b的分区为root分区,如果前面的分区号(hd0,8)的#uuid与这里的uuid一致,这两句作用一样,如果不一致,则指定uuid的起作用。
if loadfont /usr/share/grub/unicode.pf2 ; then
#设置终端字体,unicode.pf2支持中文字符显示
set gfxmode=640x480
#设置显示分辨率,默认为640x480,可用800x600,1024x768,建议跟你想设定的图片大小一致
insmod gfxterm
#插入终端模块gfxterm,支持中文字符显示和支持24位图像
insmod vbe
#插入vbe模块,GRUB2引入模块化机制,要使用它,需要在这里加入
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
#设定grub2终端为gfxterm
fi
fi
if [ ${recordfail} = 1 ]; then
set timeout=-1 # 若有启动失败的记录,则菜单项不再倒计时
else
set timeout=10 #倒计时10秒后进按默认启动项启动
fi
#设定默认启动前等待时间,默认为10秒
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
#设定菜单字体及背景颜色
set menu_color_highlight=black/blue
#设定选择项字体及背景颜色
#如果使用默认,背景将完全被蓝色挡住了,需要修改blue为black,背景图片才能显示
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
#10_linux为系统自动添加的当前root分区linux引导项
#每个菜单项要包括menuentry双引号" "和大括号{ }才完整,否则不显示菜单
menuentry "Ubuntu, Linux 2.6.31-10-generic" {
set quiet=1
insmod ext2
set root=(hd0,8)
search --no-floppy --fs-uuid --set 2d61e5f9-1d2a-4167-a6f1-b991ba00878b
#这句与set root=(hd0,8)效果一样,可删除其一,二者不一致以这句为准
linux /boot/vmlinuz-2.6.31-10-generic root=UUID=2d61e5f9-1d2a-4167-a6f1-b991ba00878b ro quiet splash
#不喜欢看到一长串的, roo=UUID=***可用root=/dev/sda8(/分区的分区号)代替
initrd /boot/initrd.img-2.6.31-10-generic
}
…
### END /etc/grub.d/10_linux ###
#20_memtest86+为系统自动添加的内存测试菜单项
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###
#30_os-prober或30_others为系统自动查找并添加其他系统菜单项,按windows,linux,macos顺序
#查找并添加,支持windows 7识别
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_otheros ###
# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda1
menuentry "Microsoft Windows XP Professional" {
set root=(hd0,1)
search --no-floppy --fs-uuid --set e852-230b
drivemap -s (hd0) $root
#对以ntldr引导的系统如win2000,xp,win2003,因其引导机制只能从第一硬盘启动,系统会自动添加#映射命令,对vista和win7就没有这句命令
chainloader +1
}
### END /etc/grub.d/30_otheros ###
#40_custom为自定义的启动项,如启动cdlinux
### BEGIN /etc/grub.d/40_custom ###
menuentry "CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
### END /etc/grub.d/40_custom ###
经过这三位大神前辈的讲解基本就能看懂现在的grub.cfg文件了,再根据自己的需求修改一下,立马觉得自己棒棒哒~
(抱歉当时找这些资料的时候没有记录出处,如果上面三个大神发现被我这么用很不爽的话就跟我讲一下,我立马躲起来)