GRUB2及启动过程详解

合集下载

直接用grub2启动硬盘上的liveCD,不需解压ISO

直接用grub2启动硬盘上的liveCD,不需解压ISO

直接用grub2启动硬盘上的liveCD,不需解压ISO有感于千里不留行兄的用grub4dos实现多重live启动(详见:/viewtopic.php?f=77&t=226247)但这个问题有个麻烦是必须要把内核解压到文件夹下,以grub4dos载入,进而实现live启动。

既然grub2有loopback命令可以载入iso文件,能不能直接用grub2实现硬盘liveCD的启动呢?况且grub2是U9.10默认带的,update-grub很方便,也懒的再折腾grub4dos了。

经过一晚上的google搜索和实验,已成功完成。

具体思路如下:1 将下载的iso放入分区中,分区任意。

(我这里ntfs和ext4均通过,其他未测试)2 在grub2启动项挂载iso。

比如我的电脑有C: D: E: F: ,NTFS 格式和ext4, swp分区。

将a.iso放在D:盘根目录下。

grub2启动项上按c进入命令行模式,3345完成。

测试新氧的9.04, U原版CD通过。

均是CD版,DVD版未测试。

把1~4直接写入到/etc/grub.d/40.custom下,直接生成grub.cfg. 具体代码如下:然后大功告成!依此类推,可以填加任意多个liveCD了,你的启动菜单也会变的很壮观,但其实不占用过多的硬盘空间,只是各个ISO而已。

现在可以轻松自己打包各自的liveCD,再加上grub2有自己的启动盘,这样,不管是从机子硬盘还是移动硬盘、U盘、光驱内启动grub2,都可以应用以上思路直接启动硬盘或移动硬盘、U盘内的iso 文件,而且是ISO的live系统,不影响移动硬盘、U盘的正常使用,grub2实在是强大。

grub2 原理

grub2 原理

grub2 原理全文共四篇示例,供读者参考第一篇示例:Grub2是一款广泛应用于Linux操作系统的引导管理器,其设计的初衷是为了解决引导多个操作系统的问题。

Grub2的设计极具灵活性和可扩展性,使得它成为目前最流行的引导管理器之一。

Grub2的工作原理十分复杂,但可以简单地分为几个主要步骤:第一步是启动引导加载程序。

当计算机启动时,BIOS会加载Grub2引导加载程序到内存中,并执行引导加载程序。

引导加载程序的主要功能是在系统启动时向用户提供一个选择菜单,让用户选择要启动的操作系统。

第二步是加载内核。

一旦用户选择了要启动的操作系统,Grub2会加载该操作系统的内核文件到内存中。

内核文件包含了操作系统的核心功能,如进程管理、文件系统等。

第三步是加载初始化RAM磁盘(initrd)。

在加载内核之后,Grub2会加载initrd文件到内存中。

initrd是一个临时的文件系统,用于初始化硬件设备和加载驱动程序,以便系统能够顺利启动。

第四步是启动操作系统。

Grub2会将控制权交给内核,由内核初始化系统并启动用户空间进程,最终启动操作系统。

Grub2的设计具有许多优点,例如支持多种文件系统和操作系统,能够通过脚本和配置文件自定义启动选项,支持密码保护和图形界面等。

Grub2还支持在启动时对引导选项进行编辑,方便用户在系统启动时进行调试和配置。

Grub2也存在一些缺点,例如在配置文件中出现错误可能导致系统无法启动,引导加载程序的体积相对较大,可能会增加系统启动时间等。

在使用Grub2时,用户需要仔细阅读文档并谨慎配置,以避免出现问题。

Grub2是一款功能强大且灵活的引导管理器,能够帮助用户管理多个操作系统的启动过程。

它的工作原理虽然复杂,但通过对其原理和配置文件的深入了解,用户可以充分利用其强大的功能,提高系统的稳定性和性能。

第二篇示例:Grub2是一个多重引导加载程序,常用于Linux系统,负责加载操作系统。

Grub2配置详解

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系统。

使用Linux系统安装grub2到u盘并启动系统或者iso镜像文件

使用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: 设置环境变量,如果不带参数,则是显⽰当前所有的环境变量。

GRUB2启动代码详解

GRUB2启动代码详解

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的值。

