grub 的三种安装方式

2024-04-22 14:38
文章标签 安装 三种 方式 grub

本文主要是介绍grub 的三种安装方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 引言 grub是什么?


最常态的理解,grub是一个bootloader或者是一个bootmanager,通过grub可以引导种类丰富的系统,如linux、freebsd、windows等。但一旦进入linux操作系统(如无特殊声明,以下提及操作系统或系统皆为linux操作系统),可以敲一个grub命令,就进入”grub>”提示状态,然后可以进入操作若干命令。这时候的grub是什么?是shell,是一个和bash类似的一个shell。并且提供了两种工作模式,交互(interactive)模式和非交互(batch)两种模式,grub-install命令正是利用了grub的非交互模式,在系统下直接完成了grub的安装。

                         

2. 三种安装方式 

安装grub其实有3种方式,最常用的是grub-install,其实还有两种grub>install和grub>setup,其中grub>install是最底层的方式,grub>setup是更高一层的方式,而grub-install是最高级最简单的方式。接下来我们从grub>install开始讲,来对3个不同的方式作一下区分:


grub-install(上层)

-------------------------------

grub->setup

-------------------------------

grub->install(底层)


2.1. grub>install 


进入grub>提示符之后,输入help install命令,会有如下提示:

install: install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE][REAL_CONFIG_FILE]

其中,STAGE1 DEVICE STAGE2是必不可少的,以下为示例:

install (hd0,0)/grub/stage1 (hd0) (hd0,0)/grub/stage2 


或者可以如下:

root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 

通过这样一种方式可以成功安装grub


问题:

系统reboot之后,不能进入系统,却直接进入grub>.


答案:

因为这种安装方式没有告知grub去哪里找grub.conf,stage2找不到grub.conf就会进入grub>.

用以下形式安装就ok了。
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf                                


2.2. grub>setup 


进入grub>提示符之后,输入help setup命令,会有如下提示:

 setup: setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]
      Set up the installation of GRUB automatically. This command uses
      the more flexible command "install" in the backend and installs

      GRUB into the device INSTALL_DEVICE.   

 从以上内容我们可以看出,setup是一个自动化(automatically)的grub安装,它在后台(backend)运行了更灵活多变的install命令。看示例:

 grub> root (hd0,0)
   Filesystem type is ext2fs, partition type 0x83


  grub> setup (hd0)
   Checking if "/boot/grub/stage1" exists... no
   Checking if "/grub/stage1" exists... yes
   Checking if "/grub/stage2" exists... yes
   Checking if "/grub/e2fs_stage1_5" exists... yes
   Running "embed /grub/e2fs_stage1_5 (hd0)"...  16 sectors are embedded.
  succeeded
   Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done. 
从以上可以看出,setup命令将install命令封装了,使用setup命令比使用install命令简单很多。只需要指定root分区,然后运行setup即可。但实际的过程比install却要复杂一些,其中尤其重要的一点是:使用setup会植入e2fs_stage1_5到硬盘的第一柱面第16扇区之后(这个没有准确验证过),这会带来和通过install安装一个很大的区别。


2.3. grub-install


 安装grub最常用的方式是在进入系统之后,通过grub-install脚本进行安装,通过这个脚本安装和前两种方式有何不同呢?

脚本其实是通过grub的非交互模式,调用了setup命令安装grub的。[*]脚本的安装源是/usr/share/grub/i386-redhat/下的stage1、2和各种stage1.5,而前两种方式使用的源是/boot/grub/下的相同内容。所以通过grub-instal安装grub,原先在/boot/grub下的stage文件都删除也没关系,该脚本每次执行都会删除这些文件的。反之,通过前两种方式安装的话,相应的stage文件是不可或缺的,否则会报错,安装失败。


问题:

[*]通过grub-install安装grub之后,如果我们删除了/boot/grub/下的stage2文件,系统会无法启动,报如下错:                                  GRUB loading stage 1.5

  GRUB loading, please wait...
  Error 15                                
但是,如果是通过grub>install方式安装的grub,删除/boot/grub/stage2就没有问题,why?因为通过grub>install安装grub,stage1是直接通过stage2所在的blocklist找stage2,我们删除或者改名stage2文件,文件的存放位置是不变的,因此能找到。而通过grub-install脚本,或者grub>setup,会智能的找到相应的stage1.5,例如:/grub/e2fs_stage1_5,然后通过stage1.5认识文件系统,是通过文件名去找stage2的,所以通过这两种方式安装的grub,不可删除或者改名/boot/grub/stage2。  


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
了很多关于grub的资料,但还是有一些地方不是很明白,希望在这里和大家讨论一下
说法一
stage1是放在bootloader里的系统,他是为了找stage1.5和stage2存在的。在安装grub时已经在stage1
里嵌入了stage1.5和stage2的磁盘物理地址,当stage1找到stage1.5时由stage1.5找stage2,要是找不到
stage1.5就以写在stage1里stage2的磁盘物理地址直接去找stage2。
但是现在有疑问的地方是:
stage1找到stage1.5后没有将控制权交给stage1.5,如果是将控制交给了stage1.5,那么当stage1.5
以文件系统的方式找不到时stage2时直接以磁盘物理地址去找stage2,那这就是说stage1.5里也嵌有
stage2的物理地址。还是:
stage1找到stage1.5后并没有将控制权交给stage1.5,让stage1.5以文件系统的方式去找stage2,要是找不到
再由stage1直接去找stage2。也就是说stage2的磁盘物理地址只写在了stage1里。
说法二
stage1并不是去找的stage1.5和stage2的。而是在引导时,会去找第二扇区的start,然后由start去找stage1.5和stage2。
stage1里并没有嵌入stage1.5和stage2的磁盘物理地址。
疑问和上面是相同的。他们的控制区是怎么交割的!及stage1.5和stage2的磁盘物理地址是否嵌入在start中。及stage1.5里是否
嵌入了stage2的磁盘物理地址。
可以肯定是:
stage1.5是放在0磁道第3扇区和第64扇区的扇区集里,且当你安装grub时会根据你/boot分区所属的文件系统,来选者stage1.5。
(如果你的/boot分区是ext3的。那么安装时就只将ext3的stage1.5安装,其他的是以文件的形式放在/boot/grub里)
stage2是放在/boot/grub里

这篇关于grub 的三种安装方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/926055

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点