2024年1月15日发(作者:)

1 grub4dos初级教程

1.1 grub简单介绍

GRUB-遵从Multiboot(多重启动)启动管理程序。现在接触到的有3种,即GNU Grub

Lagecy , GNU Grub2 和 Grub for dos(grub4dos)。

GNU GRUB Lagecy其实就是原来的 GNU GRUB ,最新版是2005年发布的GNU GRUB

0.97。 目前已停止开发,并改名为 GNU GRUB Lagecy。

GNU GRUB2是第二代GRUB,它将取代原来的GNU GRUB(例如0.9x版),但目前还处于开发阶段,尚未发布正式版。

GNU GRUB Lagecy和GNU GRUB2都是 GNU 组织的项目。

GRUB for DOS(GRUB4DOS)是一个以 GNU GRUB 为基础的功能强大的引导器。它可以在 DOS

和 LINUX下运行,也可以通过其他引导器来运行,还可以作为MBR运行。GRUB4DOS内置了功能完善的 BIOS 级磁盘仿真。

下面以比较广泛使用的GRUB4DOS为基础进行说明。GNU GRUB与GRUB4DOS的不同之处,可参看相关说明文件。

1.2 如何获得grub4dos最新版

可从以下网址下载GRUB4DOS最新版及较早版本。

/grub4dos/

/grubutil/

/WikiHome

/projects/grub4dos/

/wiki (官方说明文档)

1.3 如何安装grub4dos

下载grub4dos后,解压缩后就可以了。核心文件有下面这几个:grldr和,及(此为样本,需修改)。如果你需要中文支持,就用chinese子目录中的文件。

安装方法常见的有下面3种。

1.3.1 通过Windows NT的启动菜单进入grub4dos

将grldr文件复制到c:,去掉的只读属性,然后修改c:文件,在的最后面加一行:

c:grldr="Start GRUB4DOS"

并将中的timeout值设置为大于0的数字,如:timeout=5,然后保存,改回只读属性。

编辑前,可在cmd下输入:

attrib -s -r -h c:

解除的只读属性,编辑完后输入:

attrib +s +r +h c:

恢复的原有属性。

这样,编辑完重新启动计算机,在NT的启动菜单就会出现“Start GRUB4DOS”这一项,选择该项即可进入grub4dos的环境。

此方法的优点是:不需要修改MBR。

初学者使用grub一般都需要grub菜单,把准备好的文件放到C:下(也可放到

其它分区根目录 或其它指定目录)。的编写方法可参考或者别人提供的。在下面的“1.4 如何使用grub4dos”中将作简单介绍。

1.3.2 通过DOS启动grub

将机器通过任何可能的方式(软盘,U盘,光盘等)启动到DOS环境(最好是纯DOS环境,即不加载任何驱动程序和TSR程序的DOS环境),然后在DOS下或者中运行,即可进入grub4dos。

也可在DOS/Windows9x的中使用下列任一方式启动grub。

DEVICE=

INSTALL=

SHELL=

此方法的优点是:不需要修改MBR;可根据需要在脚本或者其它DOS程序中启动GRUB4DOS。

菜单文件可保存在grub文件所在目录或其它指定路径。

1.3.3 通过mbr启动grub

通过软件包里的(可运行于DOS/Win9x)安装GRLDR引导记录到硬盘或者硬盘映像文件的主引导记录,或者安装到软盘或者软盘映像的引导扇区。电脑启动时,通过击热键(默认为空格键,可自定义)来启动grub。

比如:

在DOS下安装GRLDR代码到主引导记录:

0x80

在DOS下安装GRLDR代码到软盘:

--floppy --chs 0x00

在DOS下安装GRLDR代码到软盘映像:

--floppy --chs

我所使用的命令为:

bootlace --force-backup-mbr --boot-prevmbr-first --time-out=3 --hot-key=0x3920 --mbr-disable-floppy 0x80

表 示安装GRLDR代码到MBR时,备份原MBR(--force-backup-mbr),默认启动原MBR,即启动原windows xp系统(--boot-prevmbr-first),等待时间3秒(--time-out=3),热键为空格键(--hot- key=0x3920), 不搜索软盘上的GRLDR(--mbr-disable-floppy)。

也就是说启动时等待3秒,3秒内不击热键的话,启动windows xp;3秒内击热键则启动grub4dos。

bootlace的其它参数及自定义热键用法可参看文件。

