GRUB2启动代码详解
GRUB启动命令详解

GRUB启动命令详解一、菜单命令菜单命令只能用于grub配置文件的全局配置部分,不能用在grub命令行交互界面,菜单命令在配置文件中应放在其它命令之前。
1、default //设置默认启动的菜单项2、fallback //设置启动某菜单项失败后反回的菜单项3、hiddenmenu //隐藏菜单界面4、timeout //设置菜单自动启动的延时时间5、title //开始一个菜单项二、常规命令常规命令可以应该于配置文件和grub命令行交互界面,可使用的常规命令有1、bootp //通过bootp初始化网络设备2、color //设置菜单界面的颜色3、device //指定设备文件作为驱动器4、dhcp //通过DHCP初始化网络设备5、hide //隐藏某分区6、ifconfig //手工配置网络设备7、pager //改变内部页程序的状态8、partnew //新建一个主分区9、parttype //改变分区的类型10、password 为菜单界面设置口令11、rarp //通过RARP初始化网络设置12、serial //设置串口设备13、setkey //设置键盘映射14、splashimage //设置GRUB启动时的背景图片文件15、termainal //选择终端类型16、tftpserver //指定TFTP服务器17、unhide //还原某隐藏分区三、命令行和菜单项命令命令行和菜单项命令可应该于GRUB配置文件的菜单项设置中,也可以用在GRUB命令交互界面。
1、bolcklist //显示某文件所在分区位置(block list notation)2、boot //启动操作系统3、cat //显示文件内容4、chainloader //把启动控制权软交给另外的启动引导器5、cmp //比较两个文件6、configfile //加载已存在的GRUB配置文件7、debug //设置为debug模式8、displayapm //显示APM BIOS信息9、displaymem //显示内存配置10、embed //嵌入Stage 1.5文件11、find //查找包括某文件的所有设备12、fstest //测试文件系统13、geometry //显示某驱动器的物理信息14、halt //停止计算机运行(软件关机)15、help //显示GRUB的命令帮助信息16、impsprobe //查询对称多处理器(SMP)的信息17、initrd //加载initrd文件18、install //安装GRUB19、ioprobe //查询某驱动器的输入输出(I/O)端口20、kernel //引导操作系统内核21、lock //锁定某GRUB导菜单项,使其输入密码后才可启动22、makeactive //激活某主分区23、map //虚拟映射某驱动器24、md5crypt //使用MD5加密口令25、module //加载模块26、modulenounzip //加载模块不进行解压27、pause //暂停并等待按键28、quit //退出GRUB29、reboot //重新启动计算机30、read //读取内存中的内容31、root //设置GRUB的root设备32、rootnoverify //设备GRUB的root设备但不装载文件系统33、savedefault //保存当前的启动菜单项为默认启动34、setup //自动安装GRUB35、testload //从文件系统中测试读取某文件36、testvbe //测试VESA BIOS EXTENSION37、uppermem //强制设置主机上位内存的大小38、vbeprobe //查询VESA BIOS EXTENSION信息GRUB 里的设备命名法则它使用了UNIX对设备的命名方法.比如我们拥有两块硬盘,那么采用这种形式(hdx,y), 这里,x,y,都是从0开始计数的.所以两块硬盘是 (hd0,y),(hd1,y). 他们位于第一个IDE接口上. 对 hd0 来说, 请看下图:(注, C: 为第一主分区, 其他分区是扩展分区.由于主分区只能有四个,即 0,1,2,3, 所以第一个扩展分区的编号从 4 开始.)这是硬盘,那么光驱哪? 对,采用 (cd) 就可以了. 网络设备使用 (nd). 我估计,以后支持usb以后,可以使用 (ud). ;-) 欢迎你的参与,我们的开发还在继续.ROOT的使用格式是:ROOT(HDX,Y)其中X从0---N,Y也是。
grub2 的cfg写法 -回复