Grub引导多系统启动图文讲解

Grub引导多系统启动图文讲解

RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备);2、检测完后会进入MBR也就是boot loader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序;init这个程序会根据Run level来执行以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界面管理程序二、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电自检POST (Power on self test);2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要工作1、Boot Loader可以安装在两个地方:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占用就可以将Boot Loader 安装在硬盘中的其中一个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里,(2)Boot Loader第一阶段的程序码是从boot 分区来载入的,就是说Boot Loader 第二阶段程序码存放在/boot 这个分区中;3、下面来看三个Boot Loader 的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;splashimage=(hd0,0)/grub/splash.xpm.gz开机时使用的背景图案,这里的(hd0,0)意思为(硬盘编号,分区编号)hiddenmenu隐藏开机的菜单(2)用于区分多个系统的设定,如果这台主机中还安装了其它系统并设定了多重启动,在这里还可以看到其它系统的设定;title Red Hat Enterprise Linux AS (2.6.9-11.EL)在GRUB开机菜单中所显示的开机的系统名称root (hd0,0)指定下面的档案位于哪个目录中,这个hd0,0 同样指的是用于指引导的目录,通常指/boot目录kernel /vmlinuz-2.6.9-11.EL ro root=LABEL=/ rhgb quiet设定kernel镜像的存放位置,这个位置相对于上面root 那一行所指定的位置的相对位置,ro root=LABEL=/ 是设定/在根目录的位置,ro是只读的意思,也就是以只读方式挂载根目录,也可以使用root=/dev/hda2 类似于这种形式来挂载根目录;rhgb 意思是以图形界面显示开机过程,去掉则以文字界面显示;quiet 意思是设定开机过程中不显示错误信息;initrd /initrd-2.6.9-11.EL.img 将这个指定的文件载入到内存中,这个文件里都是存放一些驱动程序;3、如果我们修改完grub.conf 这个配置文件后,设定为立即生效;4、另外,如果硬盘上的MBR被清除掉了,可使用下面的指令来重新安装boot loader 到MBR中:/sbin/grub-install /dev/hda5、介绍进入GRUB的开机管理程式可以做哪些动作(开机前改Kernel的参数)(1)开机后在进入GRUB界面后,先选择要使用的系统(这里选择Linux)(2)按下a键,可以在开机修改Kernel的参数,也就是可以传一个参数给Kernel;这时可以看到下面这个界面(3)上图中root=LABEL=/ 这部分不可以动,将后面的都去掉后,先输入一个空格再输入一个1,如下图:这个1 就是附加的一个参数,表示要进入单用户模式,不需要输入root密码就可以以root 身份登录;(4)当进入到#提示字元时,就可以设定root 密码了。

基于Grub 2.00的x86内核引导流程

基于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启动详解

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的值。

linux引导之grub2

linux引导之grub2

linux引导之grub2先了解下什么是Bootloader以下是百度百科释意在嵌⼊式操作系统中,BootLoader是在内核运⾏之前运⾏。

可以初始化硬件设备、建⽴内存空间映射图,从⽽将系统的软硬件环境带到⼀个合适状态,以便为最终调⽤准备好正确的环境。

