概念

BIOS、UEFI、MBR、GPT、GRUB 到底是什么意思?

2.1 BIOS

BIOS(Basic Input Output System),直译成中文名称就是" 基本输入输出系统"。它是一组固化到主板中一个 ROM 芯片上的程序,它可以从 CMOS 中读写系统设置的具体信息。此程序保存着计算机最重要的基本输入输出程序、开机后的自检程序和系统自启动程序。

简单来说,BIOS是一个控制电脑中所有输入输出的程序,它可以对主板上的键盘、鼠标、外部接口、频率、电源、磁盘驱动器等方面进行参数控制和调整。

2.2 UEFI

UEFI(Unified Extensible Firmware Interface)则是取代传统 BIOS 的,相比传统 BIOS 来说,它更易实现,容错和纠错特性也更强。

传统BIOS主要支持MBR引导,UEFI则是取代传统BIOS,它加入了对新硬件的支持,其中就有支持2TB以上硬盘。

2.3 MBR 与 GPT

全新硬盘在使用之前必须进行分区格式化,硬盘分区初始化的格式主要有两种,分别为 MBR格式和 GPT格式。

2.3.1 MBR

MBR 是传统的分区表类型,当一台电脑启动时,它会先启动主板上的 BIOS 系统,BIOS 再从硬盘上读取 MBR 主引导记录,硬盘上的 MBR 运行后,就会启动操作系统,但最大的缺点则是不支持容量大于 2T 的硬盘。

如下图,查询磁盘分区类似为:MBR

查询方法如下,感兴趣的同学可以查询下自己电脑的磁盘分区类型。

1、win+R,输入diskmgmt.msc,回车,打开磁盘管理器。2、在磁盘上点右键,选属性。3、在卷这一页,可以看到是GTP还是MBR。

2.3.2 GPT

而 GPT 是另一种更先进的磁盘系统分区方式,它的出现弥补了 MBR 这个缺点,最大支持 18EB的硬盘,是基于 UEFI使用的磁盘分区架构。

目前所有 Windows 系统均支持 MBR,而 GPT只有 64位系统才能支持。 BIOS只支持MBR引导系统,而GPT仅可用UEFI引导系统。正因为这样,现在主板大多采用 BIOS 集成 UEFI,或 UEFI 集成 BIOS,以此达到同时兼容 MBR 和 GPT 引导系统的目的。

2.3.3 总结

  • BIOS+MBR
    这是最传统的,系统都会支持;唯一的缺点就是不支持容量大于2T的硬盘
  • BIOS+GPT
    BIOS 是可以使用 GPT 分区表的硬盘来作为数据盘的,但不能引导系统;若电脑同时带有容量小于 2T 的硬盘和容量大于 2T 的硬盘,小于2T的可以用MBR分区表安装系统,而大于2T的可以使用GPT分区表来存放资料。但系统须使用 64 位系统。
  • UEFI+MBR
    可以把 UEFI 设置成Legacy模式(传统模式)让其支持传统 MBR 启动,效果同BIOS+MBR;也可以建立 FAT 分区,放置 UEFI 启动文件来,可应用在 U 盘和移动硬盘上实现双模式启动。
  • UEFI+GPT
    如果要把大于 2T 的硬盘作为系统盘来安装系统的话,就必须UEFI+GPT。而且系统须使用 64 位系统,否则无法引导。但系统又不是传统在 PE 下安装后就能直接使用的,引导还得经过处理才行。

2.4 GRUB

GRUB(GRand unified bootloader),多操作系统启动程序。它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。

GRUB 可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。它是一个多重操作系统启动管理器,用来引导不同系统,如 Windows、Linux。Linux 常见的引导程序包括 LILO、GRUB、GRUB2。如下图所示为 GRUB 加载引导流程。

Centos 7 默认使用GRUB2引导系统启动,GRUB2 是基于 GRUB 开发成更加安全强大的多系统引导程序, 最新Linux发行版都是使用GRUB2作为引导程序。同时 GRUB2 采用了模块化设计,使得 GRUB2 核心更加精炼,使用更加灵活,同时也就不需要像 GRUB 分为 stage 1、stage 1.5、stage 2 三个阶段。