grub2 的cfg写法-回复"grub2的cfg写法" - 一个详细解析引言:GRUB(GNU GRand Unified Bootloader)是一个用于多操作系统的引导程序,其最新版本是GRUB2。
GRUB2的配置文件负责定义操作系统启动选项,以及引导过程中各种设置。
在本篇文章中,我们将一步一步回答有关GRUB2配置文件(cfg)的各种问题,旨在帮助读者了解如何正确地编写和修改这些文件。
第一步:打开配置文件GRUB2的配置文件通常位于/boot/grub目录下,文件名为grub.cfg。
要打开此文件,您可以使用任何文本编辑器,例如vi或nano。
请注意,修改配置文件可能需要管理员权限,因此请确保您以root用户身份登录。
第二步:了解配置语法GRUB2的配置文件使用一种称为GRUB命令行语言的语法。
它由一系列命令和参数组成,并按照特定的规则和结构进行排列。
在编写GRUB2配置文件时,我们需要了解一些常用的命令和语法规则,例如菜单项的创建、内核或操作系统的引导、启动参数的设置等。
第三步:编辑菜单项GRUB2的配置文件中的每个菜单项代表一个操作系统或内核镜像。
要添加新菜单项,我们需要使用"menuentry"命令,并在双引号中指定菜单项的名称。
下面是一个示例菜单项的定义:menuentry 'Ubuntu 20.04 LTS' {set root='hd0,msdos1'linux /vmlinuz-5.4.0-26-generic root=/dev/sda1 roinitrd /initrd.img-5.4.0-26-generic}在上面的示例中,菜单项的名称为"Ubuntu 20.04 LTS"。
接下来,我们使用"set"命令将根分区设置为"hd0,msdos1"。
Grub2配置详解

Grub2配置详解一、grub.cfg详解(红色为说明)grub.cfg 默认为只读,要修改前先设为可写sudo chmod +w /boot/grub/grub.cfgset default=0#默认为0insmod jpeg#添加jpg支持,如要使用png或tga文件做背景,加上 insmod png或insmod tgainsmod ext2#除了用作启动的分区外,其他分区格式可在menu底下再添加set root=(hd0,7)#设定root分区search --no-floppy --fs-uuid --set f255285a-5ad4-4eb8-93f5-4f767190d3b3#设定uuid=****的分区为root,和上句重复,可删除# 以下为终端配置if loadfont /usr/share/grub/unicode.pf2 ; then#设置终端字体,unicode.pf2支持中文显示set gfxmode=640x480#设置分辨率,默认为 640x480,可用800x600,1024x768,建议跟你想设定的图片大小一致insmod gfxterm#插入模块 gfxterm,支持中文显示,它还支持 24 位图像insmod vbe#插入 vbe 模块,GRUB 2 引入很多模块的东西,要使用它,需要在这里加入if terminal_output gfxterm ; then true ; else# For backward compatibility with versions of terminal.modthat don't# understand terminal_outputterminal gfxterm#设置 GRUB 2 终端为 gfxtermfifiset timeout=10background_image (hd0,7)/boot/images/1.jpg#设置背景图片### END /etc/grub.d/00_header ###### BEGIN /etc/grub.d/05_debian_theme ###set menu_color_normal=white/blackset menu_color_highlight=cyan/black#这两行为 Debian 下的菜单颜色设置,如果默认的话,你会发现背景完全被蓝色挡住了,你需要修改 blue 为 black,这样背景就会出现### END /etc/grub.d/05_debian_theme #### 10_linux 为自动添加的当前root分区linux引导项### BEGIN /etc/grub.d/10_linux ####菜单项,要包括 menuentry 双引号" " 和大括号 { }才完整,否则不显示菜单menuentry "Ubuntu, Linux 2.6.31-9-386" {insmod ext2set root=(hd0,7)search --no-floppy --fs-uuid --set f255285a-5ad4-4eb8-93f5-4f767190d3b3#这句与set root=(hd0,7)重复,可删除linux /boot/vmlinuz-2.6.31-9-386 root=UUID=f255285a-5ad4-4eb8-93f5-4f767190d3b3 ro quite splash#不喜欢看到一长串的, roo=UUID=***可用root=/dev/sda7代替initrd /boot/initrd.img-2.6.31-9-386}### END /etc/grub.d/10_linux ###### BEGIN /etc/grub.d/20_memtest86+ ###menuentry "Memory test (memtest86+)" {linux16 /boot/memtest86+.bin}### END /etc/grub.d/20_memtest86+ #### 自动添加存在于其他分区的系统引导项### BEGIN /etc/grub.d/30_os-prober ####windows 启动菜单menuentry "Windows Vista (loader) (on /dev/sda1)" {insmod ntfs#windows格式为ntfs,或为fat32改为insmod fatset root=(hd0,1)search --no-floppy --fs-uuid --set ece067d2e067a196#可删除#grub2比较先进的地方就是如果发现windows启动是通过ntldr 引导的,定为2000/xp/2003,会在这加上drivemap -s (hd0) ${root} ,作用相当于grub的map,可正常启动非第一硬盘的xp/2003系统。
grub2修改启动菜单原理

