GRUB2启动引导器完全教程
最新Grub2全面教程

在命令行状态,可以根据需要加载或移除相应模块,也可用来启动在菜单没有显现的的系统。 比如,在第一硬盘的第一分区上装有 windows xp 系统,但在菜单上没显示出来,我们可以命令行状态下 输入命令启动:
grub>set root=(hd0,1) grub>chainloader +1 grub>boot 又比如启动第二硬盘第一逻辑分区上的 ubuntu 系统: grub>set root=(hd1,5) grub>linux /boot/vmlinuz-xxx-xxx root=/dev/sdb5 grub>initrd /boot/initrd.img-xxx-xxx grub>boot 其中内核 vmlinuz 和 initrd.img 的版本号可用按 Tab 键自动查看。 2、下面介绍下在 grub2 中一些常用的命令 1)help 查看命令用法,如 help search:查看 search 命令详细用法 2)set 设置变量值,如
10)loopback loopback 命令可用于建立回放设备,如 loopback lo0 (hd1,1)/abc.iso 可以使用 lo0 设备来访问 abc.iso 里的内容,比如说,可以从 abc.iso 里的软盘映像中启动 loopback lo0 (hd1,1)/aa.iso linux (lo0)/memdisk initrd (lo0)/abc.img 要删除某一回放设备,可以使用-d 参数: loopback -d lo0
11)pager 分页显示。 set pager=1
显示满一页时暂停,按 space 继续 set pager=0 取消分页显示 12)linux 用 linux 命令取代 grub 中的 kernel 命令 13)chainloader 调用另一个启动器,如 chainloader (hd0,1)+1 调用第一硬盘第一分区引导扇区内的启动器,可以是 windows 或 linux 的启动器
使用Ubuntu原生的Grub2作为主引导,引导六个系统方法

使⽤Ubuntu原⽣的Grub2作为主引导,引导六个系统⽅法下⾯是Grub2引导各种系统的⽰例。
其实,⼤家有经验的话,光看⽰例,⾃⼰应该就懂怎么改了(注意:所引导的Mac系统是PC⿊苹果)。
我的Grub2配置⽂件列表(/boot/grub/grub.cfg):set default=0set timeout=3# Windows本地系统启动menuentry "Windows NT, XP/2003/Vista/Win7/Win8.1" {set root='(hd0,msdos1)'drivemap -s (hd0) ${root}chainloader +1# 对于NT6系统,也可以⽤:ntldr /bootmgr}# ⿊苹果本地系统启动menuentry "Mac OS X 10.8.5, Mountain Lion" {drivemap -s (hd0) (hd0,msdos7)linux16 (hd0,msdos5)/SysBackup/memdisk iso rawinitrd16 (hd0,msdos7)/wowpc.iso}# Ubuntu本地系统启动menuentry "Ubuntu Mate x86_64 3.11.0-12 generic" {search --no-floppy --set --label matebuntulinux /boot/vmlinuz root=LABEL=matebuntu rw quietinitrd /boot/initrd.img}# WindowsPE应急启动menuentry "Windows PE Boot" {linux16 (hd0,msdos5)/SysBackup/memdisk iso rawinitrd16 (hd0,msdos5)/SysBackup/win2k3pe.iso}# UbuntuLiveCD应急启动menuentry "Ubuntu LiveCD Boot" {loopback lo (hd0,msdos5)/SysBackup/flashback7e.isolinux (lo)/casper/vmlinuz boot=casper iso-scan/filename=/SysBackup/flashback7e.isoinitrd (lo)/casper/initrd.lz}# Mac变⾊龙应急启动menuentry "Mac Chameleon Boot" {drivemap -s (hd0) (hd0,msdos5)linux16 (hd0,msdos5)/SysBackup/memdisk iso rawinitrd16 (hd0,msdos5)/SysBackup/mac-wowpc.iso}# 内存颗粒损换检测menuentry "Memory test (memtest86+)" {linux16 /boot/memtest86+.bin}# 标准⼆进制可引导⽂件引导# menuentry "Grub for Dos" {# ntldr (hd0,msdos1)/grldr # }。
使用Linux系统安装grub2到u盘并启动系统或者iso镜像文件