在中,通常并没有像BIOS那样的程序(注,有的嵌⼊式CPU也会内嵌⼀段短⼩的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

在⼀个基于ARM7TDMI core的中,系统在上电或复位时通常都从地址0x00000000处开始执⾏,⽽在这个地址处安排的通常就是系统的BootLoader程序Bootloader不属于操作系统,⼀般采⽤汇编语⾔和C语⾔开发。

需要针对特定的硬件平台编写。

在移植过程时,⾸先为开发板移植Bootloader。

Bootloader不但依赖于CPU的体系架构,⽽且依赖于嵌⼊式系统板级设备的配置。

3.Bootloader的操作模式⾃启动模式:在这种模式下,Bootloader从⽬标机上的某个固态存储设备上将操作系统加载到RAM中运⾏,整个过程并没有⽤户的介⼊。

交互模式:在这种模式下,⽬标机上的Bootloader将通过串⼝或⽹络等通信⼿段从开发板上下载内核映射和根⽂件系统映像等待RAM中。

可以被Bootloader写到⽬标机上的固态存储媒介质中,或者直接进⼊系统的引导。

也可以通过串⼝接收⽤户的指令。

⼆、Bootloader的基本功能初始化相关硬件把Bootloader⾃搬移到内存中执⾏⽤户指令加载并执⾏内核⼀个嵌⼊式系统从软件的⾓度看通常可以分为三个层次: 1、引导加载程序。

包括固化在固件(firmware)中的Booter代码(可选),和Loader两⼤部分。

2、操作系统。

特定于嵌⼊式板⼦的定制内核以及内核的启动参数;以及在内核和应⽤程序之间可能还会包括⼀个嵌⼊式图形⽤户界⾯,常⽤的嵌⼊式GUI有:MicroWindows和MiniGUI等。

GRUB2及启动过程详解---精品管理资料

GRUB2及启动过程详解---精品管理资料

GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (3)3。

GRUB2 的bootstrap image文件 (5)3.1。

boot。

img (5)3。

2。

diskboot。

img (5)3.3. kernel。

img (6)3.4。

core。

img (6)3。

5. *.mod (6)4. 对比GRUB Legacy (7)4.1. stage1 (7)4。

2. *_stage1_5 (7)4.3。

stage2 (7)5。

grub2-mkimage定制core.img (8)6。

GRUB2安装 (10)6。

1. Linux是怎么命名设备(/dev/sda) (10)6.2. MBR(Master Boot Record) (11)6。

3。

MBR分区表DPT(Disk Partition Table) (14)6.4。

LBA and CHS (22)6.4。

1. CHS(cylinders—heads—sectors) (22)6.4。

2。

LBA(Logical Block Address) (23)6。

5。

boot。

img和core.img安装 (23)6.6。

硬盘总结 (28)7. 启动过程 (29)7。

1. BIOS (29)7.2。

GRUB2中boot.img (31)7.2。

1。

Step1无条件跳转 (32)7。

2。

2. Step2 初始化 (32)7。

2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (34)7。

2.4。

Step4 采用LBA加载core.img第一个扇区 (37)7。

2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (40)7。

2。

6。

Step6 执行core。

img第一条语句 (42)7。

2。

7。

Step7 boot。

img总结 (43)7。

3。

GRUB2中core。

img (44)7.3.1。

grub配置详细过程

grub配置详细过程

GRUB对设备的命名
首先,GRUB对设备的命名必须包含在小括号()内;其次,GRUB 不区分IDE硬盘和SCSI硬盘,统一使用hdx,其中x指定BIOS中 硬盘的编号,并从0开始计数。 (hd0) 表示第一块磁盘 (hd0,1) 表示第1个硬盘的第2个分区 (hd0,0)/boot/vmlinuz 表示第1个硬盘的第一个分区下的boot/目 录下的vmlinuz文件。
按下C后:windows系统的写法 grub> rootnoverify (hd0,0) grub> chainloader +1 grub> boot
Grub rescue
比如先装linux然后装windows,重启后linux不知道跑哪去了。 windows自作聪明的把Grub覆盖了,而自己的引导程序并没有引导 启动linux的能力。 解决方法:重新安装Grub。当然前提是用户有一张相同版本的 Linux安装光盘。 成功从光盘启动后,在Linux命令行下依次输入下面这些命令。 grub find /boot/grub/stage1 (查找硬盘上的Linux系统将boot 目录存放在哪个硬盘分区中) root (hdx,y) setup (hd0) quit
Grub有几个重要的文件
stage1,stage2,有的时候需要stage1.5.这些文件一般都在 /boot/grub文件夹下面.如下图
Grub加载
1.装载基本的引导装载程序(stage1),stage1通常位于主引导扇区里 面,对于硬盘就是MBR了,stage1的主要功能就是装载第二引导程 序(stage2).这主要是归结于在主引导扇区中没有足够的空间用于 其他东西了。 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出 更高级的功能,以允许用户装载入一个特定的操作系统。在GRUB 中,这步是让用户显示一个菜单或是输入命令。由于stage2很大 ,所以它一般位于文件系统之中(通常是boot所在的根分区) stage1.5有时候基本引导装载程序(stage1)不能识别stage2所在的 文件系统分区,那么这时候就需要stage1.5来连接 stage1和 stage2了. 接着,stage2被加载并执行,由stage2借助stage1_5驱动文件系统 ,并查找grub.conf,显示启动菜单供用户选择,然后根据用户的 选择或默认配置加载操作系统内核,并将控制权交给操作系统内 核,由内核完成操作系统的启动。

grub2详解

grub2详解

grub2详解分类: ,翻译了grub2的绝⼤部分内容,然后⾃⼰整理了⼀下。

因为内容有点杂,所以章节安排上可能不是太合理,敬请谅解。

本⽂主要介绍的是grub2,在⽂末对传统grub进⾏了简述,但在grub2的内容部分中包含了很多grub2和传统grub的对⽐。

如果仅仅是想知道grub2中的boot.img/core.img/diskboot.img/kernel.img或者传统grub中stage1/stage1_5/stage2⽂件的作⽤,请直接跳⾄阅读。

1.1 基础内容1.1.1 grub2和grub的区别只说明⼏个主要的:1.配置⽂件的名称改变了。

在grub中,配置⽂件为grub.conf或menu.lst(grub.conf的⼀个软链接),在grub2中改名为grub.cfg。

2.grub2增添了许多语法,更接近于脚本语⾔了,例如⽀持变量、条件判断、循环。

3.grub2中,设备分区名称从1开始,⽽在grub中是从0开始的。

4.grub2使⽤img⽂件,不再使⽤grub中的stage1、stage1.5和stage2。

5.⽀持图形界⾯配置grub,但要安装grub-customizer包,epel源提供该包。

6.在已进⼊操作系统环境下,不再提供grub命令,也就是不能进⼊grub交互式界⾯,只有在开机时才能进⼊,算是⼀⼤缺憾。

7.在grub2中没有了好⽤的find命令,算是另⼀⼤缺憾。

1.1.2 命名习惯和⽂件路径表⽰⽅式(fd0) :表⽰第⼀块软盘(hd0,msdos2) :表⽰第⼀块硬盘的第⼆个mbr分区。

grub2中分区从1开始编号,传统的grub是从0开始编号的(hd0,msdos5) :表⽰第⼀块硬盘的第⼀个逻辑分区(hd0,gpt1) :表⽰第⼀块硬盘的第⼀个gpt分区/boot/vmlinuz :相对路径,基于根⽬录,表⽰根⽬录下的boot⽬录下的vmlinuz,:如果设置了根⽬录变量root为(hd0,msdos1),则表⽰(hd0,msdos1)/boot/vmlinuz(hd0,msdos1)/boot/vmlinuz:绝对路径,表⽰第⼀硬盘第⼀分区的boot⽬录下的vmlinuz⽂件1.1.3 grub2引导操作系统的⽅式grub2⽀持两种⽅式引导操作系统:直接引导:(direct-load)直接通过默认的grub2 boot loader来引导写在默认配置⽂件中的操作系统链式引导:(chain-load)使⽤默认grub2 boot loader链式引导另⼀个boot loader,该boot loader将引导对应的操作系统⼀般只使⽤第⼀种⽅式,只有想引导grub默认不⽀持的操作系统时才会使⽤第⼆种⽅式。

GRUB2启动引导器–完全教程

GRUB2启动引导器–完全教程

GRUB2 启动引导器–完全教程GRUB2 启动引导器–完全教程本教程仅讨论GRUB版本2,流行的启动引导器的下一代。

如果您在寻找常规GRUB的教程,请查看这篇文章。

欢迎来到GRUB2启动引导器教程~你肯定已经读过我的关于GRUB legacy版本的指南。

在过去的两年半里面,它独自积累了五十万次阅读,在全世界的计算机使用者中相当流行和实用。

我希望利用我的GRUB2重新创造同样的成功。

目标为用户使用GRUB作为他们的启动引导器实现启动任何其钟情的类UNIX操作系统或者多重启动他们的计算机提供一个简单、实际、循序渐进、行之有效的教程,从而允许他们快速、简单、毫不不费力的控制他们的系统启动流程。

在这个教程里,您将学到如何使用GRUB2,添加和删除菜单,定制标题和启动选项,双重启动和三重启动操作系统,结合GRUB和GRUB2,我们甚至看一下Windows如何加入这个模式。

之后,我们将学习如何从错误中恢复。

目录目录警告GRUB2路标GRUB2介绍新布局Grub.cfg文件实例/etc/grub.d/目录示例/etc/default/grub示例基本用法GRUB2如何工作?添加新的GRUB脚本更新GRUB通过改变脚本名称中的数字改变脚本启动顺序替换默认条目操作系统探测器重装GRUB简短的总结现实多重启动情况双重启动:使用GRUB2启动两个操作系统双重启动:两个操作系统使用GRUB legacy和GRUB2的结合。

双启动Windows 7和Ubuntu把GRUB legacy升级到GRUB2附加的测试用例三重启动定制GRUB菜单编辑/etc/default/grub从菜单中去掉内存测试(memtest)如果您不想让GRUB菜单包含memtest项,可以将20_memtest86+这个脚本设置为不可执行,然后更新GRUB。

更改菜单行标题更改主题(启动背景图片)GRUB 2恢复(recovery) 从启动失败中恢复观察小问题内核损坏内核崩溃转储机制命令名称GRUB legacy对比GRUB 2GRUB legacyGRUB 2结论更多阅读(文档和链接)官方:其他有用的GRUB2资源结论更新警告警告~GRUB2还是测试软件。

启动完全教程GRUB2

启动完全教程GRUB2

启动完全教程GRUB2。

/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脚本的声明,必须放在第一行。

双系统grub2配置

双系统grub2配置
设置方法:在终端(Terminal)使中用这个命令sudo chmod +w /boot/grub/grub.cfg
然后就是打开它,输入命令sudo gedit /boot/grub/grub.cfg 。
然后在### END /etc/grub.d/05_debian_theme ###后加入以下代码保存。
chainloader +1
}
### END /etc/grub.d/30_os-prober ###
2)配置grub启动分区为(hd0,1)
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 7 (loader) (on /dev/sda1)' {
insmod ntfs
set root=(hd0,1)
search –no-floppy –fs-uuid –set fe24211f2420dc81
1重新安装linux系统安装了centos8但是要配置grub2在?上搜寻了之后找到了下?的?法
双系统grub2配置
双系统grub2配置
1.今天在删除Ubantu的时候,漏了grub,结果开机的时候卡到grub上了。
2 解决方法:
1)重新安装Linux系统,安装了Centos8,但是要配置grub2,在网上搜寻ቤተ መጻሕፍቲ ባይዱ之后,找到了下面的方法。但是这个方法有个缺点,就是一旦重新配置grub,grub2-mkconfig -o /boot/grub2/grub.cfg,就会失效。