GRUB2 和 GRUB Legacy 区别

  • 目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本号是 0.9x 以及之前的版本都称为 GRUB Legacy ,从 1.x 开始的就称为 GRUB 2,目前没有特别说明 GRUB 版本一般是指 GRUB 2,查看 GRUB 版本方法为grub-install --version
  • GRUB 2 是源自于一个名为 PUPA 的项目,目的是建立下一代的 boot loader
  • GRUB 2 几乎是从零开始开始开发的,它和 GRUB Legacy 不同的地方有很多,例如支持 scripts、国际化语言、动态加载模块、带有 resuce 模式等等,这些都是 GRUB Legacy 所没有的.
  • 虽然 GRUB 2 是重写的 GRUB ,但是他借鉴了 grub 的一些特征,grub2 改进如下:

    1. 引导配置文件采用新名字 grub.cfg,新的语法,加入许多新的命令
    2. grub.cfg 是用 grub-mkconfig 自动产生的,由 update-grub 维护,在执行 update-grub 之前修改的配置都不会 生效,这样可以容易的应对内核升级这样情况。
    3. grub2 中的分区号不再是以 0 开始,而是以 1 开始。
    4. 配置文件是不可写的,而是修改文件后用命令自动更新
    5. grub2 有更可靠的方法在磁盘上有多系统时发现文件和目标内核,可以用命令发现系统设备号或者 UUID。
    6. 更多的文件系统支持,如 ext4 hfs ntfs
    7. grub2 可以直接从 lvm 和 raid 读取文件
    8. 在 grub 中的 stage1 stage1.5 stage2 已经被取消
    9. grub2 引入很多设备模块,允许 core 镜像更小
    10. 支持脚本,包括简单的语法
    11. 在启动时没有选择菜单的话,按住 shift 即可强制显示菜单
    12. 可以使用 grub-install -v 来查看系统的 grub 版本

进入 GRUB 命令行

以下图片是 Linux 下的 GRUB 引导界面示例:

按下 e 见可以编辑所选菜单对应的 grub 菜单配置项,按下 c 键可以进入 grub 命令行交互模式。

grub>

ls 列出磁盘分区信息

(hd0),(hd1,msdos1),(hd1,msdos2),(hd1,msdos3)

这里看到只有一个磁盘 hd0

查看包含有

ls (hd1,msdos1)/boot/grub

假定我们在 msdos1 这个分区下发现了 grub.cfg 文件,则表明 Linux 安装在这个分区

注意 grub.cfg 文件不一定在 /boot/grub 这个路径下

加载 grub.cfg 并且 GRUB 引导启动 Linux

configfile (hd0,msdos1)/boot/grub/grub.cfg

命令

设置 GRUB 引导系统的根文件系统位置

set root=(hd0,msdos1)

查看下当前的根文件

ls /

指定 GRUB 程序文件所在的位置

set prefix=(hd0,msdos1)/boot/grub

 GRUB 工具命令

命令

说明

grub-install

生成 Grub 的配置文件(通常是 /boot/grub/grub.cfg),根据系统中已安装的操作系统和内核生成引导菜单。它会扫描系统中的可引导文件并生成菜单项。

grub-mkconfig

生成 Grub 的配置文件(通常是 /boot/grub/grub.cfg),根据系统中已安装的操作系统和内核生成引导菜单。它会扫描系统中的可引导文件并生成菜单项。

grub-editenv

用于编辑 Grub 的环境变量。这些环境变量包括默认启动项、引导选项和其他配置参数。

grub-mkrelpath

生成相对路径,特别是在配置多重引导时使用。它可用于生成可用于配置文件中的相对路径

grub-mkimage

生成 Grub 的镜像文件。镜像文件是包含 Grub 模块和配置文件的单个文件,可用于在无法直接访问文件系统的情况下引导系统。

grub-reboot

设置下一次引导时要使用的默认引导项。使用该命令,您可以设置系统下一次启动时自动选择的引导项。

grub-set-default

设置默认的引导项。它允许您将特定的引导项设置为默认选项,以便在引导时自动选择该项。

grub-probe

用于探测系统中的设备和文件系统。它可以识别硬盘、分区和文件系统类型。

update-grub

用于更新 Grub 的配置文件并重新生成引导菜单。它会扫描系统中已安装的操作系统和内核,并根据配置文件的规则重新生成 Grub 的引导菜单

