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个不同的方式作一下区分:

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>.why?
因为这种安装方式没有告知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命令简单很多。但实际的过程比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里

转载于:https://www.cnblogs.com/zhengah/p/4238396.html

grub安装的 三种安装方式相关推荐

  1. ubuntu安装mysql没反应_Ubuntu安装mysql三种安装方式

    三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/sourc ...

  2. Centos 6.8安装open***.三种认证方式

    Centos X64 6.8下安装Open***,三种认证方式 环境说明: 主机名称:open***01 安装版本为open***-2.3.11-1.el6.x86_64 相关资源下载连接如下: 链接 ...

  3. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

  4. KALI的三种安装方式

    前言 在本文中,我将详细的讲述kali的三种实现方式的优缺点(虚拟机.便携式存储介质.物理机),以及安装方式,文中所使用的工具和镜像链接也会放在开头. 链接 kali镜像包下载地址: Get Kali ...

  5. 【Linux入门到精通系列讲解】Centos 7软件安装的三种方式

    centos 软件安装的三种方式 Linux下面安装软件的常见方法: 一.yum 替你下载软件 替你安装 替你解决依赖关系 点外卖 缺少的东西 外卖解决 1.方便 简单 2.没有办法深入修改 yum ...

  6. Eclipse插件安装的三种方式

    Eclipse插件安装总结通过个人的学习体会,将目前Eclipse插件安装的三种方式,总结如下: 第一种方法很简单,在Eclipse的主目录(%ECLIPSE_HOME%)下有一个plugins目录和 ...

  7. hive安装测试及Hive 元数据的三种存储方式

    一  hive安装测试 1.下载解压 tar -xf hive-x.y.z.tar.gz(本次安装为hive-0.8.1.tar.gz) 将解压后的hive-0.8.1文件放在系统的/home/had ...

  8. linux postgresql默认安装目录,postgresql - 三种安装方式(示例代码)

    最近接触了postgresql的安装,和大家分享一下. 一.简 介 PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数 ...

  9. mysql安装方法_MySQL安装的三种方式

    MySQL安装的三种方式 Mysql安装方式对比 安装方式 安装简易度 使用简易度 定制化程度 适合范围 rpm包安装 简单 简单 低 仅适合redhat/centos系列linux 二进制安装 安装 ...

最新文章

  1. gdb调试 print打印不出变量值或者不准确
  2. 难点电路详解之负反馈放大器电路(1)
  3. Linux_Rsync远程同步备份服务器
  4. HDU - 3966 Aragorn's Story(树链剖分)
  5. android 开机启动服务。
  6. jdbctemplate mysql 配置_Spring Boot 初级入门教程(十四) —— 配置 MySQL 数据库和使用 JdbcTemplate 测试...
  7. unity 编辑器 混合使用固定布局和自动布局(二)
  8. .Net Core[译文]
  9. Hadoop完全分布式配置
  10. Rational Rose安装教程
  11. Excel在两列排序不同的数据中查找出不同的数据
  12. 怎么下载正版java7_Java7中jdk的下载和安装
  13. 团队现场编程实战(抽奖系统)
  14. 3点15分夹角多少度
  15. 经典文献阅读之--lris(优于Scan Context的回环检测)
  16. Android游戏开发教程汇总
  17. 完美Zotero文件同步,Zotero+Koofr+OneDrive神器叠buff
  18. 【开箱】B.FRIEND MK3机械式键盘!可换轴换灯,绝美双色金属底座!
  19. ITOP-1 Docker安装部署itop
  20. Java中的引用传递

热门文章

  1. 三个线程交替打印ABC(Condition实现精确通知)
  2. 今天是1024也是霜降
  3. Python知识: scipy signal.chirp用法例
  4. halcon的算子清点: Chapter 2-3-4 控制、开发、文件操作
  5. python命令式编程的概念,【Python】十分钟学会函数式编程
  6. 多线程共用全局变量可能存在的威胁
  7. Python-OpenCV 处理图像(五):图像中边界和轮廓检测
  8. Java 序列化Serializable详解(附详细例子)
  9. Spring的AOP原理
  10. 详解Tomcat配置JVM参数步骤