详解grub(一)

什么是grub

1、什么是多重操作系统引导管理器及工作原理;

系统启动引导管理器,是在计算机启动后运行的第一个程序,他是用来负责加载、传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成;

Briefly, boot loader is the first software program that runs when a computerstarts. It is responsible for loading and transferring control to the operatingsystem kernel software (such as the Hurd or the Linux). The kernel, in turn,initializes the rest of the operating system (e.g. GNU).

在X86架构的机器中,Linux、BSD或其它Unix类的操作系统中GRUB、LILO是大家最为常用,应该说是主流;

Windows也有类似的工具NTLOADER;比如我们在机器中安装了Windows 98后,我们再安装一个Windows XP,在机器启动的会有一个菜单让我们选择进入是进入Windows 98还是进入WindowsXP。NTLOADER就是一个多系统启动引导管理器,NTLOADER同样也能引导Linux,只是极为麻烦罢了;

在Powerpc架构的机器中,如果安装了Linux的Powerpc版本,大多是用yaboot多重引导管理器,比如Apple机目前用的是IBM Powerpc处理器,所以在如果想在Apple机上,安装Macos和LinuxPowerpc版本,大多是用yaboot来引导多个操作系统;

因为目前X86架构的机器仍是主流,所以目前GRUB和LILO仍然是我们最常用的多重操作系统引导管理器;

2、什么是GRUB;为什么我要选择GRUB;

1)什么是GRUB;

GNU GRUB 是一个多重操作系统启动管理器。GNU GRUB是由GRUB(GRandUnified Bootloader)派生而来。GRUB最初由Erich Stefan Boleyn 设计和应用;

GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand UnifiedBootloader, which was originally designed and implemented by Erich StefanBoleyn.

2)“GRUB太不好用”──对GRUB的认识的误区;

GRUB真的不好用吗?不是的,通过LinuxSir.Org社区近四年来的运行,我发现了大多新手弟兄还是不太了解GRUB;当然这也有中文Linux社区的责任,虽然也有GRUB的中文译本,初学Linux的弟兄可能有点看不懂;

3、为什么要选择GRUB;

基于在X86架构的CPU而开发操作系统,系统引导管理器不仅仅有GRUB,而且也有LILO,但对于多重系统引导管理器,你只能选择其一而用;不能两个同时使用;

目前这两个多重系统引导管理器是大家最常用的,也是主流Linux发行版而采用的;有的弟兄喜欢GRUB。

主流发行版 Fedora、Redhat、Centos等基于RPM包的系统,在最新版本中都默认GRUB引导;Slackware目前仍采用LILO;而Debian发行版目前最新的版本也是采用GRUB;

从目前看来,GRUB有逐渐取代LILO之势,GRUB2.0正在开发之中;所以我们有理由用GRUB,我也有理由写GRUB使用教程;

二、grub启动镜像

GRUB 由多个映像组成:用于启动的各种引导映像 GRUB 以各种方式,一个内核映像和一组模块,它们是 与内核映像组合以形成核心映像。这是一个简短的 它们的概述。

boot.img
在 PC BIOS 系统上,此映像是 GRUB 启动的第一部分。是的 写入主引导记录 (MBR) 或分区的引导扇区。 由于 PC 启动扇区为 512 字节,因此此映像的大小正好为 512 字节。

的唯一功能是读取核心的第一个扇区 本地磁盘中的映像并跳转到该磁盘。由于大小限制,无法理解任何文件系统结构,因此对第一个扇区的位置进行硬编码 安装 GRUB 时的核心映像。boot.imgboot.imggrub-installboot.img

diskboot.img
从 硬盘。它将核心映像的其余部分读入内存并启动 内核。由于文件系统处理尚不可用,因此它对 使用阻止列表格式的核心映像的位置。

cdboot.img
从 光驱。它执行与 类似的功能。diskboot.img

pxeboot.img
从 使用 PXE 的网络。请参阅网络。

lnxboot.img
此图像可以放置在核心图像的开头,以便使 GRUB 看起来很像一个 Linux 内核,它可以由 LILO 使用 ''部分。image=

