Ubuntu下Grub配置详解

1 Grub简介 1.1 GNU GRUB

GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序. GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数.

GNU GRUB的前身为Grand Unified Bootloader。它主要用于类Unix系统;同大多Linux发行版一样,GNU系统也采用GNU GRUB作为它的启动器。Solaris从10 1/06版开始在x86系统上也采用GNU GRUB作为启动器。

1.2 grub Legacy和grub 2

注意:目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy ,从 1.x 开始的就称为 GRUB 2

目前 GRUB Legacy 已经停止开发了,只是出于一个修复漏洞的状态,不再增加新的功能了,所有的开发都转移到 GURB 2 之上了

GRUB 2 是源自于一个名为 PUPA 的项目,目的是建立下一代的 boot loader

GRUB 2 几乎是从零开始开始开发的,它和 GRUB Legacy 不同的地方有很多,例如支持 scripts、国际化语言、动态加载模块、带有 resuce 模式等等,这些都是 GRUB Legacy 所没有的

虽然grub2是重写的grub,但是他借鉴了grub的一些特征,grub2改进如下:

引导配置文件采用新名字grub.cfg,新的语法,加入许多新的命令

grub.cfg 是用grub-mkconfig自动产生的,由update-grub维护,在执行update-grub之前修改的配置都不会 生效,这样可以很容易的应对内核升级这样情况。

grub2中的分区号不再是以0开始,而是以1开始。

配置文件是不可写的,而是修改文件后用命令自动更新

grub2有更可靠的方法在磁盘上有多系统时发现文件和目标内核,可以用命令发现系统设备号或者UUID。

更多的文件系统支持,如ext4 hfs ntfs

grub2可以直接从lvm和raid读取文件

在grub中的stage1 stage1.5 stage2已经被取消

grub2引入很多设备模块,允许core镜像更小

支持脚本,包括简单的语法

在启动时没有选择菜单的话,按住shift即可强制显示菜单

可以使用grub-install -v来查看系统的grub版本

1.3 GRUB2与GRUB的区别

GRUB2引导菜单启动项是从/boot自动生成的,不是有menu.lst配置的

执行grub-update之后会自动更新启动项列表,自动添加有效的操作系统项目

分区编号发生变化:第一个分区现在是1而不是0,但第一个设备仍然以0开始计数,如hd0

配置文件的不同更为明显:

配置文件
/boot/grub/menu.lst - 已经被/boot/grub/grub.cfg代替  
/boot/grub.cfg - 即使是root也不要编辑它,它在每次update-grub后自动生成  
/etc/default/grub - 改变引导菜单外观的主要配置文件  
/etc/grub.d/ - 各种用于生成grub.cfg的脚本文件,每次update-grub时会执行里面的文件  
2 选项与文档 2.1 启动选项

如果您安装了Ubuntu/linux操作系统和Windows 7/8/10系统组成双系统.那么您的Grub启动选项应该为如下

Ubuntu GNU/Linux Ubuntu操作系统的启动项 Advabced options for Ubuntu GNU/Linux 高级选项,进入此处可以选择启动的内核版本. memtest86 #内存测试,可以进入此模式运行行一些很耗系统资源的程序,测试系统在高负载的情况下主机是否运行稳定 Windows 7 (loader) (on /dev/sd**) ## /dev/sd**对应你Windows系统所在的分区 2.2 相关文档

grub官方文档

中文版 info grub

GRUB2配置文件”grub.cfg”详解(GRUB2实战手册)–金步国作品

3 grub组件

grub2的组件为grub-pc, 同时grub-common也会默认被安装,grub2是过渡期的虚拟组件,会被安全移除。

3.1 grub工具命令 工具包功能
grub-install   一个完整的grub配置脚本  
update-grub   update-grub主要是在每次配置文件有更新后生成新的grub.cfg, 其实update-grub是调用grub-mkconfig,在系统中还有一个update-grub2,发现他是调用update-grub  
grub-mkconfig   调用grub-mkdevicemap和grub-probe生成grub.cfg  
grub-set-default   设置在下次进入系统时从哪个内核选项进去  
grub-mkdevicemap   为grub自动产生新的device.map,grub-mkdevicemap程序可以创建device.map文件,在执行grub-install时会自动执行他以创建映像关系,如果文件不存在,则会读取/boot/grub/devicd.map这个文件,如果映像文件存在,则grub读取他创建BIOS drives to OS drives  
grub-setup   被grub_install调用,安装grub  
grub-probe   从给定的设备上探测设备信息  

其中grub-install完成如下工作

安装grub到设备中,如果需要会创建/boot/grub目录

他会把.mod、.lst、*.img从 /usr/lib/grub/i386-pc/ 目录复制到/boot/grub目录下,他会覆盖已有文件

然后会调用grub_probe扫描计算机并收集磁盘和分区信息

接着调用grub_mkimage构建一个新的new.img

最后调用grub_setup把grub的boot.img写入MBR中,把core.img写进设备的第一个扇区。

注意

grub_install并不运行grub_mkconfig

示例

grub-install -v

显示版本号

grub-install /dev/sda

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14922.html