GRUB2启动和组成结构

GRUB2启动和组成结构

GRUB2启动和组成结构1.1 GRUB2特⾊本⽂所⽤GRUB2版本为1.99,GRUB2是为了取代GRUB⽽完全重写的第⼆版,引⽤:GRUB 2, which is a rewrite of GRUB, is alive and under development. GRUB 2 aims at merging sources from PUPA in order to create the next generation of GNU GRUB. A mailing list and a wiki have been setup for discussing the development of GRUB 2.GRUB 2 has the following tasks:* Create a compact core image. This will make Stage 1.5 unnecessary.* Add support for dynamic loading to the core image, so that it can extend itself at the run time rather than at the build time.* Add real memory management, to make GNU GRUB more extensible.* Add a more object-oriented framework for file systems, files, devices, drives, terminals, commands, and OS loaders.* Add support for internationalization. This includes support for non-ASCII character code, message catalogs like gettext, fonts, graphics console, and so on.* Add an actual localization, based on the above internationalization support. We will target on Japanese as the first step.* Segregate code specific to i386-pc from generic code, to make GNU GRUB portable.* Add support for cross-platform installation.* Develop additional software packages which will help our project and hopefully other projects.GRUB2采⽤模块化动态加载的思想,相⽐GRUB来讲不⽤在构建时将所有功能都加⼊,这使得GRUB2的体积相⽐变得很⼩,整个GRUB2的内核映像可以控制在31KB以内(GRUB的映像在百KB级别),因此GRUB2完全可以移除GRUB中存在的stage 1.5阶段,⽽可以将整个映像放在GRUB中的stage1.5存放的位置。