kernel.img
此映像包含 GRUB 的基本运行时功能:设备框架 和文件处理、环境变量、救援模式命令行 解析器,依此类推。它很少直接使用,而是内置于所有核心中 图像。

core.img
这是 GRUB 的核心映像。它是从内核动态构建的 图像和程序的任意模块列表。通常,它包含足够的模块来访问 , 并加载其他所有内容(包括菜单处理,加载能力 目标操作系统等),在运行时从文件系统。这 模块化设计允许核心图像保持较小,因为 必须安装它的磁盘通常小至 32KB。grub-mkimage/boot/grub

有关核心映像可以位于何处的详细信息,请参阅 BIOS 安装 安装在 PC 系统上。

*.mod
GRUB 中的其他所有内容都驻留在可动态加载的模块中。这些是 通常自动加载,或者内置到核心映像中(如果它们是) 必需的,但也可以使用命令手动加载(请参阅 insmod)。insmod

对于 GRUB 旧版用户
GRUB 2 的设计与 GRUB Legacy 不同,因此与 它使用的图像不能准确。尽管如此,GRUB 旧版用户经常 用他们熟悉的术语提问,所以这里有一个简短的 GRUB 2 的图像与此相关的指南。

stage1
GRUB Legacy 的第 1 阶段与 GRUB 2 非常相似,并且 它们具有相同的功能。boot.img

*_stage1_5
在 GRUB Legacy 中,阶段 1.5 的功能是包含足够的文件系统代码 以允许从普通文件系统读取更大的阶段 2。在 在这方面,它的功能类似于 GRUB 2。 但是,比阶段 1.5 的能力要强得多;既然它 提供救援外壳,有时可以在 无法加载任何其他模块的事件,例如如果分区 数字发生了变化。 以更灵活的方式构建, 允许 GRUB 2 支持从高级磁盘类型读取模块,例如 LVM 和 RAID。core.imgcore.imgcore.img

GRUB Legacy 在某些有限的版本中只能运行阶段 1 和阶段 2 配置,而 GRUB 2 需要但不能工作 没有它。core.img

stage2
GRUB 2 没有单个阶段 2 映像。相反,它会在运行时加载模块。/boot/grub

stage2_eltorito
在 GRUB 2 中,用于从 CD-ROM 驱动器引导的映像现在使用 和 构建,确保核心映像 包含“”模块。通常最好为此使用该程序。cdboot.imgcore.imgiso9660grub-mkrescue

nbgrub
在 GRUB 2 中还没有等效项;它被使用 Etherboot 和其他一些网络引导加载程序。nbgrub

pxegrub
在 GRUB 2 中,用于 PXE 网络引导的映像现在使用 和 构造,确保核心映像 包含“”和“”模块。

三、基础模块

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命令,算是另一大缺憾。
  8. 在传统grub软件安装完后,在/usr/share/grub/RELEASE/目录下会生成一些stage文件。
  9. 在grub2软件安装完后,会在/usr/lib/grub/i386-pc/目录下生成很多模块文件和img文件,还包括一些lst列表文件。
    当使用grub来管理启动菜单时,那么boot loader都是grub程序安装的。

传统的grub将stage1转换后的内容安装到MBR(VBR或EBR)中的boot loader部分,将stage1_5转换后的内容安装在紧跟在MBR后的扇区中,将stage2转换后的内容安装在/boot分区中。

grub2将boot.img转换后的内容安装到MBR(VBR或EBR)中的boot loader部分,将diskboot.img和kernel.img结合成为core.img,同时还会嵌入一些模块或加载模块的代码到core.img中,然后将core.img转换后的内容安装到磁盘的指定位置处。

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文件

3、grub2引导操作系统的方式

grub2支持两种方式引导操作系统:

  • 直接引导:(direct-load)直接通过默认的grub2 boot loader来引导写在默认配置文件中的操作系统
  • 链式引导:(chain-load)使用默认grub2 boot loader链式引导另一个boot loader,该boot loader将引导对应的操作系统

一般只使用第一种方式,只有想引导grub默认不支持的操作系统时才会使用第二种方式。

4、grub2的安装位置

官方手册原文:https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html#BIOS-installation

