grub4dos启动工具入门杂谈

GRUB4DOS是一个优秀的双(多)系统引导软件,是 GNU GRUB 的一个分支,使用GRUB4DOS可以很方便的引导各种操作系统,比如DOS、Windows、 Linux等。是一个可以把U盘制作成光盘似的来进行装系统的启动引导工具。
该项目是由tinybit(不点)于2003年发起的,活跃的开发者主要有tinybit,bean,chenall,roy和karyonix等。
嗯 没错 是国产 我在启动群也待了好多年,不得不说国内牛人真是多。像什么大白菜 一键装机 都是基于他们开发的成果修改的。有兴趣,可以去无忧启动论坛看看。

假如你是第一次听说grub,你可能说我不需要grub。那么,你是否用过“一键ghost”,或者“矮人DOS工具箱”?如果你用过的话,那么你实际上已经在用grub了。包括本人的“GGhost一键恢复”在内的大多数windows下安装的一键恢复类工具及其它dos类维护工具合集,都是基于grub的。

grub4dos相关的资料互联网上并不少,grub4dos软件包里也有说明文件,可是绝大多数资料并不适合刚接触grub的人。初学者下载了grub4dos软件包后,即使大概看了readme.txt文件后,也很可能仍然是一团雾水,不知从何处入手。出现这种状况的一个主要原因是,此软件是作者利用业余时间开发的,开发者在有限的时间里集中精力于排除软件bug,从而无过多剩余精力撰写文档。[注:bean的中文文档的发布,已使文档方面欠缺的局面得以根本改观。]

其实,初步使用这个软件并不难,可以说非常简单。下面的内容参考了有关资料,并结合自己的使用经验,供初学者参考,希望能对你入门grub有所帮助。我自身也是接触grub不久,对grub的了解还很肤浅,错误之处,在所难免,还望不吝指出。

有很多零零碎碎的知识,或是其他一些没办法分类的内容都会在这里写出来,别嫌乱就行,不过依然建议完整读一遍,没准能找到什么有用的内容。

    grub4dos是个启动工具,换句话说如果你想使用的话就需要明白什么是启动,以及整个计算机的一个启动过程。这些就需要你再了解计算机的一些基础知识,比如什么是BIOS,什么是内存地址(或者偏移),什么是启动顺序,什么是主引导记录(MBR)等等等等,这些大家可以在网上找到更详细的说明,下面只会简单提到一些。

    BIOS是直接与硬件打交道的底层系统,后面提到的所有和硬件打交道的事情都是通过它来完成的,也就是说整个计算机的启动过程都是在它的控制下进行的。我们只是给它发出指令,告诉它我们想做什么。

    内存的地址也是很重要的一个概念,因为grub4dos中会有很多涉及到内存的使用(特别是高级用法)。我们的机器中所安装的这些内存,它们的每一个字节都被赋予了一个地址,比如32MB的地址范围用十六进制数表示就是0~1FFFFFFh。其中0~FFFFFh的低端1MB内存非常特殊,这1MB中的低端640KB被称为基本内存(也叫低端内存),是grub4dos的核心区域,绝对不能被乱用。

启动顺序的话就需要我们从按下计算机的电源开关开始说起了,开关被按下后,电源就开始向主板和其它设备供电,然后BIOS开始自检并检测一些关键设备(如键盘鼠标内存硬盘等),设备没问题后就会根据厂商或用户预先设定好的启动顺序从软盘、硬盘或光驱中定位将要首先引导的设备(关于如何进入BIOS设定这些信息请自行查找,BIOS厂商不同,设定方法也不同)。以本地硬盘启动为例,BIOS将读取检测到的第一块硬盘,并执行该硬盘上位于第一扇区的主引导记录(MBR),

mbr(主引导记录(Master Boot Record))
MBR,即主引导记录,在驱动器最前端的一段引导扇区。MBR描述了逻辑分区的信息,包含文件系统以及组织方式。此外,MBR还包含计算机在启动的第二阶段加载操作系统的可执行代码或连接每个分区的引导记录.这个MBR代码通常被称为引导程序。由于MBR分区表的最大可寻址的存储空间只有2Tb(232×512字节)。因此,在大硬盘出现的现在,MBR分区方式逐渐被GUID分区表取代。
MBR不可能存在于不可分区的媒介如软盘等中。为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;
MBR由三部分构成:
1.主引导程序代码,占446字节
2.硬盘分区表DPT,占64字节
3.主引导扇区结束标志55AA
而狭义的MBR仅指引导程序而言。硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和分区有效标志。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为0xAA55或0x55AA,这取决于处理器类型 ,如果是小端模式处理器(如Intel系列),则该值为0xAA55;如果是大端模式处理器(如Motorola6800),则该值为0x55AA。