GRUB启动引导器完全教程精编版

GRUB启动引导器完全教程精编版

G R U B启动引导器完全教程文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)G R U B2启动引导器–完全教程本教程仅讨论GRUB版本2,流行的启动引导器的下一代。

如果您在寻找常规GRUB的教程,请查看文章。

欢迎来到GRUB2启动引导器教程!你肯定已经读过我的关于GRUBlegacy版本的指南。

在过去的两年半里面,它独自积累了五十万次阅读,在全世界的计算机使用者中相当流行和实用。

我希望利用我的GRUB2重新创造同样的成功。

目标为用户使用GRUB作为他们的启动引导器实现启动任何其钟情的类UNIX操作系统或者多重启动他们的计算机提供一个简单、实际、循序渐进、行之有效的教程,从而允许他们快速、简单、毫不不费力的控制他们的系统启动流程。

在这个教程里,您将学到如何使用GRUB2,添加和删除菜单,定制标题和启动选项,双重启动和三重启动操作系统,结合GRUB和GRUB2,我们甚至看一下Windows 如何加入这个模式。

之后,我们将学习如何从错误中恢复。

目录1.2.3.4.5.6.7.8.9.10.11.12.13.14.警告警告!GRUB2还是测试软件。

尽管它已经获得Ubuntu的青睐,本身没有质量问题。