严格地说是core.img的安装位置,因为boot.img的位置是固定在MBR或VBR或EBR上的。

(1).MBR

MBR格式的分区表用于PC BIOS平台,这种格式允许四个主分区和额外的逻辑分区。使用这种格式的分区表,有两种方式安装GURB:

嵌入到MBR和第一个分区中间的空间,这部分就是大众所称的"boot track",“MBR gap"或"embedding area”,它们大致需要31kB的空间;
将core.img安装到某个文件系统中,然后使用分区的第一个扇区(严格地说不是第一个扇区,而是第一个block)存储启动它的代码。
这两种方法有不同的问题。

使用嵌入的方式安装grub,就没有保留的空闲空间来保证安全性,例如有些专门的软件就是使用这段空间来实现许可限制的;另外分区的时候,虽然会在MBR和第一个分区中间留下空闲空间,但可能留下的空间会比这更小。

方法二安装grub到文件系统,但这样的grub是脆弱的。例如,文件系统的某些特性需要做尾部包装,甚至某些fsck检测,它们可能会移动这些block。

GRUB开发团队建议将GRUB嵌入到MBR和第一个分区之间,除非有特殊需求,但仍必须要保证第一个分区至少是从第31kB(第63个扇区)之后才开始创建的。

现在的磁盘设备,一般都会有分区边界对齐的性能优化提醒,所以第一个分区可能会自动从第1MB处开始创建。

(2).GPT

一些新的系统使用GUID分区表(GPT)格式,这种格式是EFI固件所指定的一部分。但如果操作系统支持的话,GPT也可以用于BIOS平台(即MBR风格结合GPT格式的磁盘),使用这种格式,需要使用独立的BIOS boot分区来保存GRUB,GRUB被嵌入到此分区,不会有任何风险。

当在gpt磁盘上创建一个BIOS boot分区时,需要保证两件事:(1)它最小是31kB大小,但一般都会为此分区划分1MB的空间用于可扩展性;(2)必须要有合理的分区类型标识(flag type)。

例如使用gun parted工具时,可以设置为bios_grub标识:

# parted /dev/sda toggle partition_num bios_grub
# parted /dev/sda set partiton_num bios_grub on

如果使用gdisk分区工具时,则分类类型设置为"EF02"。

如果使用其他的分区工具,可能需要指定guid,则可以指定其guid为"21686148-6449-6e6f-744e656564454649"。

下图是某个bios/gpt格式的bios boot分区信息,从中可见,它大小为1M,没有文件系统,分区表示为bios_grub。
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CentOS中安装GRUB有两种方法,一种是通过已经安装好的GRUB配置文件进行修改,另一种是手动建立GRUB配置文件。 如果已经安装好GRUB,可以直接修改/boot/grub/grub.conf配置文件。打开终端并以管理员身份登录,输入以下命令: ``` sudo vi /boot/grub/grub.conf ``` 接下来,你可以看到配置文件的内容。你可以根据需要进行修改,例如设置默认启动项、设置超时时间等。保存并退出文件。 如果是尚未安装GRUBLinux系统,你需要手动建立GRUB配置文件。打开终端并以管理员身份登录,输入以下命令: ``` sudo vi /boot/grub/grub.conf ``` 然后,根据你的需求添加以下内容到配置文件中: ``` default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-279.el6.i686) root(hd0,0) kemel/vmlinuz-2.6.32-279.el6.i686 ro root=UUID=b9a7a1a8-767f-4a87-8a2ba535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkemel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet initrd/initramfs-2.6.32-279.el6.i686.img title CentOS tdisk root(hd1,0) chainloader 1 ``` 在配置文件中,你可以根据需要修改默认启动项、超时时间、背景图像等。保存并退出文件。 另外,需要注意的是,如果系统中没有grub-install命令,则说明没有安装GRUB软件。你可以使用源码包安装或者使用RPM包安装。如果你选择使用RPM包安装,可以使用以下命令: ``` sudo yum -y install grub ``` 这样,你就完成了在CentOS中安装GRUB的步骤。 参考资料: Linux GRUB手动安装方法详解 [2] Linux学习-72-GRUB加密方法(2种加密方式)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值