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里

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
更新说明: 2017-02-04(yaya) Ls command: Empty Folder returns false. 2016-12-08(yaya) 修正lz4、vhd不显示解压缩进度指示。增加lzma解压缩进度指示。 2016-11-09(不点) 0x8205 bit 5 = 1: 使checkkey闲置循环停止指令。 2016-04-13(yaya) 支持动画菜单 setmenu --graphic-entry=类型=菜单行数=菜单列数=图形宽(像素)=图形高(像素)=菜单行间距(像素) 菜单项0的路径文件名 类型: 位0:高亮指定颜色 位1:高亮颜色翻转 位2:高亮显示线框 位7:背景透明(最好使用黑色背景) 文件名: *n.??? 格式 n=00-99 高亮颜色由 color HIGHLIGHT=0xrrggbb 指定。 字符可以使用任意字型、字高、颜色,可以辅以图标。 2016-03-25(yaya) 菜单字符可以使用不同字型。 例如:"七" 使用不同字型,将 .hex 文件中的 unicode 码 “4e03” 修改为 “0080”, 将菜单中的 "七" 修改为 “\X0080”。 2016-03-23(yaya) 增强 echo 函数功能。 例如:echo -e \x18 显示 UTF-8 字符 0x18。 echo -e \X2191 显示 unicode 字符 0x2191。 2016-03-15(yaya) 1.增加动画控制热键 F2:播放/停止。 2.增加动画控制位 0x835b,位0:0/1=停止/播放。 3.增加精简字库模式:--simp=起始0,终止0,...,起始3,终止3 中文可以使用 --simp= ,内置字库应当包含 DotSize=[font_h],['simp'] 例如:font --font-high=24 --simp= /24_24.hex DotSize=24,simp 不使用热键: 可以加载 32*32 unifont 全字库 使用热键: 可以加载 24*24 unifont 全字库 使用精简字库: 可以加载 46*46 汉字全字库 使用精简字库及热键:可以加载 40*40 汉字全字库 4.不再支持 bin 格式字库。 2016-03-03(yaya) 1.增加图像背景色设置方法。 splashimage --fill-color=[0xrrggbb] 作用之一,作为小图像的背景。 作用之二,直接作为菜单的背景(即不加载图像背景)。此时只设置字体的前景色即可。 2.增加动画菜单。 splashimage --animated=[type]=[delay]=[last_num]=[x]=[y] START_FILE 类型[type]:bit 0-3: 播放次数 bit 4: 永远重复 bit 7: 透明背景 type=00:禁止播放 播放n次:序列图像各显示n次,时间独占。可作为启动前导、序幕。 永远重复:序列图像无限循环,时间与菜单共享。可作为菜单里的动画。 背景透明:即抠像。要求4角像素为背景色。 背景色最好为白色或黑色,这样可以去除一些灰色杂波。若是彩色背景,则应当非常干净。 提醒:请以16进制方式输入。否则易错。 延迟[delay]:序列图像之间的延迟。单位是滴答,即1/18.2秒。 序列数[last_num]:序列图像总数(2位数,从1开始计数)。 偏移[x]、[y]:图像偏移,单位像素。 起始图像文件 START_FILE 命名规则:*n.??? n: 1-9 或 01-99 或 001-999。 3.增加固定图像的背景色可以透明。 splashimage [--offset=[type]=[x]=[y]] FILE 类型[type]:bit 7: 透明背景 2016-02-14(yaya) setmenu 函数增加菜单项目背景短/满参数(默认短) 2016-01-19(yaya) splashimage 函数增加图像起始偏移(默认0) 2015-08-20(yaya) 1.支持非
nt6 hdd installer v2.x两种模式简介: A.两种模式安全性和可靠性区别: 模式1为grub4dos方式,不排除小部分机器不兼容grub4dos;模式2为微软自带的引导方式,进系统安装界面的可靠性理论为100%。 当源系统为2000/XP/2003时模式1添加启动项的安全性高于模式2,但可以进系统安装界面的比例稍低于模式2,从安全性上考虑优先,当前系统为2000/XP/2003时推荐使用模式1,当模式1不能进安装界面时才更换使用模式2。 当源系统为vista/2008/win7时,模式2的启动项安全性=模式1,进入系统安装界面的可靠性高于模式1,所以推荐使用模式2 B.安装上的区别: 安装模式1时“安装模式1”和“解压系统安装文件至根目录”的操作没有先后之分,而安装模式2时需要先“解压系统安装文件至某分区根目录”后才可以“安装模式2” C.PE系统中使用: 在PE系统中安装nt6 hdd installer v2.x不能使用模式1,只能使用可靠性最高的模式2,因为PE中不用考虑启动安全性,所以以后版本也不打算在PE中更新使用模式1。在PE中安装本程序将不保证原硬盘的原有引导不受破坏,所以本地硬盘上有可用win系统的情况下并不推荐在PE中使用本程序,只在硬盘上无可用win系统时才在PE中安装本程序 但需要注意的是如果是U盘版PE,U盘启动后的在PE中的C盘一定要是硬盘分区盘符而不能是U盘盘符,否则后果未知 D.模式1和Vista Loader可能存在冲突 当你的本地硬盘系统中存在Vista且使用了Vista Loader激活方式时,请慎用模式1,推荐直接安装使用模式2,安装模式1某种情况下会和Vista Loader冲突引起重启后直接进安装程序而无法选择进原系统。如果装成多系统的话新系统安装完全成一样可以进旧系统,但Vista Loader失效,属正常现象,重新恢复Vista Loader引导方法不作讨论。 使用方法: (2008不等同于2008r2,请注意)*(新旧系统包括PE都没有32位和64位限制) 安装win7或2008r2(系统安装过程免命令提示符操作) 一、虚拟光驱加载ISO后复制或UltraISO/WINRAR解压ISO文件至硬盘一非系统分区的根目录 注意:是复制或解压至根目录,而不是某文件夹,这一点和其他硬盘安装方法不同 二、安装 NT6 hdd Installer 三、重启选择Nt6 hdd Installer后自动进入安装界面,安装操作和光盘一样,装在其它分区上成双系统、格式化C盘安装成单系统随你所需 安装vista或2008(系统安装过程需命令提示符操作) 一、虚拟光驱加载ISO后复制或UltraISO/WINRAR解压ISO文件至硬盘一非系统分区的根目录 注意:是复制或解压至根目录,而不是某文件夹,这一点和其他硬盘安装方法不同 二、安装 NT6 hdd Installer 三、不选择开始安装,选择左下角的“修复计算机”,这里如果提示修复启动项,请选择“否”,搜索硬盘系统后出现已安装系统的话也点中间空白处,使出现的旧系统栏不要变成蓝色,跟着一样再选择“命令提示符”,如在前期准备中安装程序放在E盘,则: e:\sources\setup回车 剩下的操作就和光盘安装一样,如果需要格式化安装所在分区,不能装在存放安装文件的分区上,装在其它分区上成双系统、格式化C盘结果为单系统就全部由你自己决定了 相应的图片教程为新手而作,别嫌繁琐 下面列出有可能出现的问题:只要操作正确,出现的可能性极小且不影响原系统 一、重启后没nt6 hdd installer启动菜单,不太可能,有请反馈。 二、启动菜单中选择nt6 hdd installer mode 1后无法进入安装界面,提示找不到sources/setup.exe,先检查WIN7安装文件的位置是否根目录,确认无误的话分区格式和模式1不兼容,不影响原系统,请安装和使用模式2 三、启动菜单中选择nt6 hdd installer mode 1后无提示黑屏或自动重启,一般由于机器硬件或磁盘系统不兼容模式1,不影响原系统,请安装和使用模式2 以下和本程序没有关系,系统安装过程常见问题,顺便一提,以免误认为本程序引起 nt6 hdd installer的功能只实现进到安装界面,进安装界面后的故障不再和nt6 hdd installer有关 一、有使用过其它硬盘安装方法(复制BOOT文件夹至C盘)不成功的请先删除复制的C盘的BOOT文件夹后再行安装,否则安装成多系统有可能造成无法完成安装而失败,格C盘装成单系统的话删不删都不影响。 二、进安装后无法选择盘符,提示加载驱动,如果你是装Vista/2008,请自行检查是运行了盘符:\sources\setup.exe(正确)而不是运行了盘符:\setup.exe(错误);确定运行无误或装win7/2008r2(免输命令)的话请自行搜索主板芯片组在装相应系统时是否应该加载驱动,出现这种情况正常光盘启动安装一样提示,加载驱动或BIOS设置硬盘兼容模式的方法请自行解决。 三、安装中途蓝屏/死机的,确认下载的ISO无损坏的话自行检查硬件兼容性(尽可能拔除可拔除的外设),光盘安装多数一样会出现这种情况。 四、安装成多系统后进WIN7没发现原C盘或原C盘盘符变成D,WIN7所在盘变成C,正常现象,光盘安装也是一样结果,原C盘盘符被隐藏的情况如果有需要可以在磁盘管理中为被隐藏的原C盘添加盘符就可以了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值