您可以没有问题的使用,虽然可能存在损害,但那离您是非常遥远的,即使真的发生,损害也只是轻微的一点点。

您需要认识到这些。

另外,任何处理危险的任务比如执行系统本身的危险命令,磁盘分区,启动序列,镜像,等等的时候,您应该时刻准备着最坏的情况。

这意味着:对您的数据来考虑您必须有一个可靠的备份过程。

您必须拥有从灾难中迅速恢复的知识和工具。

这包括可以恢复系统的前一个镜像,修复损毁。

配置,恢复启动引导器,还有更多。

您必须对您所做的有信心。

现在您知道了这些,让我们高兴并且安全的开始。

那么一定要铭记,GRUB2还是测试版。

尽管同样我们可以想到GoogleMail,它测试了六年或者更多,您必须小心练习。

grub2使用教程

grub2使用教程

grub2基础教程-修订版smallapple目录一、grub2新特性二、grub2安装与启动三、grub2配置文件详解四、脚本修改五、使用grub2常见错误及修复方法一、grub2新特性1、grub2和grub有很多不同的地方:a)图形接口b)使用了模块机制,通过动态加载需要的模块来扩展功能c)支持脚本语言,例如条件判断,循环、变量和函数d)支持rescue模式,可用于系统无法引导的情况e)国际化语言。

包括支持非ASCII的字符集和类似gettext的消息分类,字体,图形控制台等等f)有一个灵活的命令行接口。

如果没有配置文件存在,GRUB会自动进入命令模式g)针对文件系统、文件、设备、驱动、终端、命令、分区表、os loder的模块化、层次化、基于对象的框架h)支持多种文件系统格式i)可访问已经安装的设备上的数据j)支持自动解压2、设备的命名grub2同样以fd表示软盘,hd表示硬盘(包含IDE和SCSI硬盘)。

设备是从0开始编号,分区则是从1开始,主分区从1-4,逻辑分区从5开始,而grub分区编号是从0开始的。

下面给出几个例子:(fd0):表示整个软盘(hd0,1):表示BIOS中的第一个硬盘的第1个分区(hd0,5)/boot/vmlinuz:表示BIOS中的第一个硬盘的第一个逻辑分区下的boot目录下的vmlinuz文件二、grub2安装与启动1、安装ubuntu9.10时,grub默认安装在第一硬盘(hd0)的mbr,其实就是把引导文件boot.img写入硬盘的mbr,当然,用户也可以选择不写入硬盘mbr而是写入linux分区的引导扇区。

启动时根据mbr所提供信息找到启动分区后,加载分区内的grub核心文件core.img和配置文件grub.cfg,进入选择菜单画面,在菜单画面,按上下箭号选择需要系统菜单项,按Enter进入选项。

按e进入己选择菜单的编辑状态,在编辑状态下,由上下左右箭号来移动光标,enter键换行,ctrl+x以编辑的内容启动,ctrl+c 进命令行状态,按Esc退出,回到菜单项。

GRUB2加载linux

GRUB2加载linux