主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录(PBR),而分区引导记录将负责读取并执行引导文件的启动,比如nt5x系统引导文件为ntldr,nt6x系统的引导文件为bootmgr,而我们grub4dos的引导文件就是grldr。成功找到并加载指定的引导文件启动后,BIOS的工作就算完成了,后续工作会交给引导文件来完成。只说grub4dos,如果引导文件grldr被成功执行的话,我们就将进入grub4dos环境,也是我们使用grub4dos的最大意义所在,无论通过什么方式,我们最终的目的都是成功进入grub4dos环境。

再插一句,关于如何进入grub4dos环境,主要看启动介质,也就是启动设备。硬盘启动的话就如上面所说,光盘启动的话则需要使用工具将grldr文件制作成iso镜像的引导文件,pxe启动的话和硬盘启动相差不多,但是需要搭建好相应的网络环境。其他设备启动的话也是依据该设备的要求,想办法让grldr作为引导文件就可以了,启动失败归失败,让启动设备能准确找到grldr引导文件是一定要成功的,否则,我这篇口水就算浪费了。

 严格意义上,能进入到 grub> 这样一个命令行状态下就算成功进入gurb4dos环境了,大家看到的加载背景图、加载菜单文件、加载多国语言支持等后面介绍的功能都是为了让自己更方便使用而使用的,没有这些东西,grub4dos依然很强大,依然可以手动输入命令启动各种工具集。所以有些情况下如果启动后只看到一个黑黑的窗口,一个光秃秃的 grub> 命令行,不要认为自己启动失败了,我们已经成功启动了grub4dos环境,只是还没达到想要的效果而已。

当然,为了美观和方便,我们还是推荐使用菜单的。菜单相当于一个很大的命令合集,可以自己手动编写,也可以使用现成的,发行版grub4dos压缩包里有提供样本。在grub4dos的世界里,菜单分成两种,一种是放置在grldr里面的菜单,称为预置菜单(或者内置菜单),一种是放在其他地方,如硬盘、光盘、U盘等任何可以放文件的地方。内置菜单会占据最高控制权,grldr引导成功进入grub4dos环境后,首先加载的就是内置菜单,加不加载外置菜单,加载哪个外置菜单,都由它说了算,写的好的内置菜单,可以铺平后面的一切道路。

至于外置菜单,外置菜单和内置菜单最大的区别就是内置菜单是放置在grldr文件内部,而外置菜单则是放在任意可以成功被grub4dos访问到的数据存储设备,可以说外置菜单就是一个普通的文本文件,只是按照grub4dos的要求写成的而已。使用外置菜单的优势就是可以建立任意数量以及各种特殊用途的外置菜单,且容易修改,相对只能放置在grldr内部的内置菜单相比无疑方便了很多。

刚刚提到了数据存储设备,对grub4dos而言,存储设备大体来说可以分为磁盘类设备和内存类设备两种。磁盘类设备有硬盘(hdd)、光盘(cd)、USB类(usb-hdd、usb-cdrom、ud等)、网络类(pxe)等常规的这几种;内存设备则是将整个内存或者其中一小块当作一个磁盘驱动器来读写。常规的这几种存储设备很好理解,优点也很明显,就是编辑方便,在Windows/Linux下想改就改,缺点相应的就是在grub4dos下只能读取,不能任意修改(FAT类分区除外,可以使用外部命令fat来进行文件读写操作);内存设备就需要用到我们的内存知识了,我们可以把想要启动的dos工具镜像、iso镜像、硬盘镜像等等加载到内存中再访问,由于内存的读写速度超高,等文件完全加载到内存后,我们再进行访问的话会发现加载速度极快,此外我们也可以通过grub4dos批处理脚本自动生成一些菜单文件写入到某块内存中,然后将这块内存当作菜单文件进行加载,比预先写好的外置菜单更灵活。总而言之,通过grub4dos可以将内存任意为我们所用,当然缺点就是仅在grub4dos环境下有效。具体设备的命令规则可以参见本文档第4部分 设备命名规则。还有刚刚提到的grub4dos批处理脚本问题,grub4dos支持批处理脚本,但仅支持使用grub4dos命令写成的脚本,请不要尝试在grub4dos下执行Windows脚本。