装入mbr后,再将grldr和文件复制到某分区的根目录(现在支持的文件系统是

FAT12,FAT16, FAT32, NTFS,EXT2 or EXT3 的分区。对于Windows用户,最好是fat分区),也可保存到其它指定位置。

此方法的优点是:不依赖于操作系统;能够自动搜索硬盘上各个分区的grldr文件。

另外,2000/xp/2003/vista环境下可用另一软件grubinst来把GRLDR引导记录安装到硬盘

的MBR。grubinst具有图形界面和命令行两种工作模式供选用,并附有比较详细的使用说明,很易于使用。【参看附录 4.1 如何使用grubinst_gui】

1.3.4 通过Windows NT的启动菜单进入grub4dos NEW!

用批处理自动把grub4dos装入Vista启动项(非MBR)。

把grub4dos装入Vista启动项,比装入MBR相对来说要安全。

【对于vista系统,不能通过fdisk /mbr来恢复mbr,这样会造成vista无法启动。】

关于手动把grub4dos装入Vista的启动项的方法,网上有一些介绍。比起winxp修改来,操作要麻烦不少。

主要就是操作过程中要产生一个ID号【如:b88a2da4-0a4e-11dc-813a-00e04c75ef59】,需要手动输入3次,实在是麻烦。

下面的批处理自动完成整个装入操作。

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

@echo off

rem by lianjiang

cls

echo.

echo 请以管理员身份运行。

echo.

pause

set gname=Grub 4 dos

set vid=

set timeout=5

bcdedit /export "Bcd_Backup" >nul

bcdedit /create /d "%gname%" /application bootsector >

for,/f,"tokens=2",%%i,In () Do (

set vid=%%i

)

del >nul

bcdedit /set %vid% device boot >nul

bcdedit /set %vid% path >nul

bcdedit /displayorder %vid% /addlast >nul

bcdedit /timeout %timeout% >nul

if exist copy c: /y && goto exit

echo.

echo 稍后请自行把拷贝到C:根目录

echo.

pause

:exit

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

下载批处理附件to_

此方法的优点是:不需要修改MBR。

grub菜单文件的准备同“1.3.1 通过Windows NT的启动菜单进入grub4dos”。

1.4 如何使用grub4dos

对于多数没有或很少接触过linux的windows用户来说,刚开始使用grub时离不开菜单。也就是说,使用grub前,我们要准备文件。