GRUB2加载linux1问题使⽤GRUB2不能正确引导X86_64 linux-2.6.21 bzImage内核。

为解决这⼀问题,本⽂展开研究GRUB2加载⽅式,X86_64 bzImage⽣成结构、解压缩和启动过程。

2 X86_64 bzImage⽣成结构bzImage的⽣成步骤如下:1) 内核vmlinux是由arch/x86_64/kernel/vmlinux.lds⽂件链接规则由LD链接⽽成的elf64格式⽂件;本⽂称之为第⼀个vmlinux;2) objcopy将vmlinux转成⼆进制的vmlinux.bin;本⽂称之为第⼀个vmlinux.bin;3) gzip将vmlinux.bin压缩成vmlinux.bin.gz;4) vmlinux.bin.gz由arch/x86_64/boot/compressed/vmlinux.scr链接规则链接成piggy.o,此⽂件只有数据段;vmlinux.scr链接规则如下:SECTIONS{.data : {input_len = .;LONG(input_data_end - input_data) input_data = .;*(.data)input_data_end = .;}}5) arch/x86_64/boot/compressed/下的misc.c, head.S以及⽣成的piggy.o链接成另外⼀个压缩vmlinux elf32格式的⽂件,head.S和misc.c是为了解压piggy.o中包含的vmlinux.bin.gz所⽤;本⽂称之为第⼆个vmlinux;6) objcopy将压缩vmlinux转成vmlinux.bin⼆进制格式⽂件;本⽂称之为第⼆个vmlinux.bin;7) arch/x86_64/boot/tools/build.c编译⽣成build程序,arch/x86_64/boot/bootsect.S和arch/x86_64/boot/setup.S编译⽣成⼆进制类型的bootsect和setup程序;8) build程序将setup和bootsect⼆进制格式⽂件,以及步骤6)中⽣成的vmlinux.bin⼆进制格式⽂件打包成⼀个最终的bzImage.因此,bzImage组成结构:1) bzImage: bootsect+setup+vmlinux.bin2) vmlinux.bin:head.S+misc.c+vmlinux.bin.gz3) vmlinux.bin.gz: gzip压缩的vmlinux.bin即最终的内核3 GNU LD⽤法⼀个C程序的⽣成过程包括:预处理、编译、汇编和链接过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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及其启动流程.读完本文,相信读者能够对Boot Loader原理有一定深刻理解,并能大致知道其他Boot Loader的作用.本文在介绍一些基本知识后,在第7章会引入基本的反汇编过程来讲解GRUB2的启动流程,因为只有直接读代码才能深入学习原理.需要读者:-有一定的汇编语言知识,如果读者对汇编不敢兴趣,可以跳过相关章节-同时也需要读者有一定C语言知识本文稍微有点长,但都是作者本人的经验总结,如果静下心读完,相信对你会有帮助,相比其它GRUB一厚本书,能节约你很多时间。

但由于作者水平有限,有不足之处忘谅解。