使⽤Linux系统安装grub2到u盘并启动系统或者iso镜像⽂件⼀、使⽤fdisk命令对u盘进⾏分区1、fdisk -l 查看那个设备时u盘(现在以/dev/sdc为例)2、fdisk /dev/sdc 对u盘分区 p:查看当前分区 d:删除当前分区 n:新建分区 w:保存⼆、使⽤mkfs 将u盘格式化为fat32格式,fat32 通⽤性⽐较好mkfs.vfat -F 32 /dev/sdc1 或者 mkfs -t vfat /dev/sdc1三、将grub2安装到u盘1、sudo grub-install --boot-directory=/media/u /dev/sdc 问题:--boot-dircetory 和 --root-dircetory 的区别或:grub-install --no-floppy --boot-directory=/mnt/img /dev/sdc2、 sudo update-grub3、sudo grub-mkconfig -o /media/u/boot/grub/grub.cfg以上代码中的/dev/sdc是U盘对应设备,/media/u是U盘的挂载点。
经过上⾯的操作,grub2被安装到u盘的mbr上了,⽣成了默认的启动菜单/grub/grub.cfg,通过u盘启动就能看到grub2的引导界⾯了,完全可以引导电脑硬盘上的操作系统了。
四、使⽤grub命令⾏启动系统启动linux系统(本⽂的grub指的全部是grub2)1、set root=(hd1,msdos1) (hd1,msdos1)是启动分区。
(在输到"("之后,按⼀下tab,我的能⾃动填充hd1,之后,再按⼀下tab键,可以显⽰出磁盘分区,在我的电脑上显⽰出了2个ext分区,以及这些分区的基本信息,我的安装在hd1,msdos1)2、linux /boot/vmlinux-xxx-xxx root=UUID=xxxxxxxxx 或者 linux /boot/vmlinuz-***** -generic root=UUID=****** (root=后可以使⽤uuid也可使⽤ /dev/sda1 挂载分区,但是本⼈个⼈暂时⽆法获取是sda1还是sdb1,所以⽤UUID,第⼀步tab补全显⽰磁盘分区详情时会显⽰分区的uuid号)3、initrd /boot/initdxxx(按tab补全)4、boot 启动五、grub可以直接启动grub4dos2、配置 grub.cfgmenuentry "Grub4dos"{set root='hd0,msdos1'linux16 /grub/grub4dos/grub.exe boot}六、grub启动winpe1、消灾镜像⽂件到u盘2、配置grub.cfgmenuentry 'winpe'{ set root='hd0,msdos1' insmod lvm insmod xfs insmod memdisk insmod part_msdos echo 'loading memdisk...' linux16 /grub/memdisk iso raw echo 'loading iso...' initrd16 /grub/dabaicai.iso}七、grub4dos启动winpe(grub启动winpe有时候会失败所以使⽤grub4dos启动)修改grub4dos下的menu.lst⽂件(menu.lst⽂件最好拷贝到根⽬录或者boot⽬录,要不然系统可能找不到)title find and boot dabaicai.ISOfallback 6root (hd0,0) (系统默认是在当前磁盘,如果iso和grub4dos在同⼀个磁盘分区可以不⽤写这⼀句)find --set-root /grub/dabaicai.isomap /grub/dabaicai.iso (0xff) || map --mem /grub/dabaicai.iso (0xff)map --hookchainloader (0xff)savedefault --wait=2命令解释set: 设置环境变量,如果不带参数,则是显⽰当前所有的环境变量。
GrubGrub2引导WinPE和live

