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