windows linux 双系统grub2默认启动项的更改和早期grub的启动菜单不一样,以前只要修改/boot/grub/menu.lst就行了。
linux7中已经没有menu.lst文件了。
+++++++++++++++++++以下是重点理论知识++++++++++++++++++++++grub2由三个部分组成:/etc/default/grub文件、/etc/grub.d目录、/boot/grub/grub.cfg文件。
在开机启动时,linux系统是调用/boot/grub/grub.cfg 文件执行的。
但这个文件即使手动编辑后也是会被还原的,为什么呢?当我们或linux系统更新后,会自动执行update-grub更新启动菜单命令。
该命令会根据/etc/default/grub文件和/etc/grub.d/的所有配置文件重新生成/boot/grub/grub.cfg文件;也就是说update-grub命令执行后,/boot/grub/grub.cfg文件就被更新了。
+++++++++++++++++++++以上是理论知识+++++++++++++++++++++++++++++配置文件:/etc/default/grub文件//保存开机默认启动项、倒计时内容;GRUB_TIMEOUT=5 //超时时间GRUB_DEFAULT=saved //开机菜单默认项,可以使用0-nGRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console" /启用 consoleGRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet" //追加内核安全性;GRUB_DISABLE_RECOVERY="true" //禁止显示救援模式;/etc/grub.d/* //保存各个启动项;[root@tang ~]# ls /etc/grub.d/00_header 10_linux 30_os-prober README00_tuned 20_linux_xen 40_custom01_users 20_ppc_terminfo 41_custom其中,30_os-prober 是windows系统的启动项;其中,10_linux 是linux 系统的启动项;其中,/etc/grub.d/00_header //初始化默认选项,超时时间其中,/etc/grub.d/05_debian_theme //配置引导画面,主题颜色;其中,04_custom //自定义菜单;**注意**,这里的每个文件前面都有数字组成;数字越小启动顺序就越靠前。
grub.cfg