另外关于存储设备上文件的访问还有些事情需要说明。首先,是由于grub4dos的基础所决定的,grub4dos是用 / 来作为路径分隔符,Windows系统所使用的则是 \ ,也就是说,在Windows下显示的诸如 \Windows\System32\ 路径在grub4dos下会显示为 /Windows/System32/;其次由于grub4dos没有盘符的概念,假如Windows系统安装在第一块硬盘的第一个主分区,在Windows下的 C:\Windows\System32\ 在grub4dos下会显示为 (hd0,0)/Windows/System32/,再然后是所有操作系统都头疼的文件名或目录名含空格的问题,通常Windows下会用双引号 包裹住整个路径表示这是一个整体,比如(不含中括号)[ “\新建 文件夹\新建 文本文档.txt” ],而在grub4dos下由于会将空格理解为参数的分隔符(也有特殊情况,后面说),因此就需要使用转义符 \ 来转义其后面的空格,前面的例子在grub4dos下就需要写成(不含中括号)[ /新建\ 文件夹/新建\ 文本文档.txt ],也就是加上转义符 \ 以后, \ 后面的空格就失去了原有的意义,和前面的内容连在了一起,否则grub4dos会认为这是(不含中括号) [\新建] [文件夹\新建] [文本文档.txt] 三段,必然无法理解这是什么命令或者找到指定的文件,加上转义符 \ 以后,grub4dos就会把这三段理解成一个整体,明白将这个整体作为命令或者是文件的路径。

上段说到的特殊情况其实是在grub4dos批处理脚本中出现的,发生在使用 call 命令传递参数的时候。依然以Windows下的[ “\新建 文件夹\新建 文本文档.txt” ]为例,在不加转义符 \ 的前提下,如果使用类似[ call :label “\新建 文件夹\新建 文本文档.txt” ]这样的命令,在 :label 段命令执行的时候,会将[ \新建 文件夹\新建 文本文档.txt ]整体作为第一个参数,而不是根据空格来讲这段路径分成[\新建] [文件夹\新建] [文本文档.txt]三个参数。当然无论怎样,总是建议使用转义符 \ 来将路径中的空格转义,以避免grub4dos识别成多个参数。

后面再说的就是使用不同的命令组合来实现不同的功能了,也就需要大家发动大脑自己学习写命令实现自己的目的了。比如想启动工具镜像的话,就需要先定位(find)镜像的位置,再将镜像映射(map)为镜像所属类型,比如软盘镜像需要映射为软驱设备(fd类),iso镜像需要映射为光驱设备(常用0xff),不能反过来将软盘镜像映射为光驱设备,或者是iso镜像映射为软驱设备(高级用户请忽视这段话,高手没什么不可以)。这些准备工作全部完成后就需要告诉grub4dos一切准备就绪,可以启动(chainloader以及boot)了,很像硬盘编辑类软件(DiskGenius或者ADDS等),在你模拟操作完成后,需要点击确认按钮(boot)才会真正执行选定的操作,在此之前可以任意修改,不会真正得到执行。grub4dos常用的功能无外乎启动DOS镜像、启动ISO镜像、启动引导文件、启动指定设备等这几项。除此之外还有很多高级功能,比如通过iso镜像安装系统,比如制作内存系统,比如grub4dos版的资源管理器,比如通用启动器,甚至小说阅读器等等功能,这些功能只要对grub4dos足够熟悉,没有什么不可以实现。


本文资料摘录自《grub4dos初级教程 by lianjiang》、《GRUB4DOS帮助文档 By sratlf》、百度百科。感谢 chenall 、 不点 、zhaohj 、PlantSoot(百草霜)、zxw、zhhsh 等热心网友,为几位的辛苦付出表示衷心的感谢。

 


原文链接:https://03k.org/grub4dos-guide.html

本站博文无特别声明均为原创,转载请注明原文链接。本站软件均搜集自互联网,供学习研究之用,请下载后24小时内删除。

疑问OR交流点我加QQ群喵喵喵!


  1. 舞恸 Google Chrome 46.0.2490.86 Windows 7 x64 Edition

    受益匪浅,谢谢博主

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注