2.CentOS7中GRUB2GRUB2是GNU下面的一个项目,有关其详细信息,请参考官方网站: /software/grub/. 相对于GRUB2, 原先的GRUB(i.e. version 0.9x)被称为: GRUB Legacy. 官网上说明: GRUB Legacy is no longer being developed.从 1.x 开始的新版本就称为GRUB 2(注意,虽然称为GRUB2,但其版本号却是从1.x开始1.99也是GRUB2). 现在各种最新发行版本的Linux(包括CentOS7)都采用GRUB2.在CentOS7上可以查看安装的GRUB2版本[root@controller ~]# rpm -qa | grep "grub"grub2-2.02-0.34.el7.centos.x86_64在CentOS7下面/boot/grub2目录可以看到有关GRUB2相关文件. 在/boot/grub2/i386-pc目录下是GRUB2 bootstrap images文件,该目录大部分文件是以.mod结尾,这些文件为GRUB2模块文件,最后在该目录下面有以下两个image文件:[root@controller i386-pc]# ls -lrt *.img-rw-r--r--. 1 root root 26618 7\u6708 11 23:33 core.img-rw-r--r--. 1 root root 512 7\u6708 11 23:33 boot.img以上两个img文件都会被grub2-install命令安装到硬盘上相应位置(在硬盘什么位置后面会说),很有意思的是请注意两点1)boot.img固定为512Byte2)core.img小于32KByte如果你觉得好奇,可以用file命令查看这些image文件类型[root@controller i386-pc]# file boot.imgboot.img: x86 boot sector; partition 4: ID=0xd4, starthead 205, startsector 4277266767, 0 sectors, code offset 0x63[root@controller i386-pc]# file core.imgcore.img: data[root@controller i386-pc]# file xfs.modxfs.mod: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped对于boot.img file命令明确指出其为x86 boot sector,而mod文件却是ELF文件,接下来让我们进一步了解这些bootstrap image文件3.GRUB2 的bootstrap image文件GRUB2有以下各种bootstrap images文件,大伙应悉知,这些image会被grub2-install安装到硬盘相应的位置,当BIOS完成后,他们会被加载并引导系统继续完成启动.3.1. boot.img在PC BIOS系统中,这个image是GRUB2第一个被运行的.它被写在MBR(Master Boot Record)或者在分区(partition)的boot sector中.因为MBR或PC boot sector是固定512字节,这个文件的大小也固定为512byte.boot.img功能很简单,主要是读磁盘中core.img中的第一个扇区(sector)到内存中并跳到该部分运行(如果是硬盘启动,那么该扇区就是下面要介绍的diskboot.img).因为只有512字节,boot.img不能够加载文件系统(比如CentOS7中XFS或其它Linux的EXT4等等),并且只能是从硬盘固定的位置加载.3.2. diskboot.img当从硬盘启动的时候这是core.img第一个扇区(sector)的内容,主要功能是读剩下的core.img到内存中并开始运行kernel.img. 同样diskboot.img没有文件系统的功能(XFS,EXT4等),当他读取剩余的core.img时候,依然从硬盘固定位置读取.根据启动的介质不同,类似diskboot.img文件有很多,在安装GRUB时候选用其中一个,目前大部分都是从硬盘启动diskboot.img1.cdboot.img: 从CD-ROM启动2.pxeboot.img: 从PXE网络启动3.Lnxboot.img: 如果从其他bootloader比如LILO(用image=’section)启动,这个image使GRUB看上去像一个Linux内核.3.3. kernel.img这个文件包含了GRUB2基本的运行时支撑:对设备及文件的框架,环境变量,恢复模式下的命令行等等.一般我们不会直接使用它,但是它是core.img中必不可少的一部分.3.4. core.img这个是GRUB的核心.他是被grub2-mkimage命令生存,包含了kernel.img以及一些必须必要的modules. 通常core.img包含了足够的模块(modules)为了访问XFS/EXT4文件系统/boot/grub2目录,并且在运行时加载从文件系统(XFS)所有剩余的模块,这些剩余模块包含启动目录处理,加载操作系统等等功能.模块化的设计思路最主要的目的是使core.img保持足够小,目前disk限制core.img安装必须小于32KB. core.img一般被安装在硬盘特殊区域:embedding area(夹层区),这个区一般有32K限制,我们在后面会介绍什么是夹层区.3.5. *.mod所有GRUB其他部分被称为模块,他们大部分被core.img在运行时自动动态加载,其中一小部分被整合到core.img中,这小部分是必须,比如文件系统支持(xfs.mod)模块可以手工加载,请参考insmod command(在本文不作介绍,请查阅相关文档)注意:如果对以上各种image文件还是不清楚,请继续往下读,后面会有详细说明。

4.对比GRUB LegacyGRUB2 与GRUB Legacy不同,很多人都熟悉GRUB Legacy里面的stage1, stage1_5,stage2等等概念,而在GRUB2里面,这些被各种bootstrap image文件替代:boot.imgdiskboot.imgcore.img大伙应悉知以上三个images4.1. stage1GRUB Legacy中stage1相当于GRUB 2中boot.img, 他们完成相同的功能.4.2. *_stage1_5GRUB Legacy中Stage 1.5包含了足够的文件系统(XFS或EXT4)代码而允许Stage2从文件系统中直接载入系统,就这个意义上来说很像GRUB 2中的core.img.不过core.img功能更加强大,它提供了恢复shell,使能够在不能加载其他模块(modules)情况下(比如partition number已经改变)能够人工恢复。

相关文档
最新文档