重新生成 GRUB 配置文件 grub.cfg

你可以使用 grub2-mkconfig 命令重新生成配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

GRUB2 配置

1.主要配置文件

  • /boot/grub/grub.cfg -即使是 root 也不要编辑它,它在每次 update-grub 后自动生成
  • /etc/default/grub - 改变引导菜单外观的主要配置文件
  • /etc/grub.d/ - 各种用于生成 grub.cfg 的脚本文件,每次 update-grub 时会执行里面的文件

2. 通过/etc/default/grub 文件生成 grub.cfg

grub-mkconfig 是根据/etc/default/grub 文件来创建配置文件的。该文件中定义的是 grub 的全局宏,修改内置的宏可以快速生成 grub 配置文件。实际上在/etc/grub.d/目录下还有一些 grub 配置脚本,这些 shell 脚本读取一些脚本配置文件(如/etc/default/grub),根据指定的逻辑生成 grub 配置文件。

在/etc/default/grub 中,使用"key=vaule"的格式,key 全部为大小字母,如果 vaule 部分包含了空格或其他特殊字符,则需要使用引号包围;完全没有必要直接改/boot/grub/grub.cfg 或者/etc/grub.d/下的文件

更多关于 GRUB 可以参考这个官方文档   **https://help.ubuntu.com/community/Grub2**

以下是常见的 GRUB 配置全局宏:

# If you change this file, run 'update-grub' afterwards to update GRUB_DEFAULT=0#设置默认启动项,按menuentry顺序如果要默认从第四个菜单项启动,数字改为3,若改为 saved,则默认为上次启动项 GRUB_TIMEOUT="10"#设置进入默认启动项的等候时间,默认值10秒,按自己需要修改,单位为秒改改为零和负值为无限等待操作 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` #获得发行版名称(比如Ubuntu, Debian,也可以自定义为其他名称) GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"#选择启动的环境,“quiet splash”为图像界面,“text”为文本界面 #GRUB_CMDLINE_LINUX="noresume" #手动添加内核启动参数,比如 acpi=off noapic 等可在这里添加# Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console#设置是否使用图形介面。前面有#注释(使用图形界面),前面没有#注释(仅使用控制台终端,不使用图形介面) ) # The resolution used on graphical terminal# note that you can use only modes which your graphic card supports via VBE# you can see them in real GRUB with the command `vbeinfo'#GRUB_GFXMODE=640x480#设定图形介面分辨率,如不使用默认。把前面#去掉,把分辨率改为800x600或1024x768 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux#GRUB_DISABLE_LINUX_UUID=true#取消注释以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux内核 # Uncomment to disable generation of recovery mode menu entrys#GRUB_DISABLE_LINUX_RECOVERY="true"#定是否创建修复模式菜单项,前面有#注释(建立修复模式).前面没有#注释(不建立修复模式 # Uncomment to get a beep at grub start#GRUB_INIT_TUNE="480 440 1" #当GRUB菜单出现时发出鸣音提醒,户无法看到屏幕特别有用,默认关闭

定制 GRUB 的步骤

  1. 修改/etc/default/grub 文件(Ubuntu16 等系统修改该配置文件)
  2. vim /etc/default/grub
    增加或者修改已有 GRUB 参数设置,例如 GRUB_TIMEOUT="10"
    保存退出
  3. 执行命令sudo update-grub, 更新/boot/grub/grub.cfg 文件中,然后生效

问题:

[root@localhost ~]# update-grubbash: update-grub: command not found...

发现命令不存在

[root@localhost ~]# whereis grubgrub: /usr/lib/grub /etc/grub.d /etc/grub2.cfg /usr/share/grub

发现 grub 已经安装

在某些 Linux 发行版中,update-grub 命令可能不存在。相反,可以使用 grub-mkconfig 命令来更新 GRUB 配置文件。

以下是更新 GRUB 配置文件的步骤:

grub-mkconfig -o /boot/grub/grub.cfg

如果使用 grub2 则使用

grub2-mkconfig -o /boot/grub2/grub.cfg

该命令将扫描系统中的安装操作系统,并生成新的配置文件 /boot/grub/grub.cfg

更新完成后,你可以重启系统以使更改生效。

  • alipay_img
  • wechat_img
此作者没有提供个人介绍
最后更新于 2024-11-17