Ubuntu 9.10 grub2的启动配置文件grub.cfg[日期:2009-12-03] 来源:Ubuntu社区作者:smallapple hacklong1摘记的比较乱,自己做个笔记,大家略去。
(LinuxIDC)升级到Ubuntu 9.10后,就要接触grub2了,它和以前的版本有了很多的不同。
这里是一个基础教程。
一、grub2的启动配置文件grub.cfggrub2的启动配置文件grub.cfg是/boot/grub/grub.cfg,而不是以前的memu.lst。
如果你是多系统,有Ubuntu和windows,那么用下面的命令,可以使grub2得到所以可以启动的系统。
sudo update-grub实际就是让系统自己生成合适的grub.cfg文件。
这个grub.cfg文件是只读属性,so如果你要修改它,需要权限。
sudo chmod +w /boot/grub/grub.cfg然后可以编辑grub.cfg了。
sudo gedit /boot/grub/grub.cfg二、默认系统和等待时间1、set default=0这是说从第一项启动。
每个启动项都是以menuentry开始,menuentry后面“xxx”是启动项名称,然后{xxx}是启动代码。
### BEGIN /etc/grub.d/10_linux###menuentry “Ubuntu, Linux 2.6.31-14-generic” {recordfail=1if [ -n ${have_grubenv} ];then save_env recordfail;fiset quiet=1insmod ext2set root=(hd0,6)search –no-floppy –fs-uuid –set 040508ff-fec7-4c66-ba64-a09f8abe8059linux /boot/vmlinuz-2.6.31-14-generic root=UUID=040508ff-fec7-4c66-ba64-a09f8abe8059 ro quiet splashinitrd /boot/initrd.img-2.6.31-14-generic}menuentry “Ubuntu, Linux 2.6.31-14-generic (recovery mode)” {recordfail=1if [ -n ${have_grubenv} ];then save_env recordfail; fiinsmod ext2set root=(hd0,6)search –no-floppy –fs-uuid –set 040508ff-fec7-4c66-ba64-a09f8abe8059linux/boot/vmlinuz-2.6.31-14-genericroot=UUID=040508ff-fec7-4c66-ba64-a09f8abe8059ro singleinitrd /boot/initrd.img-2.6.31-14-generic}### END /etc/grub.d/10_linux###### 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+###### BEGIN /etc/grub.d/30_os-prober###menuentry “Microsoft Windows XP Home Edition (on /dev/sda1)” {insmod ntfsset root=(hd0,1)search –no-floppy –fs-uuid –set 5c108a1c1089fd70drivemap -s (hd0) ${root}chainloader +1}if keystatus; thenif keystatus –shift; thenset timeout=-1elseset timeout=10fielseif sleep$verbose –interruptible 3 ; thenset timeout=10Fifi### END /etc/grub.d/30_os-prober###### BEGIN /etc/grub.d/10_linux###menuentry “Ubuntu, Linux 2.6.31-14-generic” {recordfail=1if [ -n ${have_grubenv} ]; then save_env recordfail; fiset quiet=1insmod ext2set root=(hd0,6)search –no-floppy –fs-uuid –set 040508ff-fec7-4c66-ba64-a09f8abe8059linux /boot/vmlinuz-2.6.31-14-generic root=UUID=040508ff-fec7-4c66-ba64-a09f8abe8059 ro quiet splashinitrd /boot/initrd.img-2.6.31-14-generic}menuentry “Ubuntu, Linux 2.6.31-14-generic (recovery mode)” {recordfail=1if [ -n ${have_grubenv} ]; then save_env recordfail; fiinsmod ext2set root=(hd0,6)search –no-floppy –fs-uuid –set 040508ff-fec7-4c66-ba64-a09f8abe8059linux /boot/vmlinuz-2.6.31-14-generic root=UUID=040508ff-fec7-4c66-ba64-a09f8abe8059 ro singleinitrd /boot/initrd.img-2.6.31-14-generic}### END /etc/grub.d/10_linux ###### 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+ ###### BEGIN /etc/grub.d/30_os-prober ###menuentry “Microsoft Windows XP Home Edition (on /dev/sda1)” {insmod ntfsset root=(hd0,1)search –no-floppy –fs-uuid –set 5c108a1c1089fd70drivemap -s (hd0) ${root}chainloader +1}if keystatus; thenif keystatus –shift; thenset timeout=-1elseset timeout=10fielseif sleep$verbose –interruptible 3 ; thenset timeout=10fifi### END /etc/grub.d/30_os-prober ###我的第五个启动项是menuentry “Microsoft Windows XP Home Edition (on /dev/sda1)”,我要它默认是以xp启动,所以修改为set default=”4″。
grub2 的cfg写法 -回复

grub2 的cfg写法-回复Grub2的CFG写法Grub2是一个广泛被使用的引导加载程序,它被用来在计算机启动时选择操作系统或内核。
Grub2的配置文件(通常被称为grub.cfg)是一个重要的组成部分,它决定了引导后面的操作系统或内核。
本文将为您详细介绍Grub2的CFG写法,通过一步一步的解释,帮助读者理解和创建一个有效的grub.cfg文件。
第一步:了解grub.cfg的结构在我们开始编写grub.cfg之前,我们需要了解其基本结构。
grub.cfg是一个文本文件,其中包含一系列的菜单条目。
每个菜单条目对应于一个操作系统或内核,包括该操作系统的启动选项。
每个菜单条目的基本结构如下:menuentry '菜单标题' {操作系统启动选项}'菜单标题'是我们为特定操作系统或内核定义的名称,可以根据需求更改。
而“操作系统启动选项”则包括指导Grub2引导该操作系统所需的命令。
第二步:创建一个基本的菜单条目让我们创建一个基本的菜单条目,以便了解如何编写grub.cfg。
menuentry 'Ubuntu' {search file no-floppy set=root /vmlinuzlinux /vmlinuz root=/dev/sda1initrd /initrd.img}在这个例子中,我们为操作系统Ubuntu创建了一个菜单条目。
首先,我们使用search命令来查找指定的内核文件(/vmlinuz),set=root将其设置为根文件系统。
然后,我们使用linux命令指定内核的位置(/vmlinuz),并通过root=/dev/sda1参数将根文件系统设为/dev/sda1。
最后,我们使用initrd命令指定初始内存映像文件(/initrd.img)。
第三步:添加更多的菜单条目和选项现在我们已经创建了一个基本的菜单条目,让我们继续添加更多的菜单条目和选项。
GRUB2及启动过程详解

GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (2)3. GRUB2 的bootstrap image文件 (3)3.1. boot.img (3)3.2. diskboot.img (4)3.3. kernel.img (4)3.4. core.img (4)3.5. *.mod (4)4. 对比GRUB Legacy (5)4.1. stage1 (5)4.2. *_stage1_5 (5)4.3. stage2 (5)5. grub2-mkimage定制core.img (6)6. GRUB2安装 (7)6.1. Linux是怎么命名设备(/dev/sda) (7)6.2. MBR(Master Boot Record) (8)6.3. MBR分区表DPT(Disk Partition Table) (10)6.4. LBA and CHS (14)6.4.1. CHS(cylinders-heads-sectors) (14)6.4.2. LBA(Logical Block Address) (14)6.5. boot.img和core.img安装 (15)6.6. 硬盘总结 (18)7. 启动过程 (19)7.1. BIOS (19)7.2. GRUB2中boot.img (20)7.2.1. Step1无条件跳转 (20)7.2.2. Step2 初始化 (20)7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)7.2.6. Step6 执行core.img第一条语句 (27)7.2.7. Step7 boot.img总结 (27)7.3. GRUB2中core.img (28)7.3.1. diskboot.img (28)7.3.2. GRUB2 core Startup (34)7.3.3. GRUB主函数即GRUB主要功能 (37)7.3.4. 加载Linux Kernel (38)7.4. Linux kernel (47)8. 结束语 (48)9. 参考文献 (48)1.概述计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):现在的Boot Loader有很多类型,大致如下:1.对Linux来说GRUB2占据了统治地位2.对Windows来说Bootmgr/BCD占据了统治地位3.对Apple系统缺省的是BootX作为一名计算机工程师,了解Boot Loader的原理是很重要。
GRUB2启动详解