GrubGrub2引导WinPE和live CDGrub&Grub2引导WinPE和live CDGrub引导利⽤Grub强⼤的磁盘仿真map --mem功能,可以从各种不同的介质启动WinPE,不解开ISO就可以直接启动PE,这种启动模式把做好的PE成品拿来⽤就⾏,pe不⽤做任何更改就可以引导,⾮常简单。
当然,这不仅仅针对PE有效,对⼀般的live CD也实⽤,如: ubuntu live CD, slax, CDlinux等等。
下⾯是⼀个menu.lstcolor white/blue blue/yellow light-red/blue 10timeout 3default 0title WinPEfind --set-root /boot/WinPE.isomap --mem /boot/WinPE.iso (0xff)map --hookchainloader (0xff)boottitle slax linuxfind --set-root /boot/slax.isomap --mem /boot/slax.iso (0xff)map --hookchainloader (0xff)boottitle foo.isomap --mem (bd)/boot/foo.iso (0xff)map --hookchainloader (0xff)boottitle foo.iso&firadiskmap --mem (bd)/firadisk.img (fd0)map --mem (bd)/peiso/TonPE.iso (0xff)map --hookchainloader (0xff)boottitle setupldr.binchainloader (bd)/boot/setupldr.binboottitle startrom.0pxe keepchainloader --force (bd)/peiso/startrom.0boottitle Boot from pxelinuxpxe keepchainloader --raw (bd)/pxelinux.0#chainloader --force (bd)/pxelinux.0boottitle test.isofind --set-root --devices=g /ntldr || find --set-root --devices=g /bootmgrmap () (hd0)map (hd0) ()map --rehookfind --set-root --devices=g /ntldr || find --set-root --devices=g /bootmgr#rootnoverify (hd0,0)chainloader /ntldr || chainloader /bootmgrtitle boot from hard diskroot (hd0,0)chainloader +1boottitle boot from hard diskcheckrange 0x80 read 0x8280 && map (hd1) (hd0)checkrange 0x80 read 0x8280 && map --hookchainloader (hd0)+1boottitle command linecommandlinetitle rebootreboottitle halthaltGrub2引导GRUB2不⽀持GRUB那样的map操作来引导ISO⽂件。
云主机添加Grub2引导WinPE ISO(Windows系统)-V1

