[Linux] GRUB引导 学习笔记(一)

目录

概念

2.1 BIOS

2.2 UEFI

2.3 MBR与GPT

2.3.1 MBR

2.3.2 GPT

2.3.3 总结

2.4 GRUB

GRUB2和GRUB Legacy区别

进入GRUB命令行

命令

 GRUB工具命令

GRUB2配置

1.主要配置文件

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

定制GRUB的步骤


概念

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 updateGRUB_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-grub
bash: update-grub: command not found...

发现命令不存在

[root@localhost ~]# whereis grub
grub: /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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182759.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++基础——对于C语言缺点的补充(2)

上篇文章中说到,为了解决C语言会出现人为定义的函数和库函数出现重定义的错误,C引入了一个新的概念,即命名空间,通过认为定义命名空间,来解决上述问题。 在本篇文章中,将继续介绍C相对于C语言不足来进行的补…

Fourier分析导论——第4章——Fourier级数的一些应用(E.M. Stein R. Shakarchi)

第 4 章 傅里叶级数的一些应用 Fourier series and analogous expansions intervene very naturally in the general theory of curves and surfaces. In effect, this theory, conceived from the point of view of analysis, deals obviously with the study of arbitra…

基于MSF控制同一热点(局域网)下的其他设备

主要是基于Metasploit,利于msfvenom生成的恶意软件获取目标shell。 我想各位都很熟悉的一个操作,那就是使用虚拟机当攻击机,本地物理机作为靶机,但这样其实并不能很好的反应出现实情况,有点自己攻击自己的感觉。 因此…

pytorch安装1

用豆瓣源安装pytorch1.5.1(速度很快)-CSDN博客 详情请参考这位神仙的博客 我真的哭死,原来torch都安装好了,好不容易全部加载好了,但是,gpu配不上去,后来发现还是版本的问题版本不匹配具体版本…

JTS: 16 Orientation 方向

这里写目录标题 版本代码 版本 org.locationtech.jts:jts-core:1.19.0 链接: github 代码 public static void main(String[] args) {OrientationUse orientationUse new OrientationUse();orientationUse.test02();}public void test02() {A new Coordinate(2, 1);B new …

数据结构初阶---复杂度的OJ例题

复杂度的OJ例题 一、消失的数字1.思路一2.思路二3.思路三 二、旋转数组1.思路一2.思路二3.思路三 一、消失的数字 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗? 链接:力扣&…

远程管理SSH服务

一、搭建SSH服务 1、关闭防火墙与SELinux # 关闭firewalld防火墙 # 临时关闭 systemctl stop firewalld # 关闭开机自启动 systemctl disable firewalld ​ # 关闭selinux # 临时关闭 setenforce 0 # 修改配置文件 永久关闭 vim /etc/selinux/config SELINUXdisabled 2、配置…

【深度学习】pytorch——Autograd

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 深度学习专栏链接: http://t.csdnimg.cn/dscW7 pytorch——Autograd Autograd简介requires_grad计算图没有梯度追踪的张量ensor.data 、tensor.detach()非叶子节点的梯度计算图特点总结 利用Autograd实…

Transformer:开源机器学习项目,上千种预训练模型 | 开源日报 No.66

huggingface/transformers Stars: 113.5k License: Apache-2.0 这个项目是一个名为 Transformers 的开源机器学习项目,它提供了数千种预训练模型,用于在文本、视觉和音频等不同领域执行任务。该项目主要功能包括: 文本处理:支持…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了,哈希类型是指值本⾝⼜是⼀个键值对结构,形如key"key",value{{field1…

面向萌新的数学建模入门指南

时间飞逝,我的大一建模生涯也告一段落。感谢建模路上帮助过我的学长和学姐们,滴水之恩当涌泉相报,写下这篇感想,希望可以给学弟学妹们一丝启发,也就完成我的想法了。拙劣的文笔,也不知道写些啥,…

idea必装插件EditStarters(快速引入依赖)

前言 一般来说我们要向一个 servlet 或者 Spring 项目中引入依赖都需要先到中心仓库找到对应的依赖,选择依赖的版本,把依赖添加到配置文件 pom.xml 中,这其实还是有点麻烦的,而通过 EditStarters 插件我们可以迅速的添加依赖到项目…

ElasticSearch高级功能详解与原理剖析

ES数据预处理 Ingest Node Elasticsearch 5.0后,引入的一种新的节点类型。默认配置下,每个节点都是Ingest Node: 具有预处理数据的能力,可拦截lndex或Bulk API的请求对数据进行转换,并重新返回给Index或Bulk APl 无…

万宾科技管网水位监测助力智慧城市的排水系统

以往如果要了解城市地下排水管网的水位变化,需要依靠人工巡检或者排查的方式,这不仅加大了人员的工作量,而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况,都会降低市政府对排水管网的管理能力&a…

自动控制原理答案

题目 现有一个单位反馈系统的开环传递函数为 试对该系统进行以下分析。 1.基础分析 计算该系统的闭环传递函数。 2.稳定性分析 2.1 使用劳斯判据分析该系统的稳定性 2.2 使用MATLAB编程,计算该系统有关于稳定性分析的零、极点,分析其稳定性。 3.暂态性…

京东数据平台:2023年Q3季度黄金市场数据分析

继9月国内黄金市场持续上涨后,进入10月中下旬后,黄金行情再度反转,多家品牌金饰价格再次突破600元/克,达到611元/克。 今年以来,黄金行情不断走俏,销售市场也有明显增长。根据鲸参谋平台的数据显示&#xf…

最受欢迎的程序员副业排行榜TOP6

程序员接单的情况并不少见,因为程序员职业工种的特殊性,能够比较快的衔接上新项目和新技术,所以接私活做副业成了许多程序员的不二之选。 程序员的副业是指程序员在业余时间里从事与编程相关的兼职工作,或者是与技术相关的创业项…

goquery库编写程序

goquery库的爬虫程序,该程序使用Go来爬取视频。。 package main ​ import ("fmt""net/http""net/http/httputil""io/ioutil""log""strings""golang.org/x/net/proxy""golang.org/x/n…

ACWing.第 128 场周赛 (B、C题解)

B、5286. 翻倍(思维推导) 一、题目要求 给定两个正整数,初始时两数均为 1。 你可以进行任意次(也可以不进行)翻倍操作,每次操作任选一个非负整数 k,令两数中的一个数乘以 k,另一个…

响应式项目施工装饰工程企业网站模板源码带后台

模板信息: 模板编号:647 模板编码:UTF8 模板颜色:蓝色 模板分类:基建、施工、地产、物业 适合行业:建筑施工类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统&#xff…