目前Grub1已经停止开发了,不再增加新的功能,所有的开发都转移到Grub2上了,Grub 2 是新一代的Grub,它实现了一些Grub中所没有的功能:1.模块化设计不同于Grub的单一内核结构,Grub 2 的功能分布在很多的小模块中,并且能在运行时动态装载和卸除。
2.支持多体系结构Grub 2可支持PC(i386), MAC(powerpc)等不同的体系机构,而且支持最新的EFI架构。
3.国际化的支持Grub 2 可以支持非英语的语言。
4.内存管理Grub 2 有真正的内存管理系统。
5.脚本语言Grub 2 可以支持脚本语言,例如条件,循环,变量,函数等。
当然,Grub 2正处在开发阶段,因此以上的某些功能可能现阶段还不是很完善。
如果你熟悉Grub2,应该可以看明白里面的内容。
要注意的是:a、timeout, default等参数用变量来储存b、菜单项由menuentry定义c、第1个分区是(hd0,1)而不是(hd0,0)理论的东西说多了大家估计也晕,举个简单的例子:在grub1中,要改变启动背景的时候只能选择支持640X480分辨率并且格式也只能是.xpm的图片,分辨率稍微大点的图就显示不出来了,但grub2不存在这个问题,它有更绚丽的菜单界面,grub2默认.png .tga .jpeg等很多种格式的图片都支持,而且支持的图片分辨率也更大。
GRUB2启动代码分析## DO NOT EDIT THIS FILE## It is automatically generated by /usr/sbin/grub-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#### BEGIN /etc/grub.d/00_header ###if [ -s $prefix/grubenv ]; then#如果“prefix/grubenv”目录不为空load_env#从grubenv文件中加载环境变量fiset default="0"#启动第1项#if [ ${prev_saved_entry} ]; then #如果prev_saved_entry的值不为空set saved_entry=${prev_saved_entry} #将saved_entry的值设置成变量prev_saved_entry的值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GRUB2的介绍目前Grub1已经停止开发了,不再增加新的功能,所有的开发都转移到Grub2上了,Grub 2 是新一代的Grub,它实现了一些Grub中所没有的功能:1.模块化设计不同于Grub的单一内核结构,Grub 2 的功能分布在很多的小模块中,并且能在运行时动态装载和卸除。
2.支持多体系结构Grub 2可支持PC(i386), MAC(powerpc)等不同的体系结构,而且支持最新的EFI架构。
3.国际化的支持Grub 2 可以支持非英语的语言。
4.内存管理Grub 2 有真正的内存管理系统。
5.脚本语言Grub 2 可以支持脚本语言,例如条件,循环,变量,函数等。
当然,Grub 2正处在开发阶段,因此以上的某些功能可能现阶段还不是很完善。
如果你熟悉Grub2,应该可以看明白里面的内容。
要注意的是:a、timeout, default等参数用变量来储存b、菜单项由menuentry定义c、第1个分区是(hd0,1)而不是(hd0,0)理论的东西说多了大家估计也晕,举个简单的例子:在grub1中,要改变启动背景的时候只能选择支持640X480分辨率并且格式也只能是.xpm的图片,分辨率稍微大点的图就显示不出来了,但grub2不存在这个问题,它有更绚丽的菜单界面,grub2默认.png .tga .jpeg等很多种格式的图片都支持,而且支持的图片分辨率也更大。
GRUB2启动代码分析## DO NOT EDIT THIS FILE## It is automatically generated by /usr/sbin/grub-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#### BEGIN /etc/grub.d/00_header ###if [ -s $prefix/grubenv ]; then#如果“$prefix/grubenv”目录不为空load_env#从grubenv文件中加载环境变量fiset default="0"#启动第1项#if [ ${prev_saved_entry} ]; then #如果prev_saved_entry的值不为空set saved_entry=${prev_saved_entry}#将saved_entry的值设置成变量prev_saved_entry的值。
save_env saved_entry#将变量saved_entry保存到grubenv文件中。
set prev_saved_entry=#将prev_saved_entry的值设置为空save_env prev_saved_entry#将prev_saved_entry保存到grubenv文件中set boot_once=true#将boot_once的值设置为真(貌似是为了标志已经设置过启动的相关环境变量了)fifunction savedefault {if [ -z ${boot_once} ]; then#如果已经设置过相关环境变量saved_entry=${chosen}#用变量chosen的值给saved_entry赋值。
save_env saved_entry#将saved_entry保存到grubenv文件中fi}function recordfail { #存在启动失败记录时调用,设置变量recordfail。
set recordfail=1if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi#如果grubenv文件存在,并已设置过相关变量,就将变量recordfail保存到grubenv文件。
}insmod ext2#插入ext2文件系统支持的模块set root='(hd0,9)'#指定系统root分区,也就是/ 分区为第1个磁盘的第9个分区search --no-floppy --fs-uuid --set d9985e84-7b54-4e5d-8ce9-c25cf88330aa#指定uuid= d9985e84-7b54-4e5d-8ce9-c25cf88330aa的分区为root分区,如果前面的分区# 号(hd0,9)的uuid与这里的uuid一致,这两句作用一样,如果不一致,则指定uuid的起# 作用。
if loadfont /usr/share/grub/unicode.pf2 ; then#设置终端字体,unicode.pf2支持中文字符显示set gfxmode=640x480#设置显示分辨率,默认为640×480insmod gfxterm#插入终端模块gfxterm,支持中文字符显示和支持24位图像。
insmod vbe#插入vbe模块,GRUB2引入模块化机制,要使用它,需要在这里加入。
if terminal_output gfxterm ; then true ; else#检测grub2是否将终端设设定为gfxterm# For backward compatibility with versions of terminal.mod that don't# understand terminal_outputterminal gfxterm#设定grub2终端为gfxtermfifiinsmod ext2#插入ext2文件系统支持的模块set root='(hd0,9)'#指定系统root分区,也就是/ 分区为第1个磁盘的第9个分区search --no-floppy --fs-uuid --set d9985e84-7b54-4e5d-8ce9-c25cf88330aa#指定uuid= d9985e84-7b54-4e5d-8ce9-c25cf88330aa的分区为root分区,如果前面的分区# 号(hd0,9)的uuid与这里的uuid一致,这两句作用一样,如果不一致,则指定uuid的起# 作用。
set locale_dir=($root)/boot/grub/localeset lang=zhinsmod gettextif [ ${recordfail} = 1 ]; thenset timeout=-1 #若有启动失败的记录,则不再倒计时。
elseset timeout=10 #如果停留在grub选择系统界面,停顿时间就设置成10秒,十秒后按默认启动项#启动。
fi### END /etc/grub.d/00_header ###### BEGIN /etc/grub.d/05_debian_theme###设置菜单颜色和背景颜色set menu_color_normal=white/black#设定菜单字体及背景颜色set menu_color_highlight=black/light-gray#设定选择项字体及背景颜色### END /etc/grub.d/05_debian_theme ###### BEGIN /etc/grub.d/10_linux ####10_linux为系统自动添加的当前root分区linux引导项#菜单项,要包括menuentry 双引号" " 和大括号{ }才完整,否则不显示菜单menuentry ''Ubuntu,Linux 2.6.32-30-generic'' --class ubuntu --class gnu-linux --class gnu --class os {recordfail#执行recordfail 函数insmod ext2#插入ext2文件系统支持的模块set root='(hd0,9)'#指定系统root分区,也就是/ 分区为第1个磁盘的第9个分区search --no-floppy --fs-uuid --set d9985e84-7b54-4e5d-8ce9-c25cf88330aa#这句与set root=(hd0,9)效果一样,可删除其一,二者不一致以这句为准linux /boot/vmlinuz-2.6.32-30-generic root=UUID=d9985e84-7b54-4e5d-8ce9-c25cf88330aa ro quiet splash#加载内核# ro:可读写,当启动分区是JFS等格式时需要使用此参数使得系统可以在启动是存放日志。
#quiet:安静模式,不显示启动详细信息。
#splash:显示徽标。
initrd /boot/initrd.img-2.6.32-30-generic#初始RAM磁盘,在系统引导过程中挂载的一个临时根文件系统。
}menuentry ''Ubuntu,Linux 2.6.32-30-generic (恢复模式)'' --class ubuntu --class gnu-linux --class gnu --class os {#linux的恢复模式,与linux的启动项基本一样。
recordfail#执行recordfail 函数insmod ext2set root='(hd0,9)'search --no-floppy --fs-uuid --set d9985e84-7b54-4e5d-8ce9-c25cf88330aaecho '载入Linux ...'linux /boot/vmlinuz-2.6.32-30-generic root=UUID=d9985e84-7b54-4e5d-8ce9-c25cf88330aa ro single#加载内核貌似这个single参数就是指定的修复模式echo '载入引导虚拟磁盘。
'initrd /boot/initrd.img-2.6.32-30-generic#初始RAM磁盘,在系统引导过程中挂载的一个临时根文件系统。
}### END /etc/grub.d/10_linux ####20_memtest86+为系统自动添加的内存测试菜单项menuentry "Memory test (memtest86+)" {insmod ext2set root='(hd0,9)'search --no-floppy --fs-uuid --set=root f8656ad4-390d-4a72-832a-1f4b313ac793linux16 /boot/memtest86+.bin}menuentry "Memory test (memtest86+, serial console 115200)" {insmod ext2set root='(hd0,9)'search --no-floppy --fs-uuid --set=root f8656ad4-390d-4a72-832a-1f4b313ac793linux16 /boot/memtest86+.bin console=ttyS0,115200n8}### END /etc/grub.d/20_memtest86+ ###### BEGIN /etc/grub.d/30_os-prober #### 30_os-prober或30_others为系统自动查找并添加其他系统菜单项,按windows、# linux、macos顺序查找并添加,支持windows 7识别。