云主机添加Grub2引导WinPE ISO(Windows系统)导读云主机安装的系统是Windows 2008 R2,BIOS+MBR,想利用Grub2引导发位于磁盘上Windows PE ISO 或其他系统,可以采用在Windows 系统中安装grub2实现。
安装配置步骤第一步、Grub2下载,文件准备到Grub2官网ftp:///gnu/grub/ 下载文件grub-2.02-for-windows.zip,将其解压至任意路径下,比如D:\。
这样Grub2的主程序目录将位于D:\grub-2.02-for-windows第二步,Grub2安装以管理员身份运行CMD,输入命令wmic diskdrive list brief,记录下安装目标磁盘DeviceID,本教程将安装至\\.\PHYSICALDRIVE0============================================== ====================================Microsoft Windows [Version 10.0.10586](c) 2015 Microsoft Corporation. All rights reserved.C:\Windows\system32>wmic diskdrive list briefCaption DeviceID Model Partitions Size WDC WD5000AAKX-001CA0 \\.\PHYSICALDRIVE0 WDC WD5000AAKX-001CA0 3 500105249280C:\Windows\system32>===================================================== =============================将当前路径切换至Grub2主程序所在路径,输入cd /d d:\grub-2.02-for-windows===================================================== =============================C:\Windows\system32>cd /d d:\grub-2.02-for-windowsd:\grub-2.02-for-windows>===================================================== =============================查看grub-install.exe的帮助文件,可以输入grub-install.exe --help或grub-install.exe -?,显示如下内容:===================================================== =============================Usage: grub-install [OPTION...] [OPTION] [INSTALL_DEVICE]Install GRUB on your drive.--compress=no|xz|gz|lzo compress GRUB files [optional]-d, --directory=DIR use images and modules under DIR[default=C:\grub-2.02-for-windows/<platform>]--fonts=FONTS install FONTS [default=unicode]--install-modules=MODULES install only MODULES and their dependencies[default=all]-k, --pubkey=FILE embed FILE as public key for signature checking --locale-directory=DIR use translations under DIR[default=C:\grub-2.02-for-windows/locale]--locales=LOCALES install only LOCALES [default=all]--modules=MODULES pre-load specified modules MODULES--themes=THEMES install THEMES [default=starfield]-v, --verbose print verbose messages.--allow-floppy make the drive also bootable as floppy (defaultfor fdX devices). May break on some BIOSes.--boot-directory=DIR install GRUB images under the directory DIR/grubinstead of the boot/grub directory--bootloader-id=ID the ID of bootloader. This option is onlyavailable on EFI and Macs.--core-compress=xz|none|autochoose the compression to use for core image--disk-module=MODULE disk module to use (biosdisk or native). Thisoption is only available on BIOS target.--efi-directory=DIR use DIR as the EFI System Partition root.--force install even if problems are detected--force-file-id use identifier file even if UUID is available--label-bgcolor=COLOR use COLOR for label background--label-color=COLOR use COLOR for label--label-font=FILE use FILE as font for label--macppc-directory=DIR use DIR for PPC MAC install.--no-bootsector do not install bootsector--no-nvram don't update the `boot-device'/`Boot*' NVRAMvariables. This option is only available on EFIand IEEE1275 targets.--no-rs-codes Do not apply any reed-solomon codes whenembedding core.img. This option is only availableon x86 BIOS targets.--product-version=STRING use STRING as product version--recheck delete device map if it already exists--removable the installation device is removable. This optionis only available on EFI.-s, --skip-fs-probe do not probe for filesystems in DEVICE--target=TARGET install GRUB for TARGET platform[default=i386-pc]; available targets: arm-efi,arm-uboot, arm64-efi, i386-coreboot, i386-efi,i386-ieee1275, i386-multiboot, i386-pc,i386-qemu, i386-xen, ia64-efi, mips-arc,mips-qemu_mips, mipsel-arc, mipsel-loongson,mipsel-qemu_mips, powerpc-ieee1275,sparc64-ieee1275, x86_64-efi, x86_64-xen-?, --help give this help list--usage give a short usage message-V, --version print program versionMandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.INSTALL_DEVICE must be system device filename.grub-install copies GRUB images into boot/grub. On some platforms, it may also install GRUB into the boot sector.Report bugs to <bug-grub@>.===================================================== =============================参数说明:--directory 指定镜像和模块的路径,本教程将此参数设置为--directory=D:\grub-2.02-for-windows\i386-pc,如果把grub2压缩包解压至c盘,此参数可以不进行设置,因为default=C:\grub-2.02-for-windows/<platform>,platform 会根据当前的平台从i386-pc和i386-efi两个路径中进行自动选择。
基于Grub 2.00的x86内核引导流程

基于Grub 2.00的x86内核引导流程--源代码情景分析目前Linux中使用最广泛的的bootloader是Grub(GRand Unified Bootloader)。
如今Grub 2已经替换了早期的0.9x系列版本的Grub Legacy,而且Grub Legacy已经不再开发维护。
虽然Grub 2从名字上看像是Grub的升级版,但其源代码实际被完全重构了。
现从源代码角度分析基于Grub 2.00的x86内核引导流程。
1. 磁盘简介由于在Grub进行内核引导的过程中涉及到磁盘操作,先简介一下磁盘为后续引导流程分析作铺垫。
磁盘三要素:由所有盘面上相同半径的同心圆形磁道(Track)组成的柱面(Cylinder), 磁头(Head), 扇区(Sector)之间的关系如下图所示:对于磁盘,其最小存储单位为扇区(Sector),在相当长的一段时间里,扇区的大小固定在512 bytes[1]. 但是从2009年开始出现扇区大小为4096bytes的磁盘,即Advanced Format disks。
对于扇区的编址,早期的方案是CHS编址(Cylinder-Head-Sector),即用数据元组CHS tuples (c,h,s)的形式表示一个扇区的位置,但是在CHS编址时,扇区号是从1开始的,没有扇区0,但磁头和柱面编号都是从0开始的,即CHS编址起始于地址(0,0,1)。
另外一种编址方案是LBA编址(Logical Block Addressing),把整个磁盘的所有扇区资源统一分配序号。
在2003年发布的ATA-6标准中,LBA采用48-bit地址。
CHS数据元组(c, h, s)根据如下公式转换成相应的LBA逻辑地址:LBA= (c×Nheads + h)×Nsectors + (s − 1)其中:Nheads是硬盘中的磁头数目,Nsectors是每条磁道上可以划分的最大的扇区数目。
Grub2引导UEFI的Win10-VHD和PE

Grub2引导UEFI的Win10-VHD和PEGrub2引导Win10差分VHD/PE快速指南(UEFI模式)修订版*本文需要有一定装机实践基础*1. 进入PE,将磁盘分区模式改为GPT/GUID。
2. 创建一个250-300M的ESP分区,格式化为fat32。
3. 创建一个25G的Win10_Base.VHD,然后将Win10的安装盘imagex过去,或者更简单的,把ghost的win10镜像做过去。
4. 给ESP分区指派盘符之后Bootbcd x:\windows /s e: /f UEFI,其中x是挂载的vhd盘e是挂载的ESP分区。
5. 复制grub2到ESP分区6. 删除\boot中grub文件夹之外的一切7. grub2的64位efi文件改名位bootx64.efi,放入\boot8. Bootice添加一个uefi项,指向上述的bootx64.efi,名字随便取,就叫grub29. \wepe\b64,改名回bcd,高级模式wim选项中添加graphisicforcehighres10. 复制\efi\microsoft\boot\bootx64.efi到\wepe11. 编辑grub.cfg,添加一个指向\wepe\bootmgfw.efi这个对应的是PE,加密码12. 添加一个指向\efi\microsoft\boot\bootmgfw.efi,这个是win10。
13. 重启电脑,顺便进入bios,将硬盘模式改为ahci/sata,启动模式改为UEFI,UEFI第一启动项从windows boot manager改为grub2,secure boot关掉,保存退出。
14. Grub菜单中选择win10,完成安装,进入win10进行各种常规软件的安装和设置。
15. 进入pe,用bootice对win10_base.vhd制作1-2个分差vhd。
16. 挂载esp分区,复制中的bcd,bootx64.efi,bootmgfw.efi 到\boot1,编辑\boot1\bcd,去掉win10_base.vhd防止误操作,添加子vhd1。
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的原理是很重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GRUB2 启动引导器–完全教程本教程仅讨论GRUB版本2,流行的启动引导器的下一代。
如果您在寻找常规GRUB的教程,请查看这篇文章。
欢迎来到GRUB2启动引导器教程!你肯定已经读过我的关于GRUB legacy版本的指南。
在过去的两年半里面,它独自积累了五十万次阅读,在全世界的计算机使用者中相当流行和实用。
我希望利用我的GRUB2重新创造同样的成功。
目标为用户使用GRUB作为他们的启动引导器实现启动任何其钟情的类UNIX操作系统或者多重启动他们的计算机提供一个简单、实际、循序渐进、行之有效的教程,从而允许他们快速、简单、毫不不费力的控制他们的系统启动流程。
在这个教程里,您将学到如何使用GRUB2,添加和删除菜单,定制标题和启动选项,双重启动和三重启动操作系统,结合GRUB和GRUB2,我们甚至看一下Windows如何加入这个模式。
之后,我们将学习如何从错误中恢复。
目录1.目录2.警告3.GRUB2路标4.GRUB2 介绍•新布局•Grub.cfg文件实例•/etc/grub.d/ 目录示例•/etc/default/grub示例5.基本用法•GRUB2如何工作?•添加新的GRUB脚本•更新GRUB•通过改变脚本名称中的数字改变脚本启动顺序•替换默认条目•操作系统探测器•重装GRUB•简短的总结6.现实多重启动情况•双重启动:使用GRUB2启动两个操作系统•双重启动:两个操作系统使用GRUB legacy和GRUB2的结合。
•双启动Windows 7 和Ubuntu•把GRUB legacy升级到GRUB27.附加的测试用例•三重启动8.定制GRUB菜单•编辑/etc/default/grub•从菜单中去掉存测试(memtest)•如果您不想让GRUB菜单包含memtest项,可以将20_memtest86+这个脚本设置为不可执行,然后更新GRUB。
•更改菜单行标题•更改主题(启动背景图片)9.GRUB 2 恢复(recovery)•从启动失败中恢复10.观察小问题•核损坏•核崩溃转储机制•命令名称11.G RUB legacy对比GRUB 2•GRUB legacy•GRUB 2•结论12.更多阅读(文档和)•官方:•其他有用的GRUB2资源13.结论14.更新警告警告!GRUB2还是测试软件。
尽管它已经获得Ubuntu的青睐,本身没有质量问题。
您可以没有问题的使用,虽然可能存在损害,但那离您是非常遥远的,即使真的发生,损害也只是轻微的一点点。
您需要认识到这些。
另外,任何处理危险的任务比如执行系统本身的危险命令,磁盘分区,启动序列,镜像,等等的时候,您应该时刻准备着最坏的情况。
这意味着:•对您的数据来考虑您必须有一个可靠的备份过程。
•您必须拥有从灾难中迅速恢复的知识和工具。
•这包括可以恢复系统的前一个镜像,修复损毁。
•配置,恢复启动引导器,还有更多。
•您必须对您所做的有信心。
现在您知道了这些,让我们高兴并且安全的开始。
那么一定要铭记,GRUB2还是测试版。
尽管同样我们可以想到Google Mail,它测试了六年或者更多,您必须小心练习。
更重要的是,这篇指南的容和容相关可能会随着GRUB2被做成产品而改变,所以请持续关注更新。
GRUB2路标这是您使用GRUB2之前需要考虑的。
什么时候GRUB2会成为类UNIX操作系统的实际启动引导器?目前,GRUB legacy版本工作的很好并且还将持续很多年。
像RedHat和Novell这样的公司为了服务器发行版会提供长期的技术支持,GRUB legacy还是作为重要参与者存在五到十年。
在桌面领域,采用比率会快一些,但是不要期待短期会有奇迹发生。
尽管如此,这并不影响探索。
请认识到您很可能会遇到兼容性问题而抛锚,特别是很多保守的发行版对新技术的支持并不是很及时。
到目前为止,GRUB2仅仅被Ubuntu家族使用,Ubuntu家族占了桌面市场的三分之一到一半。
这使得这篇指南变得有意义,因为两个或者三个Linux家庭使用者中就会有一个希望了解GRUB2信息并学习它的使用技术。
让我们现在到真正的技术中去。
GRUB2 介绍在开始之前,我强烈推荐您阅读我的关于GRUB常规版本的指南,这会帮助您更好的理解这篇文章。
GRUB2 引入了很多新的更改。
GRUB2有更好的移植性和模块性,支持非ASCII码字符,动态加载模块,真实存管理,还有更多。
所有这些几乎都和大多数使用者无关。
您需要知道的仅仅是配置文件的改变和GRUB2的操作方法。
新布局GRUB legacy版本将文件放置在/boot/grub/目录下,包括在启动过程中读取并显示容给用户的menu.lst文件。
GRUB2将文件主要放在三个地方:/boot/grub/grub.cfg --这是替代menu.lst的主要配置文件。
不像menu.lst那样,grub.cfg 不能手动更改!我强烈建议不要尝试干预这个文件,无论是使用chattr命令或者其他。
由他去就行。
/etc/grub.d/ --这个新文件夹包含GRUB脚本。
这些文件是创建grub.cfg文件的基础。
当相关的GRUB命令执行以后,这些脚本以某个特定的顺序被读取并且创建grub.cfg文件。
/etc/default/grub--这个文件包含GRUB脚本读取并且写入grub.cfg文件的GRUB菜单。
它是GRUB的定制部分,类似于老的menu.lst文件,实际启动项目除外。
这意味着,如果您想改变GRUB菜单,您将必须编辑已经存在的脚本或者创建新的脚本,然后更新菜单。
相比老的GRUB,这更类似于LILO,LILO允许在运行中编辑菜单。
Grub.cfg文件实例文件位于:/boot/grub/:Grub.cfg文件看起来是这样的:它实际上并不有趣,因为它仅仅是个脚本。
多数人可能不想读它的容或者不能完全理解它们。
但是这个文件在任何您更新了GRUB菜单的时候还是值得浏览一下,以确保正确的条目像您预期的一样被加了进来。
但是仅仅在您熟悉脚本的情况下!/etc/grub.d/ 目录示例这是刚刚安装的系统中/etc/grub.d/文件夹下的所有文件,以Kubuntu为例:我们来看一下这些脚本:00_header是从/etc/default/grub中加载GRUB设置的脚本,包括超时、默认启动项和其他。
我们会稍侯了解更多。
05_debian_theme定义背景、颜色和主题。
这个脚本的名字很明确将会改掉当别的版本采用GRUB 的时候。
10_linux 为已经安装的发行版加载菜单项。
20_memtest86+ 加载memtest(存测试)功能30_os-prober 这个脚本将会扫描硬盘上的其他操作系统并且添加到启动菜单。
40_custom 是一个您可以用来创建新加的条目到菜单的模板。
您是不是已经认识到了脚本名字中数字的使用?不错,这有点像不同的runlevel的Start/Kill脚本的顺序。
数字定义了优先级。
这意味着10_linux会比20_memtest86+先执行所以在启动菜单项中的位置更加靠前一点。
这些脚本也不太有趣。
像grub.cfg文件一样,他们也不希望被编辑,除了40_custom。
您必操作这些脚本的时候须非常小心。
我们稍侯看看它们的样子并且学习一下如何使用它们。
/etc/default/grub示例文件位于:/etc/default/目录下这个目录包含很多其他文件所以不要以为仅仅被GRUB使用。
grub文件是一个被00_header脚本解析的文本文件。
您可以在这里更改如果您想改动的话。
我们稍侯在定制部分细谈。
现在我们知道了文件是什么样的,让我们看看怎么使用。
基本用法是将我们的理论知识转化为实际行动的时候了。
GRUB2如何工作?GRUB2这样工作:/etc/default/grub包含定制化;/etc/grub.d/脚本包含GRUB菜单信息和操作系统启动脚本。
当运行update-grub命令时,它读取grub文件的容、执行grub.d中的脚本来创建grub.cfg文件。
就是这样。
想要更改grub.cfg文件,您需要编辑grub文件或者grub.d下面的脚本。
脚本是被执行的,这意味这他们拥有执行权限,如果您取消了执行权限,他们将不会执行。
这意味着您可以在grub.d下放多个文件,您想放多少就放多少,像update-grub能读的shell 脚本那样长。
如果您想使用他们,就激活可执行权限(chmod +x),反之亦然,去掉可执行权限(chmod –x)。
让我们来看一下这些脚本:拿00_header和05_debian_theme作为示例:40_custom更有意义,但是它并没有告诉我们怎么定制脚本。
不要担心,我们会稍侯学习所有东西。
添加新的GRUB脚本添加一项新的启动选项,您必须遵循一些基本语法:创建一个新文件并且以数字和下划线作为文件名的前一部分。
如果您想把启动项放在其他选项的上边,使用一个稍小的数字,如果您想放在其他的后边,使用一个稍大的数字。
例如:11_something将被放在操作系统默认条目的后边,反之08_something将被放置在10_linux 条目的上方。
下一步是写实际容,下面是例子:#!/bin/sh -eecho "Some string"cat << EOFmenuentry "Something" {set root=(hdX,Y)-- boot parameters --}EOF让我们仔细看一下这个文件:#!/bin/sh –e 第一行是shell脚本的声明,必须放在第一行。
echo "Some string" 输出字符串“Some string”,这样在执行update-grub的时候您将看到这个字符串,如果您不想看到命令的输出,可以重定向到标准错误或者/dev/null:echo "Some string" > &2例如: echo "Adding openSUSE 11.2"Cat << EOF 定义实际启动条目的开始menuentry “Something”是菜单的名字。
例如:Linuxset root=(hdX,Y) –设置根设备。
危险!GRUB2使用分区标记从一开始而不是像GRUB legacy版本那样从0开始!这是非常非常重要的并且是必须记住的!换句话说,标记设备是还是从0开始,但是分区从一开始。
比如,sda1在GRUB2中表示为(hd0,1),但是之前的版本表示为(hd0,0)!-- boot parameters--每个操作系统都不同,在Linux中,您使用可能类似于:linux /boot/vmlinuzinitrd /boot/initrd.img但是在Windows中,您可能使用:Chainloader(hdX,Y)+1所以,一个完整的脚本应该是这样子:#!/bin/sh -eecho "Adding my custom Linux to GRUB 2"cat << EOFmenuentry "My custom Linux" {set root=(hd0,5)linux /boot/vmlinuzinitrd /boot/initrd.img}EOF或者为了启动Windows,像这样:Or for Windows, something like:#!/bin/sh -eecho "Adding Windows 8 to GRUB 2 menu"cat << EOFmenuentry "Windows 8" {set root=(hd0,1)chainloader (hd0,1)+1}EOFEOF结束GRUB条目。