下面是一个的例子。(以#开始的行,表示注释,不执行)

# 默认延迟时间(秒)

timeout 20

# 第一项为默认值

default 0

# 设置图形背景文件

splashimage (hd0,0)/boot/grub/

# 设置中文支持的字体文件

fontfile (hd0,0)/boot/grub/fonts

title 使用map启动本地硬盘上的瑞星杀毒软盘镜像文件

map (hd0,0)/boot/grub/ (fd0)

map --hook

chainloader (fd0)+1

rootnoverify (fd0)

title 使用memdisk启动本地 Win98 软盘镜像文件

kernel (hd0,0)/boot/grub/

initrd (hd0,0)/boot/grub/

title 使用memdisk启动本地硬盘上的瑞星杀毒软盘压缩镜像文件

root (hd0,0)

kernel /boot/grub/ c=80 h=12 s=36 floppy

initrd /boot/

title 启动第一主分区(hd0,0)上的操作系统

rootnoverify (hd0,0)

makeactive

chainloader +1

title 启动第二主分区(hd0,1)上的操作系统

rootnoverify (hd0,1)

makeactive

chainloader +1

title 重启

reboot

title 关机

halt

参考这个例子,我们就可以根据自己需要对菜单进行修改。

比如从网上下载了效率源的镜像文件,文件名为。我们只需把

title 使用memdisk启动本地 Win98 软盘镜像文件

kernel (hd0,0)/boot/grub/

initrd (hd0,0)/boot/grub/

改成

title 硬盘检测修复工具 效率源 (memdisk)

kernel (hd0,0)/boot/grub/

initrd (hd0,0)/boot/grub/

或者改成

title 硬盘检测修复工具 效率源 (map)

map (hd0,0)/boot/grub/ (fd0)

map --hook

chainloader (fd0)+1

rootnoverify (fd0)

同时把文件保存到第一主分区(一般是C:)的bootgrub目录下。

当然也可以保存到其它路径。

比如文件保存到C:boot下,则文件相应改为:

map (hd0,0)/boot/ (fd0)

又如文件保存到D:test下,则文件相应改为:

map (hd0,4)/test/ (fd0)

(参看下面的注意d)

从上面的例子可以看出,启动软盘镜象,有两种方式,即用memdisk或用map。

用memdisk时,img文件可压缩;在img文件大小为非1.44MB或2.88MB标准镜像时,需要指定CHS参数。img文件的CHS参数可用winimage获得。

即例子中的:

title 使用memdisk启动本地硬盘上的瑞星杀毒软盘压缩镜像文件

root (hd0,0)

kernel /boot/grub/ c=80 h=12 s=36 floppy

initrd /boot/

另外,菜单文件中的文件路径可用相对路径(如:/boot/)或绝对路径(如:(hd0,0)/boot/grub/)表示。

map方式对软盘映像大小没有限制,但要求必须连续存放。改进的map --mem则无此限制。

比如:

map --mem /boot/ (fd0)

map --hook

chainloader (fd0)+1

rootnoverify (fd0)

注意:

a, 菜单文件中所用的文件,不包括在grub4dos的发行包里,需自行准备。可从gnu grub软件包或从其它基于grub的工具(如一键ghost,本人的gghost)中获得。

b, 菜单中所用的其它文件如(背景文件)、fonts(中文字体文件)及各种镜像文件等,均需拷贝到文件中指定路径。 fontfile命令不可单独使用,需与splashimage一起使用。

c, 菜单文件中的命令全部使用小写。

d, 初学者使用绝对路径时要注意GRUB对设备的命名方法。系统的第一个硬盘驱动器表示成(hd0),其上的第一个分区表示为(hd0,0),也就是说对于硬盘,采用(hdx,y)的形式来表示,x、y都是从0开始计数的,x表示硬盘号,y表示分区号。

由于主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;逻辑分区则从(hd0,4)开始算,即第一逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依

次类推。

一般机子的硬盘都是一个主分区,其余是逻辑分区。因此C盘用(hd0,0),D盘用(hd0,4)来表示。 光盘用(cd)表示,第一软驱用(fd0)表示。

下面是我现在使用的菜单效果图及文件,供参考。

color white/green yellow/green

default 1

timeout 3

#fontfile /boot/grub/fonts

#splashimage /boot/grub/

#password --md5 $1$8$D0mfzTIQXv2Ma2b5bWH0b.

title 0, Boot from Hard Drive (hd0,0)

root (hd0,0)

chainloader +1

title 1, GreenGhost [Ghost v8.3/v11] (MAP-HOOK)

map --mem /boot/grub/ (fd0)

map --hook

chainloader (fd0)+1

rootnoverify (fd0)

title 2, GreenGhost [Ghost v8.3/v11] (MEMDISK)

kernel /boot/grub/ c=200 h=2 s=36 floppy

initrd /boot/grub/

title 3, GreenGhost [Ghost v8.3/v11] (MAP-HOOK) [disable a20]

map --mem /boot/grub/ (fd0)

map --hook

chainloader --disable-a20 (fd0)+1

rootnoverify (fd0)

title 4, Microsoft Windows NT/2K/XP

find --set-root /ntldr

chainloader /ntldr

title 5, Microsoft Windows Vista

find --set-root /bootmgr

chainloader /bootmgr

title 6, Boot from Hard Drive (hd0,1)

root (hd0,1)

chainloader +1

title 7, Reboot

reboot

title 8, Shutdown

halt

1.5 结言

Grub4dos具有强大的功能,上面介绍的只是grub4dos的一些最基本用法,更多的用法可在

掌握基本用法的基础上,自己查阅资料了解。

MBR是什么

MBR是英文Master Boot Record的缩写,中文意为主引导记录。硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre- boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。

FDISK /MBR的功能

FDISK /MBR是一个隐藏的命令,其功能是在硬盘上无条件地重新写入主引导程序和分区表,并且不对DOS引导扇区、文件分配表和目录区进行初始化。也就是说,执 行FDISK/MBR后,可在不破坏硬盘上原有数据信息的情况下,重建主引导程序和分区表。它对单纯感染嵌入式引导区病毒的硬盘,亦可起到清除病毒的作 用。不过,有些病毒正是利用FDISK /MBR的原理,修改计算机正常的引导和文件结构,如果再强行使用FDISK /MBR可能会使系统变得更糟,甚至也可能把硬盘中所有的数据清除。所以最好不要随便使用此命令。

Fdisk是我们在硬盘分区时最常用的命令,但有的读者可能还不知道,Fdisk命令还有一个未公开参数/MBR, 如果在DOS提示符下使用Fdisk /?不会发现此参数,但是这个参数却有很重要的作用,MBR是主引导记录(Master Boot Record)的缩写。那么,Fdisk /MBR是如何工作的呢?下面和各位读者共同学习一下。

先来看看主引导扇区,硬盘的零柱面零磁道的第一个扇区,被称为主引导扇区,(当然是512个字节喽),主引导扇区由主引导记录(MBR)、硬盘分区表 (DPT ,Disk Partition

Table)和结束标志三部分组成,各部分的大小和偏移量可参考下表,主引导记录中包含了硬盘的一系列参数和一段引导程序,引导程序主要是用来在系统硬件 自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去,所以这里往往是一些引导型病毒和一些多系统引导 程序的切入点。此部分还包括启动出错时的提示信息Invalid partition table、 Error loading operating system、Missing

operating system和一些保留信息。硬盘分区表的64个字节记录了分区的大小、类型,哪个是活动分区等等(具体结构请参考相关资料)。主引导扇区最后的两个标志 “55AA”是主引导扇区的结束标志,有些病毒就会修改这两个标志,结果系统引导时将报告找不到有效的分区表。主引导扇区的数据可以用一些工具或者自己写 一段汇编来查看。

使用Fdisk /MBR时,会把前446个字节(如果你在Linux下用dd

if=/boot/ of=/dev/hda bs=446 count=1命令恢复过MBR就知道为什么这个数字是446了)清零后重新“安装”引导程序,但并不会破坏硬盘分区表。安装一些安全保护软件或者新的操 作系统往往引导程序会被更改,一部分引导扇区病毒也可能占领这块地盘,达到获得系统的控制权的目的。在上述情况下,如果由于操作不慎或其它原因,系统无法

正常启动时可以使用没被病毒感染的启动盘启动系统,然后使用Fdisk /MBR,各位注意,使用时一定要对症下药,下面讲述一下我经历的几个例子:

1.我的一个同学曾经用过一个叫超级保镖的软件,有开机密码的功能,可是密码被他忘记了(做茧自缚),他从软盘启动,并且把软件删除了,可是在开机的时候 还是要求他输入密码。根据他说的,提示输入密码的时机是硬件自检完成以后,Windows刚启动的时候,我推测是主引导扇区被修改了,建议他用 Windows 98的启动盘重新启动后使用此命令,结果把开机密码去掉了。

2.同事的电脑被引导区病毒感染,金山毒霸检测到以后,他用金山毒霸做的启动盘启动杀毒,可是重新启动以后还是检测到有此病毒,我不知道他做的软盘本身是 否“干

净”,我拿买品牌机时附送的Windows 98启动盘,让他重新启动后,用Fdisk /MBR,再次重新启动计算机,发现病毒已经被清除。

3.为了体验Windows 2000,本人把公司的另一个小硬盘跳线变成Slave后连到我的电脑的IDE1上,把Windows 2000安装到小硬盘里,可以进行Windows 98和Windows 2000双启动,后来硬盘被拿走,再次启动系统时,发现启动不起来了,我拿Windows 98的启动盘启动后,使用Fdisk /MBR命令,还是不行,呵呵,拿出我的最后一招,SYS C:,再次启动,成功!

4.随着Linux的流行,很多朋友都想在一个电脑上实现双启动(甚至多启动),安装Linux,可能会把Lilo安装在主引导扇区,如果想卸载 Linux,而且用Linux的分区命令把Linux的分区删除;以后如果想恢复到原来的系统,用此命令把lilo清除即可,一般不会丢失原来系统上的数 据。

最后必须提醒大家的是,Fdisk一般不会影响硬盘的分区结构和数据,但有些病毒正是利用Fdisk /MBR的原理,修改计算机正常的引导和文件结构,如果你再强行使用Fdisk

/MBR可能使系统变得更糟,甚至也可能把硬盘中所有的数据清除。所以最好不要随便使用此命令,只在受病毒或一些磁盘管理工具的影响使系统无法正常启动时 才使用此命令,如果你想试验一下呢,你应该先备份好你的所有数据,并且用Debug命令保存你的主引导记录。想一想,微软为何不公开此命令参数呢?因为它 是一个危险的命令!

详细吧,哈哈.