grub4dos初级教程_ by lianjiang

This page uses frames, but your browser doesn't support them.


grub4dos初级教程－入门篇、应用篇

 目录
1 grub4dos初级教程－入门篇
 1.1 grub简介
1.2 如何获得grub4dos最新版
1.3 如何安装grub4dos
1.3.1 通过Windows NT的启动菜单进入grub4dos
1.3.2 通过DOS启动grub
1.3.3 通过mbr启动grub
1.3.4 通过Windows VISTA/Window 7的启动菜单进入grub4dos
1.4 如何使用grub4dos
1.5 结言

2 grub4dos初级教程－应用篇
 2.1 硬盘上的应用
2.1.1 加载软盘镜像
2.1.2 启动WinPE
2.1.3 启动系统
2.1.4 引导光盘镜像（ISO仿真）
2.2 光盘上的应用
2.2.1 grub引导的可启动光盘
2.2.2 BCDW引导GRUB的可启动光盘
2.3 软盘上的应用
2.3.1 通过DOS启动grub的软盘应用
2.3.2 引导扇区安装了GRLDR引导记录的软盘应用
2.4 优盘上的应用
2.5 结言

3 grub4dos初级教程－进阶篇
 3.1 设置密码
3.2 菜单内置
3.3a 使用个性化grub4dos文件名 (grubinst)
3.3b 用批处理自动给grldr改名 (适用于最新版grldr）NEW!
3.4 安装Windows XPE到逻辑分区
3.5 利用savedefault命令传递参数的方法与应用
3.6 利用dd命令传递参数的方法与应用 NEW!

4 附录

Grub legacy
 4.01 Grub 命令索引
4.02 Grub 简体中文化版使用方法
 4.03 GRUB安装配置使用汇总
4.04 Grub命令使用详解
4.05 GRUB三步通
4.06 Grub相关安装配置及使用实例汇总讲析

Grub2资料
 4.07 GRUB2使用简介 by bean NEW!
4.08 GRUB2高级教程 by bean NEW!

Grub4dos资料
 4.09 gfxmenu定制高级教程（新增可定制菜单） by bean NEW!
4.10 如何使用grubinst_gui by bean

Grub4dos官方文档
4.11 Grub4dos_tutorial (英文)
4.12 Grub4dos简介
4.13 Grub4dos安装和启动
4.14 Grub4dos新手指南
4.15 Grub4dos高级功能
4.16 Grub4dos命令索引
4.17 Grubinst使用介绍
4.18 Grub4dos readme (英文)
4.19 Grub4dos readme (中文)
首页 正文


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.1 grub简介
1.2 如何获得grub4dos最新版
1.3 如何安装grub4dos
1.3.1 通过Windows NT的启动菜单进入grub4dos
1.3.2 通过DOS启动grub
1.3.3 通过mbr启动grub
1.3.4 通过Windows VISTA的启动菜单进入grub4dos
1.4 如何使用grub4dos
1.5 结言

1.1 grub简介

 GRUB 是一个遵从Multiboot（多重启动）规范的启动管理程序。现在接触到的有3种，即GNU Grub Legacy , GNU Grub2 和 Grub for dos（grub4dos）。

GNU GRUB Legacy其实就是原来的 GNU GRUB 0.xx ，最新版是2005年发布的GNU GRUB 0.97。 目前已停止开发，并改名为 GNU GRUB Legacy。

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

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

GRUB for DOS（GRUB4DOS）是一个以 GNU GRUB 为基础的功能强大的引导器。它可以在 DOS 和 LINUX下运行，也可以通过其他引导器来运行，还可以作为MBR运行。GRUB4DOS内置了功能完善的 BIOS 级磁盘仿真。

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

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.2 如何获得grub4dos最新版

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

http://download.gna.org/grub4dos/
http://grub4dos.sourceforge.net/
http://sarovar.org/projects/grub4dos/
http://grub4dos.nufans.net/
http://grub4dos.jot.com/
http://download.gna.org/grubutil/

http://grub4dos.sourceforge.net/wiki （官方说明文档）
http://bbs.znpc.net/forumdisplay.php?fid=4 （官方论坛）

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.3 如何安装grub4dos？

 下载grub4dos后，解压缩后就可以了。核心文件有下面这几个：grldr(VISTA系统，还需grldr.mbr)和grub.exe，及menu.lst（此为样本，需修改）。如果你需要中文支持，就用chinese子目录中的文件。

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

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

将grldr文件复制到c:\，去掉boot.ini的只读属性，然后修改c:\boot.ini文件，在boot.ini的最后面加一行：
c:\grldr="Start GRUB4DOS"
并将boot.ini中的timeout值设置为大于0的数字，如:timeout=5，然后保存boot.ini，改回只读属性。
编辑boot.ini前，可在cmd下输入：
attrib -s -r -h c:\boot.ini
解除boot.ini的只读属性，编辑完后输入：
attrib +s +r +h c:\boot.ini
恢复boot.ini的原有属性。

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

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

 初学者使用grub一般都需要grub菜单，把准备好的menu.lst文件放到C:\下（也可放到其它分区根目录或其它指定目录）。menu.lst的编写方法可参考readme.txt或者别人提供的menu.lst。在下面的“1.4 如何使用grub4dos”中将作简单介绍。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.3.2 通过DOS启动grub

 将机器通过任何可能的方式（软盘，U盘，光盘等）启动到DOS环境（最好是纯DOS环境，即不加载任何驱动程序和TSR程序的DOS环境），然后在DOS下或者AUTOEXEC.BAT中运行grub.exe，即可进入grub4dos。
也可在DOS/Windows9x的CONFIG.SYS中使用下列任一方式启动grub。
DEVICE=GRUB.EXE
INSTALL=GRUB.EXE
SHELL=GRUB.EXE

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

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

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.3.3 通过mbr启动grub

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

比如：
在DOS下安装GRLDR代码到主引导记录：
bootlace.com 0x80

在DOS下安装GRLDR代码到软盘：
bootlace.com --floppy --chs 0x00

在DOS下安装GRLDR代码到软盘映像：
bootlace.com --floppy --chs floppy.img

我所使用的命令为：
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的其它参数及自定义热键用法可参看readme.txt文件。

装入mbr后，再将grldr和menu.lst文件复制到某分区的根目录(现在支持的文件系统是FAT12,FAT16, FAT32, NTFS,EXT2 or EXT3 的分区。对于Windows用户，最好是fat分区)，menu.lst也可保存到其它指定位置。

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

另外，2000/xp/2003/vista环境下可用另一软件grubinst来把GRLDR引导记录安装到硬盘的MBR。grubinst具有图形界面和命令行两种工作模式供选用，并附有比较详细的使用说明，很易于使用。【参看附录 4.1 如何使用grubinst_gui】

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.3 如何安装grub4dos？

 1.3.4 通过Windows VISTA/Window 7的启动菜单进入grub4dos

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

把grub4dos装入Vista启动项，比装入MBR相对来说要安全。
【对于vista系统，不能通过fdisk /mbr来恢复mbr，这样会造成vista无法启动。】

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

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

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

说明：
1，批处理与grldr.mbr在同一目录时，自动复制grldr.mbr文件到系统根目录，否则需自行复制。
2，启动项里添加上grub4dos项后，需把准备好的menu.lst和grldr文件复制到C:\下（也可放到其它分区根目录）。

-------------------------------
安装批处理

 @echo off
rem by lianjiang
cls
echo.
echo 请以管理员身份运行。
echo.
pause
set gname=GRUB for DOS
set vid=
set timeout=5
bcdedit >bcdtemp.txt
type bcdtemp.txt | find "\grldr.mbr" >nul && echo. && echo BCD启动项中已有grub4dos的项目，无需再安装。&& pause && goto exit
bcdedit /export "Bcd_Backup" >nul
bcdedit /create /d "%gname%" /application bootsector >vid.ini
for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do (
set vida=%%i
)
for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do (
set vid={%%i}
)
echo %vid%>vid.ini
bcdedit /set %vid% device partition=%systemdrive% >nul
bcdedit /set %vid% path \grldr.mbr >nul
bcdedit /displayorder %vid% /addlast >nul
bcdedit /timeout %timeout% >nul
if exist grldr.mbr copy grldr.mbr %systemdrive%\ /y && goto exit
echo.
echo 稍后请自行把grldr.mbr拷贝到%systemdrive%\根目录
echo.
pause
:exit
del bcdtemp.txt >nul

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

卸载批处理

 @echo off
rem by lianjiang
cls
echo.
echo 要求存在用安装批处理安装时自动保存的临时文件。
echo.
echo 请以管理员身份运行。
echo.
pause
set vid=
set timeout=5
if exist Bcd_Backup bcdedit /import "Bcd_Backup" >nul&& goto 1

if not exist vid.ini (
echo.
echo 因相关文件被删，不能自动删除启动项项目，只能手动删除。
echo.
pause
goto exit
)

for,/f,"tokens=1",%%i,In (vid.ini) Do (
set vid=%%i
)
bcdedit /delete %vid% /cleanup >nul
bcdedit /timeout %timeout% >nul
:1
del vid.ini >nul
if exist %systemdrive%\grldr.mbr (
attrib -h -s -r %systemdrive%\grldr.mbr >nul
del %systemdrive%\grldr.mbr >nul
)

:exit
 -------------------------------

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

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

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.4 如何使用grub4dos

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

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

# 默认延迟时间(秒)
timeout 30

# 第一项为默认值
default 0

# 设置图形背景文件
splashimage (hd0,0)/boot/grub/xp2008.gz

# 设置中文支持的字体文件
fontfile (hd0,0)/boot/grub/fonts

title 使用map启动本地硬盘上的瑞星杀毒软盘镜像文件
map (hd0,0)/boot/grub/rav.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title 使用memdisk启动本地 Win98 软盘镜像文件
kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/win98.img

title 使用memdisk启动本地硬盘上的瑞星杀毒软盘压缩镜像文件
root (hd0,0)
kernel /boot/grub/memdisk.gz c=80 h=12 s=36 floppy
initrd /boot/rav.zip

title 启动第一主分区(hd0,0)上的操作系统
rootnoverify (hd0,0)
makeactive
chainloader +1

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

title 重启
reboot

title 关机
halt

此菜单文件的运行效果如下图。【图2】

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

比如从网上下载了效率源的镜像文件，文件名为XLY.IMG。我们只需把
title 使用memdisk启动本地 Win98 软盘镜像文件
kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/win98.img

 改成
title 硬盘检测修复工具 效率源 (memdisk)
kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/xly.img

 或者改成
title 硬盘检测修复工具 效率源 (map)
map (hd0,0)/boot/grub/xly.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 同时把xly.img文件保存到第一主分区（一般是C:）的boot\grub目录下。
当然也可以保存到其它路径。

比如xly.img文件保存到C:\boot下，则menu.lst文件相应改为:
map (hd0,0)/boot/xly.img (fd0)

又如xly.img文件保存到D:\test下，则menu.lst文件相应改为:
map (hd0,4)/test/xly.img (fd0)
(参看下面的几点提示d)

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

用memdisk时，img文件可压缩；在img文件大小为非1.44MB或2.88MB标准镜像时，需要指定CHS参数。img文件的CHS参数可用winimage获得。
【提示：参数H, S是关键参数，必须准确无误；参数C设定错了，也不影响引导。】

注：图引用自“Grub 简体中文化版使用方法”

即例子中的：
title 使用memdisk启动本地硬盘上的瑞星杀毒软盘压缩镜像文件
root (hd0,0)
kernel /boot/grub/memdisk.gz c=80 h=12 s=36 floppy
initrd /boot/rav.zip

 另外，菜单文件中的文件路径可用相对路径（如：/boot/rav.zip）或绝对路径（如：(hd0,0)/boot/grub/xly.img）表示。

map方式对软盘映像大小没有限制，但要求必须连续存放。
map --mem则无此限制，但要求有足够的内存（使用超大映像文件时要注意这点）。
此映像将被拷贝到一个内存区域，映像本身可以是非连续的，甚至可以是被压缩的。

比如：
map --mem /boot/xxx.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 官方文档“Grub4dos高级功能”中对map和memdisk的区别进行了说明：
  • map是GRUB4DOS内置的功能，而memdisk是一个外部的程序
  • map可以直接映射磁盘上的文件，而memdisk必须要把文件装载到内存里。
  • map可以把影像文件映射为第二只硬盘，而而memdisk只能映射为第一只硬盘。
  • map有自动生成MBR的功能，而memdisk没有。因此memdisk只能使用磁盘影像，不能使用文件系统影像。
几点提示：
 a, 菜单文件中所用的memdisk.gz文件，不包括在grub4dos的发行包里，需自行准备。可从SysLinux软件包或从其它基于grub的工具（如本人的GGhost一键恢复）中获得。

b, 菜单中所用的其它文件如xp2008.gz（背景文件）、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)表示。

如我的硬盘有两个主分区，其余为逻辑分区。用(hdx,y)的方法表示如下图：

下面是我的“GGhost一键恢复”中使用的菜单效果图及menu.lst文件，供参考。【图3】

color white/green yellow/green
timeout 3
find --set-root /ggho/grub/gghost.img
password --md5 $1$5$jsGtVo0c88ndMdo6JZfrJ0
default /ggho/grub/default

title 0. GGhost 2008 [Ghost v11] (map-mem)
find --set-root /ggho/grub/gghost.img
map --mem /ggho/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
savedefault

title 1. GGhost 2008 [Ghost v11] (memdisk)
find --set-root /ggho/grub/gghost.img
kernel /ggho/grub/memdisk.gz c=280 h=2 s=36 floppy
initrd /ggho/grub/gghost.img c=280 h=2 s=36 floppy
savedefault

title 2. Boot /ggho/grub/mytools.img
find --set-root /ggho/grub/mytools.img
map --mem /ggho/grub/mytools.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title 3. Boot /ggho/grub/myiso.iso
find --set-root /ggho/grub/myiso.iso
map --mem /ggho/grub/myiso.iso (0xff)
map --hook
chainloader (0xff)

title 4. Micro Windows XPE
find --set-root --ignore-floppies /setupldr.bin
map --in-situ +1 (hd0)
chainloader /setupldr.bin

title 5. Boot NT/2000/XP/2003
find --set-root /ntldr
chainloader /ntldr

title 6. Boot Vista
find --set-root /bootmgr
chainloader /bootmgr

title 7. Boot from Hard Drive (hd0,0)
root (hd0,0)
chainloader +1

title 8. Boot from First CDROM
cdrom --init
map --hook
chainloader (cd0)
boot

title 9. Reboot
reboot

title 10. Shutdown
halt


grub4dos初级教程－入门篇、应用篇

 1 grub4dos初级教程－入门篇

1.5 结言

 Grub4dos的功能十分强大，上面介绍的只是grub4dos的一些最基本用法，更多的用法可在掌握基本用法的基础上，自己查阅资料了解。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.1 硬盘上的应用
2.1.1 加载软盘镜像
2.1.2 启动WinPE
2.1.3 启动系统
2.1.4 引导光盘镜像（ISO仿真）
2.2 光盘上的应用
2.2.1 grub引导的可启动光盘
2.2.2 BCDW引导GRUB的可启动光盘
2.3 软盘上的应用
2.3.1 通过DOS启动grub的软盘应用
2.3.2 引导扇区安装了GRLDR引导记录的软盘应用
2.4 优盘上的应用
2.5 结言

2.1 硬盘上应用

 硬盘上应用grub，首先要进行安装，安装/启动方式主要有3种，即通过Windows的启动菜单启动grub；通过DOS启动grub；通过mbr启动grub。【参看1.3 如何安装grub4dos】

安装完grub后，需要准备菜单文件menu.lst。

2.1.1 加载软盘镜像

 对于Windows用户，用grub加载软盘镜象是最常用的功能之一。由于windows2k/xp已脱离了dos，因此进行包括系统备份/恢复在内的一些dos下操作，成为初学者的一个难题。以前我们可能就需要用启动光盘等才能进入dos，光盘的特性决定了很难及时方便地更新光盘上的工具。grub的出现与应用，解决了这个难题。我们不仅无需借助其它的介质就能进入dos环境，而且能及时更新工具。网上下载的各种系统维护工具，很多都是img形式，无需把文件提取出来，稍微修改menu.lst就能使用，各种工具也能和谐共处，使用非常方便。

如何把下载的xxx.img加入grub启动菜单呢？
你只要把xxx.img保存到C:\boot\grub目录下，编辑menu.lst，加入下面内容就行了。

title Boot from Floppy image XXX
map --mem /boot/grub/xxx.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 注意：
a, 这几行内容不能加在最前面，因为前面是一些对全局有效的设置。
b, 你需要的工具都可以这种方式加进去。
c, 也许你有很多工具，都加进menu的话，显得很乱。平时常用的可能也就一两个工具，不少只是偶尔一用。对于这种情况，可以采取下面的方法。即：把常用的写入菜单，同时在菜单中写一个通用启动img文件的内容。

比如上面的:

title Boot from Floppy image XXX
map --mem /boot/grub/xxx.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 可以在启动grub进入菜单后，选择“Boot from Floppy image XXX”后，按“e”进入编辑状态，移动方向键，修改xxx.img为需要启动的文件名，回车，按“b”启动即可。（img文件保存在其它路径的话，则改成相应的路径。）

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.1 硬盘上应用

 2.1.2 启动WinPE

 有些系统维护操作在dos下操作不太方便，甚至不能进行。WinPE的出现，给我们带来了很多方便。

下面以广受好评的“老九 WinPE 老毛桃修改版_1111 版”为例，介绍如何用grub启动WinPE。 （ISO中已带有安装程序，我这里介绍的是在menu.lst中加入通用的winpe选项。）

步骤：

1， 下载“老九 WinPE 老毛桃修改版_1111 版”，解压后得到BootCD.ISO。

2, 用虚拟光驱或UltraISO等提取iso中的WINPE.IS_，WINNT.XPE和WXPE\SETUPLDR.BIN，把这3个文件拷贝到C:\，并把SETUPLDR.BIN改名为ldrxpe。需要外置程序的，还需把XPEMENU.INI和“外置程序”目录一起拷贝到任一盘符的根目录。【图4】【图5】

3，在menu.lst中加入

title Micro Windows XPE (by LaoMaotao)
chainloader /ldrxpe

 启动grub时选择“Micro Windows XPE (by LaoMaotao)”就能启动WinPE了。这样就能在windows界面下进行系统维护、安装等操作。【图6】【图7】【图8】

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.1 硬盘上应用

 2.1.3 启动系统

 对于单一硬盘装了多系统及多硬盘装了多系统的，用grub可以方便地对各系统进行启动管理。

比如在menu.lst中可加入下面的选项：

title 启动第一硬盘第一主分区(hd0,0)上的操作系统
rootnoverify (hd0,0)
makeactive
chainloader +1

title 启动第一硬盘第二主分区(hd0,1)上的操作系统
rootnoverify (hd0,1)
makeactive
chainloader +1

title 启动Windows NT/2000/XP/2003
find --set-root /ntldr
chainloader /ntldr

title 启动Microsoft Windows Vista
find --set-root /bootmgr
chainloader /bootmgr

title 启动DOS/Windows 95/98/Me
find --set-root /io.sys
chainloader /io.sys
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.1 硬盘上应用

 2.1.4 引导光盘镜像（ISO仿真）

 现在的grub4dos对iso文件进行仿真的功能已经相当完善，进一步方便了系统维护工作的进行。

支持no-emulation可启动模式及floppy or hard disk emulation可启动模式的ISO文件。

用法示例：

title Boot myiso.iso
map (hd0,0)/myiso.iso (hd32)
map --hook
chainloader (hd32)
boot

 当iso文件不连续存放，并且有足够内存时，可用 --mem选项：

title Boot myiso.iso
map --mem (hd0,0)/myiso.iso (hd32)
map --hook
chainloader (hd32)
boot

 fujianabc提示：普通的linux/windows安装光盘是不能这样模拟启动的，因为这个映射是基于实模式的，启动后会找不到光盘的(比如windows安装会出现0x7b的蓝屏），只有dos/win9x光盘以及基于ramdisk的pe光盘支持这样的仿真。

需要注意的是，多数的WinPE的iso用grub4dos仿真启动进入WinPE后，会找不到外置程序，这不是grub4dos的问题，而是ISO制作的问题，无忧启动论坛已有人制作出ISO仿真启动后WinPE下可正常使用外置程序的WinPE。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.2 光盘上的应用

 下面介绍两种在光盘上应用grub的方法。

2.2.1 grub引导的可启动光盘

 以grldr作为光盘的启动文件引导光盘，加载menu.lst，通过menu菜单选择启动项目。

步骤：

1) 准备必要的img文件，及grldr，menu.lst（根据需要准备字体，背景图片，memdisk.gz等文件）。

2) 编辑menu.lst。引导光盘上的img文件的格式如下：

title GGhost [Ghost v8.3/v11] (MAP-HOOK)
map --mem (cd)/boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 菜单中也可引导硬盘上的img文件，比如：

title GGhost [Ghost v8.3/v11] (MEMDISK)
kernel (hd0,4)/boot/grub/memdisk.gz c=200 h=2 s=36 floppy
initrd (hd0,4)/boot/grub/gghost.img

3) 组织文件。比如在E:\3333下建个grubcd目录，把menu.lst拷贝到此目录下，menu.lst文件将在光盘根目录下。在grubcd目录下建boot\grub目录，保存各种img，字体等文件（也可以保存到其它路径，与menu.lst中的指定的路径要一致）。注意：menu.lst文件中引用的所有文件的文件名在硬盘上显示的需是小写，大写的要改成小写。【图9】

4) 制作ISO。用UltraISO新建一个ISO文件，把E:\3333\grubcd目录下的所有文件加入iso文件；执行“启动光盘”－“加载引导文件”，选择grldr（需把grldr改名为grldr.bin或grldr.bif等）文件。再执行“文件”－“属性”，选上“允许小写字母”选项，保存ISO文件。【图10】【图11】【图12】

也可使用mkisofs.exe或CDIMAGE.EXE等工具制作启动iso（grldr不需改名）。

比如我用CDIMAGE制作iso的批处理是：
cdimage -lgrubcd -t01/01/2007,00:00:00 -h -n -o -d -m -bgrldr grubcd grubcd.iso

 【以下方法为官方用法，推荐使用】

在GRUB4DOS中，可以利用 grldr 来制作启动光盘。制作方法有两种：

mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o grubcd.iso grubcd
mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grubcd.iso grubcd

grldr和menu.lst应该放在光盘的根目录里。

第一种方法告诉 BIOS，希望它能够装入整个 GRLDR 文件到内存。装入内存后，BIOS 还应该正确设置堆栈，使得不至于把堆栈设置到 GRLDR 的程序体内，造成冲突。一般情况下，BIOS 做到这一点很容易，因为它可以设置堆栈指针为装入的起始地址。但也不排除存在 BUGGY BIOS 的可能性。

有些 BIOS 不完全符合可启动的 CDROM 规范，比如 VirtualPC 的就是的。这类 BIOS 只是装入了一部分 GRLDR 扇区到内存，典型的可能只装入了一个扇区（2048 字节的大扇区）到内存。不过我们的代码已经替这些 BUGGY BIOS 打了补丁。只要这些 BIOS 能够设置正确的堆栈，不至于和装入内存中的 GRLDR 扇区数据产生冲突就 OK 了。

也就是说，上述第一种制作光盘的方法，应该没有多大问题了。这种方法很有可能适应于所有的 BIOS。

第二种方法本身就只要求 BIOS 装入一个 CDROM 扇区到内存（等同于 4 个 512 字节的小扇区）。这种方法是最保守的，没有理由会失败了。微软的 win2000 启动光盘就是这么做的，isolinux 和 stage2_eltorito 也都是这么做的。如果这种方法失败了，那么 win2000，isolinux 和 stage2_eltorito 应该都会失败的。

对于第二种方法，我们不需要 -boot-info-table 这个参数。但是允许你用这个参数（用了和没用是一样的，我们的引导代码将忽略由这个参数所传递的数据结构）。

对于第一种方法也一样，不需要 -boot-info-table 这个参数，同时也是允许你用这个参数（用了和没用是一样的，我们的引导代码将忽略由这个参数所传递的数据结构）。

5) 用nero等把制作的可启动ISO刻盘。有条件的可先在虚拟机上测试通过后刻盘，或用CD-RW/DVD+RW刻盘。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.2 光盘上的应用

 2.2.2 BCDW引导GRUB的可启动光盘

 此法是用BCDW制作启动光盘，通过BCDW执行grldr来加载menu.lst菜单。

步骤：

1) 首先下载BCDW软件包，解压后获取所需文件。

2）组织文件。比如在E:\3333下建个bcdwcd目录，此目录下文件将在光盘根目录下，下面建boot\grub目录和bcdw目录，把软件包中bcdw目录下的bcdw.bin，bcdw.ini和loader.bin拷贝到所建的bcdwcd\bcdw目录下；把grldr、各种img、字体等文件拷贝到bcdwcd\boot\grub目录。menu.lst文件的编辑方法与上面2.1中介绍的相同。

3) 编辑bcdw.ini文件。打开bcdw.ini，找到[MenuItems]部分，比如：

[MenuItems] |
C:\ | ; Boot from drive C:
\I386\setupldr.bin | ; Microsoft Windows XP Setup

上面的就是BCDW启动菜单的例子。在其中加上grub等项，变成：

[MenuItems] |
\images\gghost.img | ; GGhost v6.0 (Ghost8.3/11)
\images\mynet.img | ; My net (Ghost8.3)(tcp/ip,cd/usb)
\boot\grub\grldr | ; Grub4dos
\WXPE\SETUPLDR.BIN | ; Micro Windows XPE (by LaoMaotao)
C:\ | ; Boot from drive C:
\I386\setupldr.bin | ; Microsoft Windows XP Setup

4）制作ISO文件与刻录ISO的方法与2.1中的基本相同。所不同的只是在制作ISO文件时，要把loader.bin（或bcdw.bin）作为ISO的引导文件。【图13】

也可使用mkisofs.exe或CDIMAGE.EXE等工具制作启动iso。

比如我用CDIMAGE制作iso的批处理是：
cdimage -lbcdwcd -t01/01/2007,00:00:00 -h -n -d -o -m -bload.bin bcdwcd bcdwcd.iso

 运行后bcdw界面与grub界面的效果如下图。【图14】【图15】


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.3 软盘上的应用

 在软盘上应用grub，主要有两种方式，即通过DOS启动grub和把GRLDR引导记录安装到软盘的引导扇区。【参看1.3 如何安装grub4dos】

2.3.1 通过DOS启动grub的软盘应用

 先把软盘制作成启动盘，最简单的一种，软盘中只需io.sys，msdos.sys和command.com三个文件。
再把grub.exe和menu.lst拷贝到软盘根目录。
新建一个autoexec.bat文件，里面只需写上4个字母。
grub

 然后编辑menu.lst，由于软盘容量所限，一般很难直接在menu中调用软盘上的img文件，因此，主要可用来启动硬盘上的img文件，还可用于对各系统进行启动管理。菜单文件中使用的指定路径的文件（如字体，img文件等），应预先准备好，否则该选项不能运行。（网上也有在软盘有限的容量里，包括众多维护工具的实例，感兴趣的可自行搜索。）

menu.lst文件的例子：

timeout 10

default 0

splashimage (fd0)/boot/grub/xp2008.gz

fontfile (fd0)/boot/grub/fonts

title GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
map --mem (hd0,4)/boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title 寻找硬盘上的/menu.lst
find --set-root /menu.lst
configfile /menu.lst

title 启动第一硬盘第一主分区(hd0,0)上的操作系统
rootnoverify (hd0,0)
makeactive
chainloader +1

title 启动第一硬盘第二主分区(hd0,1)上的操作系统
rootnoverify (hd0,1)
makeactive
chainloader +1

title 重启
reboot

title 关机
halt

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.3 软盘上的应用

 2.3.2 引导扇区安装了GRLDR引导记录的软盘应用

 GRLDR引导记录安装后，在软盘上只需保留有grldr和menu.lst及menu.lst中引用到的文件。menu.lst文件与“2.3.1 通过DOS启动grub的软盘应用”的软盘中使用的是一样的。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.4 优盘上的应用

 在优盘上应用grub，与软盘类似，主要有两种方式，即通过DOS启动grub和把GRLDR引导记录安装到优盘的引导扇区。【参看1.3 如何安装grub4dos】

首先把U盘用优盘自带工具或usboot，flashboot等制作成dos启动盘，同时设置电脑的cmos里相应的选项，看优盘能否启动进入dos，能的话，可继续往下阅读；不能启动的话，可尝试不同模式、用其它制作工具等，能启动后再往下阅读。

不同的启动模式，U盘启动进入dos后，在你的电脑上可能是A盘，也可能C盘。
由于u盘容量大，在u盘上就可以存放各种工具及WinPE。

当显示为A盘时，使用方法类似于软盘。

menu.lst文件中启动img镜像文件的用法如：

title GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
map --mem (fd0)/boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 当显示为C盘时，使用方法类似于硬盘。

menu.lst文件中启动img镜像文件的用法如：

title GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
map --mem (hd0,0)/boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 在上面的例子里，menu.lst中引用文件使用的是绝对路径，即(fd0)/boot/grub/gghost.img和(hd0,0)/boot/grub/gghost.img，这种用法对于特定的机子是没有问题的。但在同一U盘，要使用到不同机子时，可能带来一个问题。也就是可能不同的机子，要用不同的menu.lst文件，否则不能正常启动工具。那么，能否用什么办法，不用这么麻烦呢？答案是肯定的，那就是使用"find --set-root"和相对路径来实现。这样就不必为U盘被识别为fd还是hd烦恼了。

比如，你可以在u盘根目录建一个特征文件，如myudisk.txt

这样在启动u盘上的img镜像文件就可用下面的方法来实现：

title GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
 find --set-root /myudisk.txt
 map --mem /boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 启动u盘上的WinPE就可用：

title Micro Windows XPE (by LaoMaotao)
find --set-root /myudisk.txt
 chainloader /ldrxpe

 参考其它示例，通过编辑你的menu.lst，你就能够充分发挥U盘的效能。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 2 grub4dos初级教程－应用篇

 2.5 结言

 本文写的仅仅是grub4dos的一些最基本应用，Grub4dos更多的功能有待你去尝试和挖掘。
希望这篇文章能有助于你更快地把grub4dos使用起来。
更期待能分享你的成果。

推荐论坛：

时空论坛： | http://bbs.znpc.net
中国DOS联盟论坛: | http://www.cn-dos.net/forum/
无忧启动论坛： | http://bbs.wuyou.com

【注： 我的网盘：http://lianjiang2007.ys168.com http://lianjiang2004.ys168.com 也提供部分grub相关文件及资料的下载。】


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶篇

 3.1 设置密码
3.2 菜单内置
3.3a 使用个性化grub4dos文件名 (grubinst)
3.3b 用批处理自动给grldr改名 (适用于最新版grldr）
3.4 安装WinPE到逻辑分区
3.5 利用savedefault命令传递参数的方法与应用
3.6 利用dd命令传递参数的方法与应用

3.1 设置密码

 当其处于菜单文件的首项时，将禁用所有的交互式菜单编辑功能，包括编辑菜单项(`e`)/进入命令行(`c`)。当正确输入密码 (由PASSWD指定)后，上述被禁用的功能将被启用了。你也可以将此命令用到某个菜单项里，用以提高系统安全性。

命令：password [--md5] PASSWD
参数 --md5 说明密码(PASSWD)是使用md5crypt 加密的。

1、GRUB4DOS 明码加密

 比如：未加密码的菜单文件如下：
default 1
timeout 3

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/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 加入密码后菜单：

default 1
timeout 3

password=1234

 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/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 设置密码后，只有输入正确密码后才能编辑菜单项，或者进入命令行模式。
采用明码加密，使用方便，不过安全性低。

假如想锁住“1, GreenGhost”，也就是只有输入正确密码才能使用此项的话，可在该菜单项里加上“lock”。
菜单项变成：

title 1, GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
lock
 map --mem /boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 启动该项时会提示错误。这时按P键，然后输入设定的密码就行了。

也可以设置不同的全局密码【grub中无此叫法，这里指title 前设置的密码。与菜单项里设置的密码以示区别。】和菜单项密码。

比如：

default 1
timeout 3

password=1234

 title 0, Boot from Hard Drive (hd0,0)
root (hd0,0)
chainloader +1

title 1, GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
password=4321
 map --mem /boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

 对于此菜单文件，进入grub4dos菜单后，选择 1, GreenGhost项，会提示输入密码，输入菜单项密码“4321”后能使用该项。

进入grub4dos菜单后，按“p”,输入全局密码“1234”，能编辑菜单项，或者进入命令行模式。包括删除1, GreenGhost项里设置的密码。

2、GRUB4DOS MD5码加密

 明码加密时，打开菜单文件，就能知道所用密码，因此安全性比较低。grub支持使用MD5码加密，以提高安全性。 把字符串转换成MD5码的方式有两种，一种使用grub里的md5crypt命令获得，另一种使用软件转换获得。

a，md5码获得

 用md5crypt命令获得：

进入grub命令行，输入md5crypt，回车，输入设定密码后回车，就得到了相应的md5码。
如下图所示：

用软件获得：

 上网搜索下载相应软件。软件不同或版本不同，操作会有区别。按使用说明进行操作即可。

下面以我用的md5.exe为例，进行说明：

新建文本文件1.txt，输入欲设定的密码，如“123456”，保存。
进入命令行模式，输入:

md5 1.txt 1_md5.txt

如图所示：

打开1_md5.txt文件，得到形如$1$8$pSqK8hjjgmdb73MJlsrnj1的md5码。

【提示：即使是相同的字符串，每次所得到的md5码也是不相同的。】

然后把得到的md5码字符串加入到菜单文件中就行了。

关于全局密码和菜单密码的使用与明码加密部分是相同的。比如：

default 1
timeout 3

password --md5 $1$5$QiEyMNWSnifAmHNnl2eIK.

 title 0, Boot from Hard Drive (hd0,0)
root (hd0,0)
chainloader +1

title 1, GreenGhost [Ghost v8.3/v11] (MAP-HOOK)
password --md5 $1$8$pSqK8hjjgmdb73MJlsrnj1
 map --mem /boot/grub/gghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 4 附录

 这里提供的是部分网络上收集的grub相关资料，供参考。为统一格式，对部分文档进行了重新排版。

Grub legacy
 4.01 Grub 命令索引
4.02 Grub 简体中文化版使用方法
 4.03 GRUB安装配置使用汇总
4.04 Grub命令使用详解
4.05 GRUB三步通
4.06 Grub相关安装配置及使用实例汇总讲析

Grub2资料
 4.07 GRUB2使用简介 作者: bean
4.08 GRUB2高级教程 作者: bean

Grub4dos资料
 4.09 gfxmenu定制高级教程（新增可定制菜单） 作者: bean
4.10 如何使用grubinst_gui 作者: bean

Grub4dos官方文档
4.11 Grub4dos_tutorial (英文)
4.12 Grub4dos简介
4.13 Grub4dos安装和启动
4.14 Grub4dos新手指南
4.15 Grub4dos高级功能
4.16 Grub4dos命令索引
4.17 Grubinst使用介绍
4.18 Grub4dos readme (英文)
4.19 Grub4dos readme (中文) 译者: zw2312914
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

首页

目录

1 入门篇

2 应用篇

3 进阶篇

4 附录


grub4dos初级教程－入门篇、应用篇

grub4dos初级教程
lianjiang 2009年4月

前言: 为何写此初级教程？

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

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

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

致谢

 本文的完成，参考、引用了众多的资料，不少已找不到原始出处。初稿完成后，网友们提出了不少意见和建议，也得到了软件开发者的支持和鼓励。在此一并表示感谢。
lianjiang 2007.03 初稿
2009.04 最后修改

【注： 我的网盘：http://lianjiang2007.ys168.com http://lianjiang2004.ys168.com 也提供部分grub相关文件及资料的下载。】


GRUB安装配置使用汇总

 [转贴]GRUB安装配置使用汇总

一)安装linux时安装grub.
安装redhat linux时会提示安装引导程序,如果选择grub为引导程序,建议把grub安装到硬盘的引导扇区MBR.grub 还可以引导其它操作系统，如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS，以及 Windows 95、98、NT、2000、XP。
(二)grub的配置
一旦选择了grub为引导程序,下面我们来了解一下它的配置.
/boot/grub/grub.conf是grub产生一个引导选择菜单以及设置一些选项.下面是我的grub.conf:
&#35;==========例子开始==========
&#35; grub.conf generated by anaconda
&#35;
&#35; Note that you do not have to rerun grub after making changes to this file
&#35; NOTICE: You have a /boot partition. This means that
&#35; all kernel and initrd paths are relative to /boot/, eg.
&#35; root (hd0,6)
&#35; kernel /vmlinuz-version ro root=/dev/hda10
&#35; initrd /initrd-version.img
&#35;boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,6)/grub/splash.xpm.gz
&#35; --> Redhat Linux 8.0 <--
title Red Hat Linux (2.4.18-14)
root (hd0,6)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img
&#35; --> Microsoft Windows XP <--
title Microsoft Windows XP
rootnoverify (hd0,0)
chainloader +1
&#35;===========例子结束==========
配置选项解释:
以"&#35;"开头的是注释行.
我这里有两个操作系统,分别是Red Hat Linux和Microsoft Windows XP.
其中 timeout标识默认等待时间,我这设置为10秒,超过10秒用户还没作出选择的话,将自动选择默认的操作系统(我这里默认的是Redhat linux 8.0)
默认的操作系统是由default一项来控制的,default后的数字表明第几个是默认的,这里0表示第一个,1表示第二个.所以如果你想修改默认的操作系统,就修改default后的数字.
title一项是设置操作系统的名称,grub不支持中文(有点遗憾).
splashimage一项指定grub界面的背景图片,有兴趣的朋友可以修改grub的背景哦!
root (hd0,6)标识从第一个硬盘,第7个分区来启动搜索引导内核.注意这儿的root与linux的root分区不同,此root非彼root也! grub的硬盘标识方法与linux的有点不同.在linux中第一个主分区为hda1,第二个主分区为hda1,第一个逻辑分区为hda5,而在 grub中是以(hdx,y)来标识的,如第一个主分区为(hd0,0)第一个逻辑分区为(hd0,1)依此类推.所以这儿root后面的是你的 /boot所在分区标识.
知道了内核在哪儿，还要具体指出哪个文件是内核文件，这就是kernel的工作。
kernel /vmlinuz-2.2.18-14 ro root=LABEL=/.说明/boot/vmlinuz-2.2.18-14 就是要载入的内核。后面的都是传递给内核的参数。ro是以readonly的意思。注意我这里内核前面的路径是"/",因为我的boot单独分了一个区,如果你没有为boot单独分区,那么内核前面的路径就是"/boot".
initrd用来初始的linux image，并设置相应的参数
再来看一看windows的定义段吧。
这里，我添加了一项来引导 WindowsXP。要完成此操作，GRUB 使用了"链式装入器"(chainloader)。链式装入器从分区 (hd0,0) 的引导记录中装入 winXP 自己的引导装入器，然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。如果你在计算机中装有win98,winme,win2k,winxp的话,chainloader会把引导权交与win的NTLoader来引导.
(三)Grub启动盘的制作
要制作引导盘，需执行一些简单的步骤。首先，在新的软盘上创建 ext2 文件系统。然后，将其安装，并将一些 GRUB 文件复制到该文件系统，最后运行 "grub" 程序，它将负责设置软盘的引导扇区。
将一张空盘插入 1.44MB 软驱，输入：
&#35; mke2fs /dev/fd0
创建了 ext2 文件系统后，需要安装该文件系统：
&#35; mount /dev/fd0 /mnt/floppy
现在，需要创建一些目录，并将一些关键文件（原先安装 GRUB 时已安装了这些文件）复制到软盘：
&#35; mkdir /mnt/floppy/boot
&#35; mkdir /mnt/floppy/boot/grub
&#35; cp /boot/grub/stage1 /mnt/floppy/boot/grub
&#35; cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一个步骤，就能得到可用的引导盘。
在linux bash中，从 root 用户运行"grub"，该程序非常有趣并值得注意，因为它实际上是 GRUB 引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行，您仍可以运行 GRUB 并执行某些任务，而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。
在 grub> 提示符处，输入：
grub> root (fd0)
grub> setup (fd0)
grub> quit
现在，引导盘完成了。
(四).恢复被windows破坏的grub.
如果你用grub来引导linux和windows,当windows出毛病重新安装后,会破坏MBR中的grub,这时需要恢复grub.
1.把linux安装光盘的第一张放到光驱，然后重新启动机器，在BOIS中把系统用光驱来引导。
2.等安装界面出来后，按［F4］键，也就是linux rescue模式。
3.一系列键盘以及几项简单的配制，过后就［继续］了。。。这个过程，我不说了，比较简单。
4.然后会出现这样的提示符:
sh&#35;
5.我们就可以操作GRUB了.输入grub:
sh&#35;grub
会出现这样的提示符:
grub>
我们就可以在这样的字符后面，输入:
grub>root (hdX,Y)
grub>setup (hd0)
如果成功会有一个successful......
这里的X，如果是一个盘，就是0，如果你所安装的linux的根分区在第二个硬盘上，那X就是1了；Y，就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。
(五).用NTLoader来引导linux.
如果你在安装linux时没有选择安装grub,不必着急,现在我们来看看如何在安装linux后安装grub.并用windows的NTLoader来引导linux.
1. 安装grub
我用的grub是Redhat8.0带的grub安装包: grub-0.92-7.rpm
安装: rpm -ivh grub-0.92-7.rpm
其他安装方式也一样,只要你安装上grub就行了.RH8缺省用的grub, 1,2步骤可以省了.
2. 建立grub的环境
cp /usr/share/grub/i386-pc/* /boot/grub
3. 生成grub的配置文件/boot/grub/menu.conf
按照上面所讲的grub.conf来生成一个配置文件.
注意了, 这里我的linux在/dev/hda4,所以menu.conf那些分区位置为(hd0,3),
你的可能不一样了,不能完全照着"画瓢"噢! 下面第3步install的中的分区位置也应该和你的系统一致.
3. 安装grub至Linux分区boot
将grub的stage1安装到/dev/hda4的boot扇区(hd0,3). 过程如下:
/sbin/grub (运行grub)
grub> install (hd0,3)/boot/grub/stage1 d (hd0,3) (hd0,3)/boot/grub/stage2 p (hd0,3)/boot/grub/menu.conf
(注意,上面"grub>"为grub的提示符,其后内容写在一行上.)
4. 取得grub的boot信息
过程如下:
dd if=/dev/hda4 of=/grub.lnx bs=512 count=1
这样得到grub的引导信息,只要用NT Loader来加载它就行了.
5. 将上面得到的grub.lnx弄到Windows的C盘根目录下
可以先把grub.lnx弄得软盘上,然后启动windows,拷贝到C:\; 情况允许也可以直接在Linux下拷贝到C:了. 我的C盘(即设备/dev/hda1)为FAT32, 可以直接从Linux下弄过去了. 如下:
mount -t vfat /dev/hda1 /mnt/c
cp /grub.lnx /mnt/c
umount /mnt/c
6. 修改NT Loader的boot.ini
在其中加入一行: C:\grub.lnx="Redhat Linux - GRUB"
加入后boot.ini的内容如下:
[boot loader]
timeout=15
default=C:\boot.lnx
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
[VGA mode]" /basevideo /sos
C:\grub.lnx="Redhat Linux - GRUB"
OK. 可以用NT Loader加载Linux了, 其实上面过程基本上和用NT Loader加载LILO一样.其基本思想就是用NT Loader来加载LILO或grub的引导区(grub.lnx), 其中的关键就是LILO或grub的引导区的获取.
(六)活用grub的交互功能
grub具有强大的交互功能.学会了将会使你受益非浅!
1.grub没有显示菜单怎么办?
当开机后进入grub界面但没了菜单,只剩下一个grub>提示符,怎么启动呢?别急,看下面:
grub>cat (hd0,6)/boot/grub/grub.conf (为了看参数)
grub>root (hd0,6)
grub>kernel (hd0,6)/vmlinuz-2.4.18-14 ro root=LABEL=/
grub>initrd (hd0,6)/initrd-2.4.18-14.img
grub>boot
OK!启动了吧!以上有些数字要根据你的实际情况更改.
以上这个方法也可以用于测试新编译的内核.
2.进入单用户模式.
有时不小心把root用户密码忘了,只能进入单用户模式来重新设置root密码.方法如下:
开机进入grub界面,按C进入命令行模式,然后按照上面的方法进行,只是在第三步要在后面加入single参数.

以上转载于中国IT实验室，再次表示感谢
什么是 GRUB？
GRUB 是引导装入器 -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统，如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS，以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务，但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性，那么就可能锁住系统，而无法引导计算机。另外，好的引导装入器可以给您灵活性，让您可以在计算机上安装多个操作系统，而不必处理不必要的麻烦。
GRUB 是一个很棒的引导装入器。它有许多功能，可以使引导过程变得非常可靠。例如，它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。（AIX、SUN的系统？我还不知道能不能支持）这就意味着无论怎样它总能找到内核。另外，GRUB 有一个特殊的交互式控制台方式，可以让您手工装入内核并选择引导分区。这个功能是无价的：假设 GRUB 菜单配置不正确，但仍可以引导系统。哦，对了 -- GRUB 还有一个彩色引导菜单
Linux 世界在很长一段时间里一直使用 LILO 引导装入器，而且它可以让上百万的 Linux 用户引导系统。是的，的确是这样，LILO 很有效。但是，LILO 的维修率很高，而且很不灵活。与其花很多时间来描述 GRUB 的优点，还不如演示如何创建自己的 GRUB 引导盘以及如何使用它来引导系统。然后，我将说明 GRUB 的一些很“酷”的技术细节，并指导您完成将 GRUB 安装到 MBR（主引导记录）的过程，以使它成为缺省引导装入器。
如果您有点胆小，不必害怕。可以学习前半部分，创建 GRUB 引导盘，尝试使用 GRUB 而不必弄乱现有的引导装入器。或者，可以用其安全的“驻留”方式来熟悉 GRUB。那么，让我们立即开始吧。
下载 GRUB
要开始探究 GRUB 的精妙之处，首先需要下载、编译和安装它。但不要害怕 -- 根本不会修改您的引导记录 -- 我们只是要编译和安装 GRUB，就像其它程序一样，在此过程中我们可以创建 GRUB 引导盘。请不要担心；在修改引导过程之前，我会告诉您。
现在开始。访问 ftp://alpha.gnu.org/gnu/grub/
并下载可以找到的最新版本的 GRUB tar 压缩包。我编写本教程时，最新的 tar 压缩包是 grub-0.5.96.1.tar.gz。下载了最新版本后，就可以安装了。
安装期
这里是从 tar 压缩包安装 GRUB 所需输入的命令。我将在 /tmp 中编译源文件，并将所有部分都安装到硬盘的 /usr 目录下。从 root 用户，输入以下命令：
&#35; cd /tmp
&#35; tar zxvf /path/to/archive/here/grub-0.5.96.1.tar.gz
&#35; cd grub-0.5.96.1
&#35; ./configure --prefix=/usr
&#35; make
&#35; make install
现在已经安装了 GRUB，准备开始使用它。
制作引导盘
要制作引导盘，需执行一些简单的步骤。首先，在新的软盘上创建 ext2 文件系统。然后，将其安装，并将一些 GRUB 文件复制到该文件系统，最后运行 "grub" 程序，它将负责设置软盘的引导扇区。准备好了吗？

制作引导盘，第二部分
好，将一张空盘插入 1.44MB 软驱，输入：
&#35; mke2fs /dev/fd0
创建了 ext2 文件系统后，需要安装该文件系统：
&#35; mount /dev/fd0 /mnt/floppy
现在，需要创建一些目录，并将一些关键文件（原先安装 GRUB 时已安装了这些文件）复制到软盘：
&#35; mkdir /mnt/floppy/boot
&#35; mkdir /mnt/floppy/boot/grub
&#35; cp /usr/share/grub/i386-pc/stage1 /mnt/floppy/boot/grub
&#35; cp /usr/share/grub/i386-pc/stage2 /mnt/floppy/boot/grub
只需要再有一个步骤，就能得到可用的引导盘。

制作引导盘，第三部分
解压、编译和安装 GRUB 源 tar压缩包时，会将程序 grub 放到 /usr/sbin 中。该程序非常有趣并值得注意，因为它实际上是 GRUB 引导装入器的半功能性版本。是的，尽管 Linux 已经启动并正在运行，您仍可以运行 GRUB 并执行某些任务，而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面完全相同。
这是有趣的设计策略，现在该使用驻留版本的 GRUB 来设置引导盘的引导扇区了。从 root 用户，输入 "grub"。GRUB 控制台将启动，显示如下：
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
欢迎使用 GRUB 控制台。现在，研究命令。

制作引导盘，第四部分
在 grub> 提示符处，输入：
grub> root (fd0)
grub> setup (fd0)
grub> quit
现在，引导盘完成了。在继续下一步骤之前，在看一下刚才输入的命令。第一个 "root" 命令告诉 GRUB 到哪里查找辅助文件 stage1 和 stage2。缺省情况下，GRUB 会在指定的分区或磁盘上的 /boot/grub 目录中进行查找。在安装引导盘时，也就是几分钟以前，我们已将这些文件复制到正确的位置。接着，输入了 setup 命令，它告诉 GRUB 将引导装入器安装到软盘的引导记录上；我们将在以后详细讨论这一过程。然后退出。现在，已经制作好引导盘，可以开始使用 GRUB 了。

使用 GRUB 引导系统之前，需要知道一些信息。首先，应知道哪个分区保存了 Linux 内核，以及 root 文件系统的分区名称。然后，应查看现有 LILO 配置来寻找需要传递给内核的变量，如 "mem=128M"。一旦获取了这些信息，就可以开始了。
要启动 GRUB，需要关闭系统并退出引导盘。如果由于某些原因而不能立即关闭系统（比如上班时在部门的服务器上测试 GRUB），那么只要在提示中输入 "grub" 并继续操作。所有程序的运行情况都不会改变，只是您不能执行引导（因为 Linux 正在运行）。
装入引导盘时，在屏幕顶部将出现一条消息，告诉您正在装入第一阶段和第二阶段。几秒后，将会出现一个熟悉的屏幕，显示如下：
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
可以看到，这些内容与在 Linux 中以驻留方式运行 GRUB 时出现的消息完全相同 -- 只不过现在我们是使用 GRUB 来引导 Linux。
在 Linux 中，当谈到 "root" 文件系统时，通常是指主 Linux 分区。但是，GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 Linux 内核的分区。这可能是您的正式 root 文件系统，也可能不是。例如，在 Gentoo Linux 中，有一个单独的小分区专用于保存 Linux 内核与引导信息。大多数情况下，我们不安装这个分区，这样在系统意外崩溃或重新引导时，就不会把它弄乱。
这些，我们讨论的是 GRUB，需要指定 GRUB 的 root 分区。进入 root 分区时，GRUB 将把这个分区安装成只读型，这样就可以从该分区中装入 Linux 内核。GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区，我们很快就会讨论这个功能。但现在，让我们输入 root 分区。在提示中输入 root，但不要按 Enter 键：
grub> root (
现在，按一次 Tab 键。如果系统中有多个硬盘，GRUB 将显示可能完成的列表，从 "hd0" 开始。如果只有一个硬盘，GRUB 将插入 "hd0,"。如果有多个硬盘，继续进行，在 ("hd2") 中输入名称并在名称后紧跟着输入逗号，但不要按 Enter 键。部分完成的 root 命令看起来如下：
grub> root (hd0,
现在，继续操作，再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表，以及它们的文件系统类型。在我的系统中，按 Tab 键时得到以下列表：
grub> root (hd0, (tab)
Possible partitions are:
Partition num: 0, Filesystem type is ext2fs, partition type 0x83
Partition num: 1, Filesystem type unknown, partition type 0x82
Partition num: 2, Filesystem type unknown, partition type 0x7
Partition num: 4, Filesystem type is reiserfs, partition type 0x83
Partition num: 5, Filesystem type is reiserfs, partition type 0x83
如您所见，GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些，只需要好好理解 GRUB 新奇的硬盘和分区命名语法，然后就可以继续操作了。
GRUB 命名约定
到目前为止，您可能会感到一点困惑，因为 GRUB 所使用的硬盘／分区命名约定与 Linux 使用的命名约定不同。在 Linux 中，第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外，硬盘和分区都用逗号分隔，整个表达式用括号括起。现在，回来看一下 GRUB 提示，可以发现如果要引导 Linux 硬盘 hda5，应输入 "root (hd0,4)"。如果已经明白了 GRUB 硬盘／分区命名，您也许要调整当前 root 命令行，以使它指向保存 Linux 内核的分区。按以下格式输完命令，然后按 Enter 键：
grub> root (hd0,4) (hit enter)
Filesystem type is reiserfs, partition type 0x83
装入内核
现在已安装了 root 文件系统，到装入内核的时候了。在 GRUB 提示中，依次输入 "kernel"、空格、到内核的路径、空格、内核参数，如 root 参数（GRUB 将自动插入适当的 "mem=" 参数）。我在我的系统中输入：
grub> kernel /boot/bz2.4 root=/dev/hda5
[Linux-bzImage, setup=0x1200, size=0xe1a30]
请留意 "root=" 内核参数，它非常重要。它应该指向保存 root 文件系统的 Linux 分区。您也许要写下到目前为止输入的命令，这样在教程后面讲述如何创建 GRUB 引导菜单时，就可以迅速找到它们。
Root，内核，引导！
您已经安装了 root 文件系统并装入了内核。现在，可以引导了。只要输入 "boot"，Linux 引导过程就将开始。
重新调查引导软盘
如果一切正常，就可以使用使用 GRUB 引导盘来引导当前 Linux 发行版。如您所见，GRUB 是功能非常强大的引导装入器，它让您可以随意动态配置以进行引导。我将向您介绍如何创建 GRUB 引导菜单，这样就可以从菜单中进行 OS 选择，而不是输入三行命令来引导 Linux。但在动手之前，现在是深入了解 GRUB 幕后是如何工作的好时机。我将说明引导盘引导过程的工作原理，这样您就可以对 GRUB 有一个更好的评价和了解。
两阶段过程
要制作引导软盘，需要做两件事 -- 将文件复制到软盘的 ext2 文件系统的 /boot/grub 目录中，运行 GRUB 的安装程序。运行 GRUB 安装程序时，GRUB 将 "stage 1" 装入器安装到软盘的引导记录中。它还将 stage 1 装入器配置成从 ext2 文件系统直接装入 stage2。通常，GRUB 通过在包含 stage2 数据的软盘上创建一列块来完成此操作，这样 stage1 装入 stage2 时不必知道 ext2 文件系统的任何情况。
但是，大多数情况下，GRUB 在安装完 stage1 之后，会立即将 stage1.5 装入器安装到引导记录中。这个特殊的 stage1.5 允许无需使用原始块列表就能从 ext2 文件系统装入 stage2，却要更灵活的标准基于路径的方法。GRUB 理解文件系统结构的这一能力使 GRUB 比 LILO 更强壮。例如，如果正好在整理引导盘文件系统的碎片，stage1 就可以找到 stage2（归功于 ext2 stage1.5）。而 LILO 就不能完成此项操作。因为 LILO 只能依赖于映射文件，每次更新内核或在磁盘上物理移动数据时，即使不更改路径，也需要重新运行它。
阶段 1、1.5 和 2 第 3 页
您也许会想知道：如果使用 FAT 而不是 ext2 文件系统创建引导盘，GRUB 是否可以工作。是的，它可以工作，因为在输入 "setup (fd0)" 时，GRUB 会安装与 root 文件系统类型匹配的 stage1.5。即使没有没有空间可以安装 stage1.5，GRUB 仍可以通过追溯到更原始的块列表，来装入 stage2
搜索和恢复
在继续讨论之前，先研究一个与引导软盘相关的实用提示。由于 GRUB 的交互式性质，它为恢复软盘生成了一个很好的引导装入器。但是，如果将好的内核复制到引导盘上，那它就更好了。那样，即使硬盘上的内核坏了或者被意外删除了，也可以追溯到引导盘内核，并启动和运行系统。要将备用内核复制到引导盘，执行以下操作：
&#35; mount /dev/fd0 /mnt/floppy
&#35; cp /path/to/bzImage /mnt/floppy/boot
&#35; umount /dev/fd0
现在，软盘已包含备用内核，可以在 GRUB 中使用它来引导 Linux 发行版，操作如下：
grub> root (fd0)
grub> kernel /boot/bzImage root=/dev/hda5 （将 /dev/hda5 更改成想要引导的分区名称）
grub> boot
硬盘引导
好，现在如何将 GRUB 安装到硬盘上？这个过程几乎与引导盘安装过程一样。首先，需要决定哪个硬盘分区将成为 root GRUB 分区。在这个分区上，创建 /boot/grub 目录，并将 stage1 和 stage2 文件从 /usr/share/grub/i386-pc 复制到该目录中。可以通过重新引导系统并使用引导盘，或者使用驻留版本的 GRUB 来执行后一步操作。在这两种情况下，启动 GRUB，并用 root 命令指定 root 分区。例如，如果将 stage1 和 stage2 文件复制到 hda5 的 /boot/grub 目录中，应输入 "root (hd0,4)"。现在，只差一步。
接着，决定在哪里安装 GRUB -- 在硬盘的 MBR，或者如果与 GRUB 一起使用另一个“主”引导装入器，则安装在特定分区的引导记录中。如果安装到 MBR，则可以指定整个磁盘而不必指定分区，如下（对于 hda）：
grub> setup (hd0)
如果要将 GRUB 安装到 /dev/hda5 的引导记录中，应输入：
grub> setup (hd0,4)
现在，已安装 GRUB。引导系统时，应该立即以 GRUB 的控制台方式结束（如果安装到 MBR）。现在，应创建引导菜单，这样就不必在每次引导系统时都输入那些命令。
引导菜单
要创建菜单，只需在 /boot/grub 中创建一个简单的文本文件 menu.lst。如果将它放在正确位置，它将在 root GRUB 驱动器的 stage1 和 stage2 文件的旁边。这里是一个样本 menu.lst 文件，可以将它作为一个您的菜单的基础：
default 0
timeout 30
color white/blue blue/green
title=Boot Linux
root (hd0,4)
kernel /boot/bzImage root=/dev/hda5
title=Boot Linux using initrd
root (hd0,5)
kernel /boot/bzImage root=/dev/loop0 init=/initdisk.gz
initrd /initdisk.gz
title=Windows NT
root (hd0,3)
chainloader +1
我将在以下的屏面中说明 menu.lst 格式。
理解引导菜单
引导菜单很容易理解。前三行设置缺省菜单项（项目号 0，第一个）、设置超时值（30 秒），并选择整个菜单的一些颜色。
接着的三行配置 "Boot Linux" 菜单项。要创建手工引导命令系列之外的菜单项，只要添加一行 "title=" 作为第一行，并从最后一行中除去 "boot" 命令（GRUB 会自动添加这个命令）。
接着的四行显示了如何使用 GRUB 来引导 initrd（初始 root 磁盘），如果您愿意的话。现在，讨论最后三行……
链式装入器
这里是示例 menu.lst 的最后三行……
title=Windows NT
root (hd0,3)
chainloader +1
这里，我添加了一项来引导 Windows NT。要完成此操作，GRUB 使用了“链式装入器”。链式装入器从分区 (hd0,3) 的引导记录中装入 NT 自己的引导装入器，然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。
GRUB 的弹性
GRUB 最好的优点之一就是其强健的设计 -- 在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置，不必重新安装 GRUB。事实上，如有必要，只要更新 menu.lst 文件即可，一切将保持正常。
只有少数情况下，才需要将 GRUB 引导装入器重新安装到引导记录。首先，如果更改 GRUB root 分区的分区类型（例如，从 ext2 改成 ReiserFS），则需要重新安装。或者，如果更新 /boot/grub 中的 stage1 和 stage2 文件，由于它们来自更新版本的 GRUB，很有可能要重新安装引导装入器。其它情况下，可以不必理睬！

GRUB多重启动管理器
1. 什么是grub
    grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写，它可以在
多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux,FreeBSD,So
laris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000。它可以载入操作系
统的内核和初始化操作系统（如Linux,FreeBSD），或者把引导权交给操作系统（如Win
dows 98）来完成引导。
2. grub的特点
    grub可以代替lilo来完成对Linux的引导，特别适用于linux与其它操作系统共存情
况，与lilo相比，它有以下特点：
支持大硬盘
    现在大多数Linux发行版本的lilo都有同样的一个问题：根分区(/boot分区)不能分
在超过1024柱面的地方，一般是在8.4G左右的地方，否则lilo不能安装，或者安装后不
能正确引导系统。而grub就不会出现这种情况，只要安装时你的大硬盘是在LBA模式下，
grub就可以引导根分区在8G以外的操作系统。
支持开机画面
    grub支持在引导开机的同时显示一个开机画面。对于玩家来说，这样可以制作自己
的个性化开机画面；对于PC厂商，这样可以在开机时显示电脑的一些信息和厂商的标志
等。grub支持640x480,800x600,1024x768各种模式的开机画面，而且可以自动侦测选择
最佳模式，与Windows那320x400的开机画面不可同日而语。
两种执行模式
    grub不但可以通过配置文件进行例行的引导，还可以在选择引导前动态改变引导时
的参数，还可以动态加载各种设备。例如你在Linux下编译了一个新的核心，但不能确定
它能不能工作，你就可以在引导时动态改变grub的参数，尝试装载这个新的核心进行使
用。Grub的命令行有非常强大的功能，而且支持如bash或doskey一样的历史功能，你可
以用上下键来寻找以前的命令。
菜单式选择
    在lilo下，你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一
个菜单来选择不同的系统进行引导。你还可以自己配置各种参数，如延迟时间，默认操
作系统等。
分区位置改变后不必重新配置
    lilo是通过读取硬盘上的绝对扇区来装入操作系统，因此每次分区改变都必须重新
配置lilo，例如你用PQ magic调整了分区的大小，那lilo在你重新配置好之前就不能引
导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存，因此只要操
作系统核心的路径没有改变，grub就可以引导系统。 除此之外，Grub还有许多非常强大
的功能。例如支持多种外部设备，动态装载操作系统内核，甚至可以通过网络装载操作
系统核心。Grub支持多种文件系统，支持多种可执行文件格式，支持自动解压，可以引
导不支持多重引导的操作系统等。
3. grub的使用
安装grub
    如果已经安装了蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇
区上，只需要简单打入makebootable命令就可以了。
制作grub启动盘
    首先确定grub已经安装，然后进入grub的目录，键入：
    &#35;cd /boot/grub
    放入一张软盘，然后敲入命令：
    &#35;dd if=stage1 of=/dev/fd0 bs=512 count=1
    &#35;dd if=/stage2 of=/dev/fd0 bs512 seek=1
    这样就可以做好一张启动盘了。
开机
    安装了grub开机后会出现一个菜单，列出所有的启动选项。如果设置了启动画面则
会显示启动画面，按Esc键则可以取消启动画面显示菜单选项。蓝点Linux所带的grub的
命令提示是全中文的，在菜单下面详细列出如按e是编辑启动命令，按c是使用命令行等
。用上下键可以选择菜单项，按回车启动所选项。按e键可以编辑所选项的启动命令，你
可以用这个功能临时改变你的系统的启动参数，参见配置grub一节。按c键则进入命令行
模式。
    在命令行模式下可以打入命令直接执行，例如你可以敲入poweroff关闭计算机。按
Tab键可以列出所有支持的命令。蓝点Linux已经把grub汉化了，其中一部分命令敲入名
字后会给出中文提示，显示命令的用法和参数。
4. 配置grub
    grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件，如果找不到此
文件则不进入菜单模式而直接进入命令行模式。
    menu.lst 是一个文本文件，你可以用任何一个文本编辑器来打开它。每一行代表一
个配置命令，如果一行的第一个字符为井号"&#35;"则这一行为注释，你可以简单地用增加或
减少注释行来改变配置。
编辑menu.lst，一般会有以下各行
timeout second
设定在second秒之后引导默认的操作系统。
蓝点Linux默认是timeout 5，就是5秒没有其他指令就引导系统，如果设成-1，则grub会
一直等待直到用户选择一个选项为止。
default num
默认启动第num+1行选项，也就说default=0则默认启动菜单第一行的操作系统，defaul
t=1则启动第2行的系统，如此类推。
splash pathname/filename
指出开机画面的文件所存放的路径和文件名，如 splash /boot/logo/800x600x8.img 是
指用在/boot/logo路径下的800x600.img文件作为开机画面
title OSname title
后面的字符就是你在菜单项上所看见的选项，你可以写上操作系统的名字和描述，如用
title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。
下面结合两个系统引导描述来解释几个引导选项的意义
title BluePoint Linux, Default Mode
root (hd0,1)
kernel /boot/vmlinuz vga=auto root=/dev/hda2
hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/v
mlinuz 是指出Linux核心的路径在/boot/vmlinuz中。vga=auto 是设定显示模式，root
=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点（"/"）。
title Microsoft Windows
root (hd1,0)
chainloader (hd1,0)+1
root (hd1,0)这是指第二个硬盘(从硬盘)上第一个分区
chainloader (hd1,0)+1 装入一个扇区的数据然后把引导权交给它。
5. 从软盘启动grub
    制作启动盘后可以用软盘启动引导硬盘上的操作系统 插入制作好的启动软盘，进入
BIOS设定软盘启动。软盘启动成功后就会进入grub的命令行模式
grub>
    要启动一个操作系统，首先指定引导哪个分区上的系统，例如要引导指第一个硬盘
上的第一个分区的操作系统，先键入
grub>root (hd0,0)
    接着如果要启动的是Windows系统，键入
grub>chainloader (hd0,0)+1
    注意(hd0,0)要随着硬盘和分区的不同而改变数字。 如果要引导Linux或其他系统，
应键入
grub>kernel （hd0,0）/boot/vmlinuz root=/dev/hda1
    注意hda1参数也要随着硬盘和分区的不同而改变，如从第二个硬盘的第一个分区引
导则用hdb1。
    最后敲入boot就可以启动系统了。
    在任何时候不能确定命令或者命令的参数都可以按Tab获得相关的帮助。用上下键可
以获得命令的历史记录。 其实这些命令就是menu.lst的启动描述，您也可以根据那些描
述来自己键入启动命令，最后敲入boot就可以引导系统了。

GRUB使用说明
从Red Hat Linux 7.2起，GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。相信LILO对于大家来说都是很熟悉的。这次Red Hat Linux用GRUB代替LILO，可见GRUB大有过人之处。不过，相对于LILO来说，大家对GRUB还是要陌生一些。本文将对GRUB的基本情况、术语、接口、命令以及配置文件做个介绍，希望对大家有所帮助。
    一、GRUB的概述
    在Red Hat linux装载一个系统前，它必须由一个引导装载程序（boot loader，启动管理程序)中的特定指令告诉它去引导系统。这个程序一般是位于系统的主硬盘驱动器或是其他知道如何去开始linux内核的媒介驱动器上。
    如果说一个x86系统只安装了Red Hat Linux而且只有一个版本的linux内核，那么通过引导装载程序开始Red Hat Linux的特定过程就不重要了。Red Hat Linux安装程序允许用户快速方便地配置引导装载程序存放在主硬盘驱动的主引导记录中来引导操作系统。
    然而，为了能从多个linux内核或其他操作系统引导，那么就很有必要了解Red hat linux用于提供必要的引导选项的方法，以及理解引导的过程与如何去改变。
    本文是讨论GRUB，它是Red Hat Linux用来在x86系统上装载操作系统的默认方法。同时，本文也将详细介绍用于控制引导过程的各种命令和配置选项。
    GRUB的定义
    GNU GRUB(GRand Unified Bootloader)是一个将引导装载程序安装到主引导记录的程序，主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是GRUB的命令环境。这使得用户能够开始操作系统的选择，在内核引导时传递特定指令给内核，或是在内核引导前确定一些系统参数（如可用的RAM大小）。
    x86的引导过程
    当一个x86机器启动后，系统BIOS开始检测系统参数，如内存的大小、日期和时间、磁盘设备、以及这些磁盘设备用于引导的顺序等。通常情况下， BIOS都是被配置成首先检查软驱或光驱（或两者都检查），然后再尝试从硬盘引导。如果在这些可移动的设备中，没有找到可引导的介质，那么BIOS通常是转向第一块硬盘最初的几个扇区，寻找用于装载操作系统的指令。这些最初的扇区－主引导记录－开始装载一个预选择操作系统的过程，一个操作系统选项贩 GRUB菜单，或是一个执行特定选项的GRUB命令行接口。
    装载GRUB和操作系统的过程，包括以下几个操作步骤：
    1、装载基本的引导装载程序，这通常是第一步。基本引导装载程序必须是位于主引导扇区中一个非常小的空间，少于512字节。因此，基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。这主要是归结于在主引导扇区中没有足够的空间用于其他东西了。
    2、装载第二引导装载程序，这通常称为第二步。这第二引导装载程序实际上是引出更高级的功能　，以允许用户装载入一个特定的操作系统。在GRUB中，这步是让用户显示一个菜单或是输入命令。
    3、装载在一个特定分区上的操作系统，如linux内核。一旦GRUB从它的命令行或是配置文件中，接到开始操作系统的正确指令，它就寻找必要的引导文件，然后把机器的控制权移交给操作系统。

    注意
    在一些文件系统以及文件系统的配置中，可能需要一个1.5步的文件，用来连接基本引导程序与第二引导程序之间的差异。
    举个例子来说，如果第二步中的引导装载程序文件位于一个使用了第一步引导装载程序所不能访问的文件系统的分区中，那么就可能需要指示第一步引导装载程序，从1.5步文件中载入附加的指令来读取第二步引导装载程序的文件。更多相关的信息，请参考GRUB的信息页。
    前面所提到的引导方法被称为直接装载。因为这种方法中使用的是直接装载操作系统的指令，没有用到任何在引导装载程序和操作系统主文件（如内核）之间的中间代码。然而，不同操作系统所采用的引导过程可能会与上面提到的有一些细微的不同。例如，微软的DOS和Windows操作系统在安装时，倾趋于完全重写主引导记录，而不是合并当前的主引导记录的配置。这将破坏掉其他操作系统保存在主引导记录中的所有信息，如Red Hat Linux。微软操作系统，还有一些其他的专有操作系统，都是使用一种称为链式装载的引导方法来启动的。在这种方法中，主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。
    GRUB支持直接和链式装载的引导方法。GRUB能用于几乎所有操作系统，绝大多数流行的文件系统，以及几乎所有的系统BIOS所能识别的硬盘。
    GRUB的特性
    GRUB包含许多特性，这使得GRUB比其他可用的引导装载程序更加优越。下面列出一些比较重要的特性：
    ·GRUB在x86机器上，提供一个真正基于命令行的，先于操作系统(pre-OS)的环境。它对于用确定的选项装载操作系统或收集系统信息方面，提供了最大程度的适应性。许多非x86的体系结构已经使用先于操作系统环璄许多年了，它提供控制系统如何从一个命令行引导。当LILO或其他x86引导装载程序使用了一些命令特性的时候，GRUB已经包含了许多这方面的特性。
    ·GRUB支持逻辑块寻址(LBA)方式。LBA将用于寻找驱动器上文件的地址转换工作置于驱动器的硬件中，它被用在许多IDE和所有的SCSI硬盘中。在使用LBA之前，硬盘驱动器遇到一个1024柱面的限制，即BIOS不能找到在1024柱面后的文件（比如一个引导装载程序或是内核文件）。只要系统BIOS能支持LBA模式（大多数都支持），那么LBA就允许GRUB超越1024柱面的限制，引导操作系统。
    ·GRUB的配置能在每次系统引导时被读取。这就避免了用户每次改变引导选项时都要重写一次主引导记录。大多数的引导装载程序都不能很老道地读取配置文件，并使用它们来设置引导选项。比如说，用户必需改变一个LILO的配置文件，然后运行一个命令将新的配置数据重写回系统的主引导记录。这种方法比 GRUB所采用　的方法更加危险，因为一个错误配置的主引导记录将让系统无法引导。在使用GRUB中，如果说配置文件被错误配置并且引导，那它也仅仅简单地转到一个默认的命令行，允许用户手工输入命令来运行操作系统。除开更新系统引导的第一步、第二步、或是菜单配置文件的位置，主引导记录是不会被触及到的，而这种情况是很少发生的。
    注意：
    当GRUB的配置文件发生改变时，没有必要重新启动GRUB。所有的改变都能被自动地检测到。如果GRUB被重新启动，那么用户将退回到命令行方式的GRUB外壳下。
    安装GRUB
    如果在Red Hat Linux的安装过程中，GRUB没有被安装，下面将说明如何安装它，并将它设为默认的引导装载程序。
    注意：如果LILO已经被安装，并且是当前的系统引导装载程序，那并没有必要为了使用GRUB而删除它。GRUB一旦安装后，将做为系统默认的引导装载程序。
    首先，获取最新可用的GRUB包。在Red Hat Linux安装光盘上的GRUB包也可以使用。
    其次，在一个外壳提示下，运行命令/sbin/grub-install ，这里的是GRUB将要被安装的位置。比如说：/sbin/grub-install /dev/hda
    最后，重新引导系统。GRUB图形引导装载菜单将出现。　　二、GRUB的术语
    在使用GRUB前，最重要的事情之一就是理解这个程序是如何引用设备的，如系统硬盘驱动器、分区等。对于配置GRUB实现多操作系统的引导，这方面的信息是很重要的。
    设备名称
    系统的第一个硬盘驱动器被GRUB称为(hd0)。在它上面的第一个分区被称为(hd0,0)，第二个硬盘驱动器上的第5个分区被称为(hd1,4)。通常使用GRUB时，文件系统习惯上采用下面的方式命名：
    (,)
    在设备命名中，圆括号和逗号是很重要的。指出是一个硬盘(hd)还是一个软盘(fd)被指定。
    是依照系统BIOS而确定的设备号，从0开始。基本IDE硬盘被标为0，第二IDE硬盘被标为1。这个排序大体上等同于linux内核用字母安排设备的顺序，只是在hda中的a变成了0，hdb中的b变为了1，依次类推。
    注意：GRUB用于设备的命名系统是从0开始，而不是1。这常常是GRUB新手们常犯的最普遍的错误。
    指在一块硬盘上一个分区的编号。类似于，分区的编号也是从0开始。虽然大多数的分区可以用数字指定，但是如果系统使用的是BSD分区，那么它们还是用字母来指定，如a或c。
    GRUB在命名设备和分区时，使用下面的规则：
    ·系统使用IDE硬盘或SCSI硬盘，都没有关系。所有的硬盘都是用hd开始。软盘用fd开头。
    ·当指定整个硬盘，不考虑它的分区时，简单地将逗号和分区编号取消即可。当告诉GRUB配置一个特定硬盘的主引导扇区时，这一点很重要。比如，(hd0)指定第一个设备，(hd3)指定第四个设备。
    ·如果一个系统有多个驱动设备，知道由BIOS确定的驱动器顺序就很重要了。如果系统只有IDE或SCSI驱动器，那是相当简单的。但是如果有多个驱动器混合时，这就变得令人混乱了。
    文件名称
    当在GRUB中输入包括文件的命令时，比如在多操作系统中使用一个菜单列表，文件名必须直接在设备和分区后指定。一个绝对文件名的格式如下：
    (,)/path/to/file
    大多数的时候，用户可以通过在分区上的目录路径后加上文件名来指定文件。这种方法是直接了当的。
    另外，我们也可以将不在文件系统中出现的文件指定给GRUB，比如在一个分区最初几块扇区中的链式引导装载程序。为了指定这些文件，需要提供一个块列表(blocklist)，由它来一块一块地告诉GRUB文件在分区中的位置。当一个文件是由几个不同的块组合在一起时，需要有一个特殊的方式来写块列表。每个文件片断的位置由一个块的偏移量以及从偏移点起始的块数来描述，这些片断以一个逗号分界(comma-delimited)的顺序组织在一起。
    考虑下面的块列表：
    0+50,100+25,200+1
    上面这个块列表告诉GRUB使用一个文件，这个文件起始于分区的第一块，使用了第0块到第49块，第99块到124块，以及第199块。
    当使用GRUB装载诸如微软Windows这样采用链式装载方式的操作系统时，知道如何写块列表是相当有用的。如果从第0块开始，那么可以省略块的偏移量。作为一个例子，当链式装载文件在第一硬盘的第一个分区时，可以使用下面的命名：
    (hd0,0)+1
  下面给出一个带类似块列表名称的chainloader命令。它是在设置正确的设备和分区作为根后，在GRUB命令行中给出的。
    chainloader +1
    GRUB的根文件系统
    一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的，这一点需要记住。
    GRUB的根文件系统是用于一个特定设备的根分区。GRUB使用这个信息来挂入(mount)这个设备并从它上面载入文件。
    在Red Hat Linux中，一旦GRUB载入它自己的包含Linux内核的根分区，那么kernel命令就可以将内核文件的位置作为一个选项来执行。一旦Linux内核引导，它就设定自己的根文件系统，此时的根文件系统就是大多数人用来与Linux联系的了。最初的GRUB根文件系统以及它的挂入都被去掉，它们仅存在于用来引导内核文件。
    关于根和内核命令的更多信息，可以参考后面的命令部分。
三、GRUB的接口
    GRUB主要有三个强大的接口，它们提供了不同级别的功能。每个接口都允许用户引导操作系统，甚至可以在处于GRUB环境下的接口之间移动。
    菜单接口
    如果GRUB是由Red Hat Linux的安装程序自动配置的，那么它默认的显示接口是菜单接口。在系统第一次启动后，一个操作系统或内核的菜单（事先已经用它们各自的引导命令配置好）将一个按名称排列的列表保存在这个接口中。使用箭头键选择一个非默认选项，然后按回车键来引导它。如果不是这样，一个记时器可能已经被设置，那么 GRUB将启动装载那个默认的选项。
    在菜单接口上，按[e]键，对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。
    菜单项目编辑器接口
    在引导装载菜单中按[e]键，就进入了菜单项目编辑器。用于项目的GRUB命令就显示在这里。在引导操作系统前，用户可以更改这些命令，添加(加在当前行后面，用[o]键；加在当前行前，用[0])，编辑(用[e]键)，删除(用[d]键)。
    在所有的改变都完成后，用键来执行这些命令，并引导操作系统。[Esc]键来放弃这些修改，将重新入标准的菜单接口。[c]键用来载入命令行接口。
    命令行接口
    命令行是GRUB最基本的接口，但它也是被授予了最大控制能力的接口。在命令行接口中，输入任何相关的GRUB命令，再回车就可以执行了。这个接口的功能有点类似于shell的功能，比如[Tab]键完成，前后文提示，输入命令时的[Ctrl]键组合，如[Ctrl]-[a]移到行的开头， [Ctrl]-[e]移到行的结尾。另外，箭头键，[Home],[End],[Delete]键与bash shell中一样用法。
    接口使用的顺序
    当GRUB环境开始载入第二步引导装载程序时，它寻找自己的配置文件。当找到配置文件后，它使用这个配置文件建立一个要载入的操作系统的菜单列表， 然后显示引导菜单接口。
    如果配置文件没有被找到，或者如果配置文件不能读取，那么GRUB将载入命令行接口，以允许用户手工输入必要的命令来启动操作系统。
    如果配置文件不是正确的，那么GRUB将显示出错误，并请求输入。这点是很有帮助的，因为用户将能够看到问题发生在文件中的什么地方，并修复它。按下任意键，重新载入菜单接口，根据GRUB报告的错误，编辑菜单选项并纠正问题。如果这个修正失败了，那么错误将被报告，且GRUB将再次开始。
    四、GRUB的命令
    GRUB包含了许多不同的命令，它们可以在命令行接口中以交互的方式执行。其中的一些命令能接在命令名后面的选项，这些选项用空格隔开。
    下面的列表给出了最有用的一些命令：
    ·boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
    ·chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一扇区内的文件，使用+1作为文件名。
    ·displaymem - 显示当前内存的使用情况，这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。
    ·initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时，这是必需的。
    ·install p - 安装GRUB到系统的主引导记录。这个命令允许系统重启时出现GRUB接口。
    警告：install命令将覆盖主引导扇区中的其他信息。如果命令被执行，那么除了GRUB信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前，确定你对它有正确的了解。
    这条命令可以用几种不同的方式进行配置。然而，它都要求指定。表示一个设备，分区和文件，在那里可以找到第一个引导装载程序的映象，比如(hd0,0)/grub/stage1。另外，也指定了第一步引导装载程序应该被安装的硬盘，如(hd0)。
选项告诉第一步引导装载程序第二步引导装载程序位于什么地方，例如(hd0,0)/grub/stage2。p选项告诉install命令菜单配置文件被指定在部分，比如说(hd0,0)/grub/grub.conf。
    ·kernel - 当使用直接载入方式引导操作系统时，kernel命令指定内核从GRUB的根文件系统中载入。options选项是跟在kernel命令后面，在内核载入时传给内核。
    在Red Hat Linux中，一个kernel命令的例子看起来象下面的形式：
    kernel /vmlinuz root=/dev/hda5
    上面这行表明了vmlinuz文件是从GRUB的根文件系统载入的，如(hd0,0)。同时，一个选项也被传给了内核。它指出当Linux内核载入时，内核的根文件系统应该是位于hda5，第一个IDE硬盘的第五个分区。如果有必要的话，多个选项可以被放在这个选项后面。
    ·root - 将GRUB的根分区设置成特定的设备和分区，比如说(hd0,0)。并挂入这个分区，这样文件可以被读取。
    ·rootnoverify - 做root命令同样的事情，只是不挂入分区。
    除上面所述外，还有更多的命令可用。输入info grub，得到一个所有命令的完全列表。
    五、GRUB的菜单配置文件
    配置文件在GRUB菜单接口中，创建用于引导操作系统的列表。配置文件可以允许用户选择执行事先设置好的一组命令。这些命令既包括前面给出的命令，也包括一些只用于配置文件的命令。
    配置文件的专用命令
    下面这些命令只用于GRUB的菜单配置文件：
    ·color - 设定在菜单中使用的颜色，一种是作为前景色，一种作为背景色。可以简单地使用颜色名称，如red/black。比如：
    color red/black green/blue
    ·default - 默认项目的标题名称。如果菜单接口超时，那它将被载入。
    ·fallback - 当这个命令被使用时，如果第一次尝试失败，那么这个项目的标题名称将被试用。
    ·hiddenmenu - 这个命令被使用时，它不显示GRUB菜单接口，在超时时间过期后载入默认项。用户通过按[Esc]键，可以看到标准的GRUB菜单。
    ·password - 这个命令被使用时，它可以防止不知道口令的用户编辑菜单的项目。
    作为附加选项，可以在后面指定一个后备的菜单配置文件。因此，如果口令被知道，GRUB将重新启动第二步的引导装载程序，并使用这个后备的配置文件来建立菜单。如果这个后备文件不在命令中指出，那么知道口令的用户能够编辑当前的配置文件。
    ·timeout - 这个命令设定了在GRUB载入由default命令指定的项目前的时间间隔，以秒为单位。

    ·splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。
    ·title - 设定用来装载一个操作系统的一组特定命令的标题。
    字符&#35;用来在菜单配置文件放置注释。
配置文件的结构
    设置GRUB菜单接口全局参数的命令被放在文件的顶部，接下来的是用于各个操作系统引导的不同项目。
    一个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示：
    default=linux
    timeout=10
    color=green/black light-gray/blue
    &#35; section to load linux
    title linux
    root (hd0,1)
    kernel /vmlinuz root=/dev/hda5
    boot
    &#35; section to load Windows 2000
    title windows
    rootnoverify (hd0,0)
    chainloader +1
    这个文件告诉GRUB建立一个以Red Hat Linux为默认操作系统的菜单，设定10秒后自动引导。这里给出了2个部分，每个部分对应于一个操作系统项目，每个部分都包含了指向操作系统硬盘分区表的命令。
    在下面的附加资料中，将列出如何使用GRUB引导多种操作系统的参考资料。
    六、GRUB的附加资料
    这个部分只是对GRUB以及它的许多选项作一个介绍。如果想要更多的了解GRUB是如何工作的、如何在其他任务中配置它来引导非Linux操作系统，可以参考下面列出的一些资料。
    安装文档
    ·/usr/share/doc/grub-0.90 - /usr/share/doc/grub-0.90是GRUB文档在系统上的目录。
    ·在一个shell提示下，输入man grub命令可以查看GRUB的手册，它包括一个装载GRUB shell时所使用的选项的列表。
    ·在一个shell提示下，使用info grub命令可以得到GRUB的info页，它包括一个指南，一个用户参考手册，一个程序员参考手册，以及一个关于GRUB和它自己用法的FAQ文档。
    有用的一些站点
    ·http://www.gnu.org/software/grub - GNU GRUB 项目的主页。这个站点包含了GRUB发展状态的信息以及一个FAQ。
    ·http://www.uruk.org/orig-grub - 在这个项目被脱管到自由软件基金会进一步发展前的最初的GRUB文档。
    ·http://www.redhat.com/mirrors/LDP/HOWTO/mini/Multiboot-with-GRUB.html - 研究GRUB各种不同的用法，包括引导非Linux操作系统。
    ·http://www.linuxgazette.com/issue64/kohli.html - 一篇介绍性的文章，讨论在一个系统上GRUB配置，包括GRUB命令行选项的概述。
用安装盘来修复GRUB
一、本解决方案所要解决的问题：
我们可能在安装WIN时，把GRUB或者LILO从MBR上清除。如果在没有系统引导软盘只有安装盘的情况下，所采取的解决解决办法。
常用恢复MBR的办法还有一种是用升级系统的办法，这种办法经过验证，是极不可靠的。我们经过近二三十次的实践，证明效果几乎很少，这个办法用于没有安装 GRUB的还是可行的。如果已经把GRUB安装上，后来就重装WINDOW或者别的操作系统而带的LILO，而导致系统不能正常引导，这种办法就失效了。所以说，本方案最适合GRUB的恢复。
二、解决过程［以RedHat 7.3为例］
1.把安装盘的第一张放到光驱，然后重新启动机器，在BOIS中把系统用光驱来引导。
2.等安装界面出来后，按［F4］键，也就是linux rescue模式。
3.一系列键盘以及几项简单的配制，过后就［继续］了。。。这个过程，我不说了，比较简单。
4.然后会出现这样的字符
sh&#35;
5.我们就可以操作GRUB了。。。哈。。。只要能出现这样的，以后都是小KISS了，我就是不说 ，谁也能明白，地球人都知道了。。。。
sh&#35;grub
会出现这样的字符
grub>
我们就可以在这样的字符后面，输入
grub>root (hdX,Y)
grub>setup (hd0)
如果成功会有一个successful......
这里的X，如果是一个盘，就是0，如果你所安装的linux的根分区在第二个硬盘上，那X就是1了；Y，就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。
我来举个例子吧，如果以我的硬盘为例。我在第一个硬盘上装了XP，在第一个硬盘的hda9个装了RH73.我总共有两个硬盘。如果我把GRUB丢了，就用这种办法找回来。 如果你不知道你的linux安装到哪个分区上，也就是说，不知道这个Y是多少，这也不要紧，先输入root (hdX，然后用[TAB]来查看,一下就明白了...
操作如下：［前面开机启动的上面有说明］
sh&#35; grub
会出现下面的字样的
grub>
然后再这样操作,如果我知道我的linux装在第一个硬盘上，但我不知道装在哪个分区上，就可以先输入root (hd0,然后用［TAB］键来补齐，然后就明白了。
代码:
grub>root (hd0,8)
grub>setup (hd0)

请弟兄们结合文章及这个例子，仔细想一想。
我的第一个硬盘的分区情况是这样的。。
/dev/hda1 主分区 NTFS
/dev/hda2 扩展分区
/dev/hda5 NTFS
/dev/hda6 FAT
/dev/hda7 FAT
/dev/hda8 /boot ext3
/dev/hda9 / ext3
/dev/hda10 /swap ext3

最后就是按一下［RESET］键，重新启动，就OK了。。。。这步应该是最简单的吧。。。哈。。。。

比LILO更强劲的多操作系统引导程序GNU GRUB
多引导是目前大家讨论的比较热门的一个话题，随着LINUX和INTERNET的热潮席卷全世界，个人电脑已经不再是M&#36;的天下，对于操作系统我们拥有了更多的选择机会，FREEBSD,LINUX....一个硬盘上安装两到三个操作系统已经非常普遍，但是由于各个操作系统的引导过程机制不同，使我们在安装多系统时遇到了不少问题。我们面临着选择什么样的多引导程序的问题。
    LILO的确是一个选择，现在很多人也都是采用LILO解决多引导的问题。但是LILO并不易于使用，仍然不够灵活，而且从技术角度而言LILO仍然只是一个linux loader，它并不直接支持其他的操作系统，LILO对除LINUX外其他操作系统所做的只是将其引导块装入，而并不是将这些操作系统的内核装入，这样做的危险之处在于如果某个操作系统分区的引导块不小心被破坏了，那就可能导致这整个系统无法进入，甚至不得不重新安装，GRUB的推出就是企图改善这种一块硬盘上存在多个引导块的混乱局面。
    GNU针对多引导的问题推出了一个更加灵活和强大的多引导程序GRUB,提出了将引导程序和操作系统分离的解决方法，当然这主要是针对自由操作系统，但是GRUB仍然能够通过chainload引导其它非自由的操作系统。如果你仅仅安装LINUX和WINDOWS的话，的确，LILO已经足够使用，但是GRUB强于LILO之处在于还对GNU Mach,FreeBSD,　NetBSD和OpenBSD的直接支持，而且更加灵活。GRUB能够直接引导上述的几个操作系统，装入内核，不需要那些各自为政的引导块, 这样我们只要拥有GRUB，在安装上述那些操作系统时就可以更加放心，不用再被什么引导块被覆盖的问题大伤脑筋。GRUB灵活之处还在于提供了一个引导时功能强大的命令行模式，我们可以举一个例子来说明这样做给我们带来的灵活性：你只需要做一张带GRUB的引导软盘，不需要任何配置，你就可以用这张软盘引导，然后可以通过几条简单指令启动任意一台计算机上的绝大部分操作系统。显然这种灵活信是任何其他引导软件无法比拟的。
    首先，先大概了解一下计算机操作系统的引导过程：
    众所周知，计算机的最初启动是由BIOS控制的，在对一些硬件（如：内存、键盘等）初始化之后，它会试图加载硬盘的主引导记录（MBR）或软盘的引导扇区。MBR可通过两种方式运行，其一是定位到活动分区并加载相应的引导扇区，然后将控制权移给此引导扇区，由引导扇区完成该分区内操作系统的基本组件的加载；其二是直接从一指定分区中加载信息，并通过它装入任一分区的操作系统，诸如LILO、OS/2 boot loader等引导加载程序都可以配置成这种方式。
    和LILO一样，GRUB能够识别文件系统，GRBU能够理解内核的可执行文件格式，这样就可以不用关心内核文件的磁盘定位，而只需通过文件系统便可以找到内核文件，GRUB比LILO能够理解更多的文件系统类型，更多内核可执行文件格式，这样它就能够直接定位和引导不同操作系统的内核。
    GRBU最早是在1995年由Erich Boleyn编写的，其最初目的是为了能够从Utah Mach4微内核系统(即是现在的GNU Mach)中启动引导GNU Hurd操作系统。现在GRUB的基本目的是用于引导符合Multiboot标准的操作系统，Multiboot是一个用于定义符合多引导标准的操作系统规范，这个标准十分全面，但是目前支持它的操作系统仍不多，主要是GNU Hurd，所以现在仍不能达到GRUB所设想的操作系统引导界面大一统的局面，虽然这一天似乎很遥远，但是我们现在仍然可以享受GRUB给我们带来的强大功能和高度的灵活性。
    下面我们来看看GRUB的特点和安装使用方法：
一. GRUB的技术特点：
    1. 支持多可执行文件格式
      GRUB支持各种a.out格式和ELF格式。
    2. 支持不符合Multiboot标准的内核
      GRUB能够直接支持多种并不符合Multiboot标准的自由操作系统内核（主要是FreeBSD,NetBSD,OpenBSD和　linux）。也能通过chainload间接引导非开放的其他操作系统。
    3. 支持操作系统模块装载。
    4. 提供文本格式可手工修改的配置文件。
    5. 菜单界面
    6. 灵活的命令行界面
    7. 多文件系统识别
    能够透明地识别多种文件系统，现在能够识别的文件系统有BSD FFS,DOS FAT16,FAT32,Minix fs和Linux ext2fs.这个范围仍然在扩展。
    8. 支持压缩文件的解压缩。
      能够解压缩被gzip压缩的文件，并且这个识别和解压过程是自动的和对用户透明的，这个功能大大地减少了文件的大小，减少了load的时间，这个功能对于软盘上的系统尤其有用。
      可能有些内核模块在装载时就要求是压缩状态，这时解压此模块可能会画蛇添足，所以GRUB提供了另一个不进行解压缩的模块装载命令。
    9. 可以读取任何已安装的设备上的数据
      支持读取软盘，硬盘上的数据，不依赖于根设备上任何的设置。
    10. 和磁盘定位的表示方法无关。
    11. 能够使用BIOS所检测到的所有RAM.
      GRUB通常能够找到PC兼容机上的全部RAM，它采用一种先进的BIOS查询技术来找到所有的内存空间。
    12. 支持硬盘的LBA模式
      GRUB通过支持LBA模式，突破1024柱面的限制，能够访问8GB以外的全部硬盘空间。
    13. 支持网络
      虽然GRUB是一个基于磁盘的引导程序，但是它也支持网络功能，你可以通过TFTP协议从网络上得到操作系统映象文件并引导。
    GRUB的后继版本可能会包括一个内置的可编程语言来支持各种内核的引导参数，这还只是一个操作系统引导器吗？；），并且计划加入对非PC体系结构的支持。
二. 如何在LINUX下安装和使用GRUB
1. 下载并安装GRUB包：
    你可以到<ftp://alpha.gnu.org/gnu/grub/grub-0.5.94.tar.gz>得到GRUB，然后：

    ＃ zcat grub-0.5.94.tar.gz | tar xvf -
    会生成一个目录grub-0.5.94，再：
    ＃ cd grub-0.5.94
    ＃ ./configure
    ＃ make install
    这样GRUB就安装好了，下面你需要在你的硬盘或者软盘引导区上安装GRUB引导代码。
    a. 制作GRUB引导软盘：
    ＃ cd /boot/grub
    ＃ dd if=stage1 of=/dev/fd0 bs=512 count=1
    ＃ dd if=stage2 of=/dev/fd0 bs=512 seek=1
    b. 制作GRUB硬盘引导：
    重启动用GRUB引导软盘引导，或者你不想重启动也可以执行/usr/sbin/grub。两种情况都会进入命令行界面。 然后，我们首先要设置GRUB的“根设备”，也就是告诉GRUB安装所在的分区：
    grub> root (hd0,0)
    这里牵涉到GRUB的设备命名规则，将在下面介绍，此处（hd0,0）是指第一块硬盘的第一个分区。
    如果你不能够确定安装GRUB所在的分区号的话，可以通过find指令查找：
    grub> find /boot/grub/stage1
    GRUB将会查找文件/boot/grub/stage1并显示包含这个文件的设备名，当然就是我们安装GRUB所在的分区。下面就可以写引导记录了：
    grub> setup (hd0)
    这条命令将会在第一块硬盘的MBR安装GRUB引导，如果你不想在MBR安装GRUB，而是希望将GRUB安装在分区的引导扇区的话，你可以用下面指令指定安装设备：
    grub> setup (hd0,0)
    这将会在第一块硬盘的第一个分区的引导扇区安装GRUB。
    OK，现在你就可以重新启动由GRUB引导你的系统。
2. GRUB的设备命名规则：
    首先GRUB对设备的命名必须包含在小括号内，GRUB不区分IDE硬盘和SCSI硬盘，统一使用hdx,其中x指定BIOS中硬盘的编号，从零开始计数，而且通常计算机内的IDE硬盘编号在SCSI硬盘前。GRUB用fdx指定软盘设备，x是软盘驱动器号。具体命名规则如下：
    (fd0):第一软驱,GRUB还可以引导软盘上的操作系统
    (hd0,1): 第一块硬盘的第二个分区。
    (hd1,4): 第二块硬盘的第一个扩展分区，扩展的分区是从4开始编号的。
    (hd0,2,a): 专用于FreeBSD,FreeBSD有一个slice概念，把一个分区进一步分为几个slice,此处指明是第一块硬盘的第三个分区中的slice a。你也可以用(hd0,a)，这样GRUB就会在第一块硬盘上找到第一个FreeBSD分区的slice a。
    让我们再来看看GRUB对于磁盘文件的命名方法：
    (hd0,1)/vmlinuz，很简单只要指定分区号和文件的绝对路径名就可以了。
3. 现在来看看如何用GRUB引导我们的多操作系统,用GRUB引导后可以进入命令行模式或者菜单模式，你可以通过灵活的命令行模式选择引导各个分区的操作系统，指定引导参数。
    GRUB支持三种引导方法，第一种是直接引导操作系统内核，第二种是通过chainload进行间接引导。
    对于GRUB能够支持的LINUX,FreeBSD,OpenBSD,NetBSD,GUN Mach可以通过直接引导完成，不需要其他的引导扇区了，但是对于GRUB不直接支持的操作系统，需要用第二种方法chainload来完成。另外GRUB还支持网络引导，我们分别来看看这几种引导方法：
    （a） 直接引导：
    通常步骤如下：
    1.用root命令设置包含操作系统内核的根设备
    2.用kernel命令装载内核映象文件，如果这个内核引导的时候有参数的话，可以直接将参数加在内核文件名的后面。
    3.用module或modulenounzip装载内核模块。
    4.boot开始引导。
    （b） chainload引导：
    1.首先设置GRUB的根设备，用:
      grub> rootnoverify (hdx,y)
    2.开始引导
      grub> chainloader +1
      此处';+1';是指示GRUB读入分区的第一个扇区的引导记录。
    3.执行boot开始引导
    以上是一般的chainloader方式，对于DOS和WINDOWS，可以简单地用两条指令进行引导：
    chainloader (hdx,y)+1,然后boot，其中x,y用来指明所在分区号。
    （c） 从网络引导：
    为了使GRUB能够支持从网络引导，你需要在编译时打开网络支持选项，关于这个你可以参考源文件目录里的 `netboot/README.netboot为了从网络引导，你首先要在网络设置两个服务，首先是动态IP配置服务，可以是BOOTP，DHCP或 RARP服务器，另一个是TFTP服务。
    然后分别针对不同的服务器BOOTP，DHCP或RARP（三个选一个）运行bootp，dhcp,rarp。如果一切设置无误的话GRUB就会给出IP，IP netmask和TFTP服务器的IP和网关的IP地址。最后，从网上得到操作系统的映象文件，网络的设备名称是(nd).如下例：
    grub> bootp
    Probing... [NE*000]
    NE2000 base ...
    Address: 192.168.110.23 Netmask: 255.255.255.0
    Server: 192.168.110.14 Gateway: 192.168.110.1
    grub> root (nd)
    grub> kernel /tftproot/gnumach.gz root=sd0s1
    grub> module /tftproot/serverboot.gz
    grub> boot
4. 多操作系统引导实例:
GNU/Hurd
--------
因为GNU/Hurd是符合Multiboot规范的操作系统，所以非常容易引导:
grub> root (hd0,2)
如果你不记得Hurd所在的分区号的话，可以用find /boot/gnumach查找。
grub> kernel /boot/gnumach root=hd0s1
grub> module /boot/serverboot
grub> boot
GNU/Linux
---------
grub> root (hd1,3)
grub> kernel /vmlinuz root=/dev/hda1
如果你需要指定内核启动参数的话，可以直接加到命令的最后面如：
grub> kernel /vmlinuz root=/dev/hda1 vga=ext
如果你使用initrd的话，在kernel命令之后执行：
grub> initrd /initrd
grub> boot
FreeBSD
-------
GRUB能够直接装载.ELF和a.out两种格式的内核，但是由于FreeBSD的内核引导接口有时有较大的变动，
所以，对FreeBSD最安全的引导方法是引导/boot/loader
grub> root (hd0,a)
grub> kernel /boot/loader
grub> boot
NetBSD,OpenBSD,NetBSD
-------------------------------------
这三种系统的引导指令序列一样，如下：
    1. ';root';设置根设备.
    2. `kernel';装载内核.
    3. `boot';引导.
DOS/Windows
-----------
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> boot
SCO UnixWare
------------
grub> rootnoverify (hd1,0)
grub> chainloader --force +1
grub> makeactive //注意这条指令将设置UnixWare分区为活动分区，这样要求你的GRUB安装在MBR,否则下次启动时将直接进入UnixWare而不会进入GRUB grub> boot
    当然，如果每次引导都需要敲入命令的话实在是太麻烦了，因此，类似于LILO，GRUB提供了一个菜单方式，你需要一个配置文件将这些命令放入配置文件中就可以实现菜单方式的多引导，当然在菜单方式下你可以切换到命令模式下。GRUB引导时查找/boot/grub/menu.lst，如果存在这个文件的话，就根据这个文件生成一个引导菜单，menu.lst文件格式很简单，如下示例：
5. 菜单设置文件格式
&#35; 等待用户选择菜单项的时间（以秒计），超时则引导默认的选项
timeout 30
&#35; 默认选项，第一项
default 0
&#35; 如果第一项出错，则启动下面的后备选项
fallback 1
&#35; 引导 GNU Hurd，其中title就是菜单中显示的提示字符串
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz
&#35; 引导 Linux
title GNU/Linux
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1
&#35; 引导Mach (kernel映象文件放在软盘)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap
&#35; 引导 FreeBSD
title FreeBSD 3.4
root (hd0,2,a)
kernel /boot/loader
&#35; 引导 OS/2
title OS/2
root (hd0,1)
makeactive
chainloader +1
&#35; 引导 Windows NT 或者 Windows95，98
title Windows NT / Windows 95，98 boot menu
rootnoverify (hd0,0)
chainloader +1
&#35; 安装 GRUB 到硬盘MBR
title Install GRUB into the hard disk
root (hd0,0)
setup (hd0)
&#35; 改变显示菜单的颜色
title Change the colors
color light-green/brown blink-red/blue
6. GRUB的用户界面介绍
    GRUB的用户界面有三种：命令行模式，菜单模式和菜单编辑模式
    （a） 命令行模式：
    进入命令行模式后GRUB会给出一个命令提示符`grub>`，此时就可以键入命令，按回车执行。此模式下可执行的命令是在menu.lst中可执行的命令的一个子集。此模式下允许类似于Bash shell的命令行编辑功能：
<C-f>或<右箭头键> 光标右移一个字符
<C-b>或<左箭头键> 光标左移一个字符
<C-a><HOME> 到这一行的开头
<C-e>或<END> 到行尾
<C-d>或<DEL> 删除光标处的字符
<C-h>或<BackSpace> 删除光标左边的字符
<C-k> 删除光标右边的所有字符（包括光标处的字符）
<C-u> 删除光标左边的所有字符（包括光标处的字符）
<C-y> 恢复上次删除的字符串到光标位置
<C-p>或<向上键> 历史记录中的上一条命令
<C-n>或<向下键> 历史记录中的下一条命令
    在命令行模式下<tab>键有补全命令的功能，如果你敲入了命令的前一部分，键入<tab>系统将列出所有可能以你给出的字符串开头的命令。如果你给出了命令，在命令参数的位置按下<tab>键，系统将给出这条命令的可能的参数列表，具体的可用命令集将在后面给出。
    （b） 菜单模式
    当存在文件/boot/grub/menu.lst文件时系统启动自动进入此模式。菜单模式下用户只需要用上下箭头来选择他所想启动的系统或者执行某个命令块，菜单的定义在menu.lst文件中，你也可以从菜单模式按<c>键进入命令行模式，并且可以按<ESC>键从命令行模式返回菜单模式。菜单模式下按<e>键将进入菜单编辑模式。
    （c） 菜单编辑模式
    菜单编辑模式用来对菜单项进行编辑改变，其界面和菜单模式的界面十分类似，不同的是菜单中显示的是对应某个菜单项的命令列表。如果在编辑模式下按下 <ESC>,则取消所有当前对菜单的编辑并回到菜单模式下。在编辑模式下选中一个命令行，就可以对这条指令进行修改，修改完毕后按下< RET>，GRUB将提示你确认并完成修改。如果你想在当前命令列表中增加一条命令，按<o>在当前命令的下面增加一条指令，按 <O>在当前命令前处增加一条指令。按<d>删除一条指令。
三. 可用的命令列表
    下面是GRUB的可用命令列表:
    仅用于菜单的命令（不包括菜单项内部的启动命令）
==========================================
default num
设置菜单中的默认选项为num（默认为0,即第一个选项），超时将启动这个选项
fallback num
如果默认菜单项启动失败，将启动这个num后援选项。
password passwd new-config-file
关闭命令行模式和菜单编辑模式，要求输入口令，如果口令输入正确，将使用new-config－file
作为新的配置文件代替menu.lst，并继续引导。
timeout sec
设置超时，将在sec秒后自动启动默认选项。
title name ...
开始一个新的菜单项，并以title后的字串作为显示的菜单名。
在菜单（不包括菜单项内部的命令）和命令行方式下都可用的命令
======================================================
bootp
以BOOTP协议初始化网络设备
color normal [highlight]
    改变菜单的颜色，normal是用于指定菜单中非当前选项的行的颜色，highlight是用于指定当前菜单选项的颜色。如果不指定 highlight，GRUB将使用normal的反色来作为highlight颜色。指定颜色的格式是“前景色/背景色”，前景色和背景色的可选列表如下：
* black
* blue
* green
* cyan
* red
* magenta
* brown
* light-gray
下面的颜色只能用于背景色
* dark-gray
* light-blue
* light-green
* light-cyan
* light-red
* light-magenta
* yellow
* white
你可以在前景色前加上前缀"blink-",产生闪烁效果，你可以在menu.lst中加上下面这个选项来改变颜色效果：
title OS-BS like
color magenta/blue black/magenta
device drive file
在GRUB命令行中，把BIOS中的一个驱动器drive映射到一个文件file。你可以用这条命令创建一个磁盘映象或者当GRUB不能真确地判断驱动器时进行纠正。如下
grub> device (fd0) /floppy-image
grub> device (hd0) /dev/sd0
这条命令只能在命令行方式下使用，;) 是个例外。
dhcp
用DHCP协议初始化网络设备。目前而言，这条指令其实就是bootp的别名，效果和bootp一样。
hide partition
这条指令仅仅对DOS和WINDOWS有用，当在一个硬盘上存在多个DOS/WIN的主分区时，有时需要这条指令隐藏其中的一个或几个分区，即在分区表中设置“隐藏”位。
rarp
用RARP协议初始化网络设备。
setkey to_key from_key
改变键盘的映射表，将from_key映射到to_key,注意这条指令并不是交换键映射，如果你要交换两个键的映射，需要用两次setkey指令,如下：
grub> setkey capslock control
grub> setkey control capslock
其中的键必须是字母，数字或者下面的一些代表某一键的字符串：
`escape';, `exclam';, `at';, `numbersign';, `dollar';, `percent';,
`caret';, `ampersand';, `asterisk';, `parenleft';, `parenright';,
`minus';, `underscore';, `equal';, `plus';, `backspace';, `tab';,
`bracketleft';, `braceleft';, `bracketright';, `braceright';, `enter';,
`control';, `semicolon';, `colon';, `quote';, `doublequote';,
`backquote';, `tilde';, `shift';, `backslash';, `bar';, `comma';,
`less';, `period';, `greater';, `slash';, `question';, `alt';, `space';,
`capslock';, `FX'; (`X'; is a digit), and `delete';.
下面给出了它们和键盘上的键的对应关系：
`exclam';＝`!';
`at';＝`@';
`numbersign';＝`&#35;';
`dollar';＝`&#36;';
`percent';＝`%';
`caret';＝`^';
`ampersand';＝`&';
`asterisk';＝`*';
`parenleft';＝`(';
`parenright';＝`)';
`minus';＝`-';
`underscore';＝`_';
`equal';＝`=';
`plus';＝`+';
`bracketleft';＝`[';
`braceleft';＝`{';
`bracketright';＝`]';
`braceright';＝`}';
`semicolon';＝`;';
`colon';＝`:';
`quote';＝`';';
`doublequote';＝`"';
`backquote';＝``';
`tilde';＝`~';
`backslash';＝`\';
`bar';＝`|';
`comma';＝`,';
`less';＝`<';
`period';＝`.';
`greater';＝`>';
`slash';＝`/';
`question';＝`?';
`space';＝` ';
unhide partition
仅仅对DOS/WIN分区有效，清除分区表中的“隐藏”位。
仅用于命令行方式或者菜单项内部的命令
=======================================
blocklist file
显示文件file在所占磁盘块的列表。
boot
仅在命令行模式下需要，当参数都设定完成后，用这条指令启动操作系统
cat file
显示文件file的内容，可以用来得到某个操作系统的根文件系统所在的分区，如下：
grub> cat /etc/fstab
chainloader [`--force';] file
把file装入内存进行chainload,除了能够通过文件系统得到文件外，这条指令也可以用磁盘块列表的方式读入磁盘中的数据块，如';+1`指定从当前分区读出第一个扇区进行引导。如果指定了`--force`参数，则无论文件是否有合法的签名都强迫读入，当你在引导SCO UnixWare时需要用这个参数。
cmp file1 file2
比较文件的内容，如果文件大小不一致，则输出两个文件的大小，如下：
Differ in size: 0x1234 [foo], 0x4321 [bar]
如果两个文件的大小一致但是在某个位置上的字节不同，则打印出不同的字节和他们的位移：
Differ at the offset 777: 0xbe [foo], 0xef [bar]
如果两个文件完全一致，则什么都不输出。
configfile FILE
将FILE作为配置文件替代menu.lst。
embed stage1_5 device
如果device是一个磁盘设备的话，将Stage1_5装入紧靠MBR的扇区内。如果device是一个FFS文件系统分区的话，则将Stage1_5装入此分区的第一扇区。如果装入成功的话，输出写入的扇区数。
displaymem
显示出系统所有内存的地址空间分布图。
find filename
在所有的分区中寻找指定的文件filename，输出所有包含这个文件的分区名。参数filename应该给出绝对路径。
fstest
启动文件系统测试模式。打开这个模式后，每当有读设备请求时，输出向底层例程读请求的参数和所有读出的数据。输出格式如下：
先是由高层程序发出的分区内的读请求，输出：<分区内的扇区偏移，偏移(字节数)，长度(字节数)>之后由底层程序发出的扇区读请求，输出：[磁盘绝对扇区偏移] 可以用install或者testload命令关闭文件系统测试模式。
geometry drive [cylinder head sector [total_sector]]
输出驱动器drive的信息。
help [pattern ...]
在线命令帮助，列出符合pattern的命令列表，如果不给出参数，则将显示所有的命令列表。
impsprobe
检测Intel多处理器，启动并配置找到的所有CPU。
initrd file ...
为Linux格式的启动映象装载初始化的ramdisk，并且在内存中的Linux setup area中设置适当的参数。
install stage1_file [`d';] dest_dev stage2_file [addr] [`p';] [config_file] [real_config_file]
这是用来完全安装GRUB启动块的命令，一般很少用到。
ioprobe drive
探测驱动器drive所使用的I/O口，这条命令将会列出所有dirve使用的I/O口。
kernel file ...
装载内核映象文件(如符合Multiboot的a.out,ELF,Linux zImage或bzImage,FreeBSD a.out，NetBSD
a.out等等）。文件名file后可跟内核启动时所需要的参数。如果使用了这条指令所有以前装载的模块都要重新装载。
makeactive
使当前的分区成为活跃分区，这条指令的对象只能是PC上的主分区，不能是扩展分区。
map to_drive from_drive
映射驱动器from_drive到to_drive。这条指令当你在chainload一些操作系统的时候可能是必须的，这些操作系统如果不是在第一个硬盘上可能不能正常启动，所以需要进行映射。如下：
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
module file ...
对于符合Multiboot规范的操作系统可以用这条指令来装载模块文件file，file后可以跟这个module所需要的参数。注意，必须先装载内核，再装载模块，否则装载的模块无效。
modulenounzip file ...
同module命令几乎一样，唯一的区别是不对module文件进行自动解压。
pause message ...
输出字符串message，等待用户按任意键继续。你可以用<^G>(ASCII码007)使PC喇叭发声提醒用户注意。
quit
退出GRUB shell，GRUB shell类似于启动时的命令行模式，只是它是在用户启动系统后执行/sbin/grub才
进入，两者差别不大。
read addr
从内存的地址addr处读出32位的值并以十六进制显示出来。
root device [hdbias]
将当前根设备设为device，并且试图mount这个根设备得到分区大小。hdbias参数是用来告诉BSD内核在当前分区所在磁盘的前面还有多少个 BIOS磁盘编号。例如，系统有一个IDE硬盘和一个SCSI硬盘，而你的BSD安装在IDE硬盘上，此时，你就需要指定hdbias参数为1。
rootnoverify device [hdbias]
和root类似，但是不mount该设备。这个命令用在当GRUB不能识别某个硬盘文件系统，但是仍然必须指定根设备。
setup install_device [image_device]
安装GRUB引导在install_device上。这条指令实际上调用的是更加灵活但是复杂的install指令。如果
image_device也指定了的话，则将在image_device中寻找GRUB的文件映象，否则在当前根设备中查找。
testload file
这条指令是用来测试文件系统代码的，它以不同的方式读取文件file的内容，并将得到的结果进行比较，如果正确的话，输出的`i=X,filepos=Y`中的X,Y的值应该相等，否则就说明有错误。通常这条指令正确执行的话，之后我们就可以正确无误地装载内核。
uppermem kbytes
强迫GRBU认为高端内存只有kbytes千字节的内存，GRUB自动探测到的结果将变得无效。这条指令很少使用，可能只在一些古老的机器上才有必要。通常GRUB都能够正确地得到系统的内存数量。

    以上简要介绍了GRUB的安装使用方法，GRUB的功能实在是太多了，而且仍然在不断发展壮大，一个引导程序能做到这样一个程度实在令人赞叹，也许有一天GRUB会自带一个kernel也说不定，：） 。可能现在使用GRUB的人还不多，但是我使用的BluePoint系统就是使用的GRUB做多引导，之所以推荐给大家，也是因为我觉得GRUB是我用过最灵活方便的引导程序，如果你对LILO并不满意的话，不妨试试GRUB。


 Grub命令使用详解[教程]

从Red Hat Linux 7.2起，GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。相信LILO对于大家来说都是很熟悉的。这次Red Hat Linux用GRUB代替LILO，可见GRUB大有过人之处。不过，相对于LILO来说，大家对GRUB还是要陌生一些。本文将对GRUB的基本情况、术语、接口、命令以及配置文件做个介绍，希望对大家有所帮助。

    一、GRUB的概述

    在Red Hat linux装载一个系统前，它必须由一个引导装载程序（boot loader，启动管理程序)中的特定指令告诉它去引导系统。这个程序一般是位于系统的主硬盘驱动器或是其他知道如何去开始linux内核的媒介驱动器上。

    如果说一个x86系统只安装了Red Hat Linux而且只有一个版本的linux内核，那么通过引导装载程序开始Red Hat Linux的特定过程就不重要了。Red Hat Linux安装程序允许用户快速方便地配置引导装载程序存放在主硬盘驱动的主引导记录中来引导操作系统。

    然而，为了能从多个linux内核或其他操作系统引导，那么就很有必要了解Red hat linux用于提供必要的引导选项的方法，以及理解引导的过程与如何去改变。

    本文是讨论GRUB，它是Red Hat Linux用来在x86系统上装载操作系统的默认方法。同时，本文也将详细介绍用于控制引导过程的各种命令和配置选项。

    GRUB的定义

    GNU GRUB(GRand Unified Bootloader)是一个将引导装载程序安装到主引导记录的程序，主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是GRUB的命令环境。这使得用户能够开始操作系统的选择，在内核引导时传递特定指令给内核，或是在内核引导前确定一些系统参数（如可用的RAM大小）。

    x86的引导过程

    当一个x86机器启动后，系统BIOS开始检测系统参数，如内存的大小、日期和时间、磁盘设备、以及这些磁盘设备用于引导的顺序等。通常情况下，BIOS都是被配置成首先检查软驱或光驱（或两者都检查），然后再尝试从硬盘引导。如果在这些可移动的设备中，没有找到可引导的介质，那么BIOS通常是转向第一块硬盘最初的几个扇区，寻找用于装载操作系统的指令。这些最初的扇区－主引导记录－开始装载一个预选择操作系统的过程，一个操作系统选项贩GRUB菜单，或是一个执行特定选项的GRUB命令行接口。

    装载GRUB和操作系统的过程，包括以下几个操作步骤：

    1、装载基本的引导装载程序，这通常是第一步。基本引导装载程序必须是位于主引导扇区中一个非常小的空间，少于512字节。因此，基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。这主要是归结于在主引导扇区中没有足够的空间用于其他东西了。

    2、装载第二引导装载程序，这通常称为第二步。这第二引导装载程序实际上是引出更高级的功能　，以允许用户装载入一个特定的操作系统。在GRUB中，这步是让用户显示一个菜单或是输入命令。

    3、装载在一个特定分区上的操作系统，如linux内核。一旦GRUB从它的命令行或是配置文件中，接到开始操作系统的正确指令，它就寻找必要的引导文件，然后把机器的控制权移交给操作系统。
注意

    在一些文件系统以及文件系统的配置中，可能需要一个1.5步的文件，用来连接基本引导程序与第二引导程序之间的差异。

    举个例子来说，如果第二步中的引导装载程序文件位于一个使用了第一步引导装载程序所不能访问的文件系统的分区中，那么就可能需要指示第一步引导装载程序，从1.5步文件中载入附加的指令来读取第二步引导装载程序的文件。更多相关的信息，请参考GRUB的信息页。

    前面所提到的引导方法被称为直接装载。因为这种方法中使用的是直接装载操作系统的指令，没有用到任何在引导装载程序和操作系统主文件（如内核）之间的中间代码。然而，不同操作系统所采用的引导过程可能会与上面提到的有一些细微的不同。例如，微软的DOS和Windows操作系统在安装时，倾趋于完全重写主引导记录，而不是合并当前的主引导记录的配置。这将破坏掉其他操作系统保存在主引导记录中的所有信息，如Red Hat Linux。微软操作系统，还有一些其他的专有操作系统，都是使用一种称为链式装载的引导方法来启动的。在这种方法中，主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。

    GRUB支持直接和链式装载的引导方法。GRUB能用于几乎所有操作系统，绝大多数流行的文件系统，以及几乎所有的系统BIOS所能识别的硬盘。

    GRUB的特性

    GRUB包含许多特性，这使得GRUB比其他可用的引导装载程序更加优越。下面列出一些比较重要的特性：
    ·GRUB在x86机器上，提供一个真正基于命令行的，先于操作系统(pre-OS)的环境。它对于用确定的选项装载操作系统或收集系统信息方面，提供了最大程度的适应性。许多非x86的体系结构已经使用先于操作系统环璄许多年了，它提供控制系统如何从一个命令行引导。当LILO或其他x86引导装载程序使用了一些命令特性的时候，GRUB已经包含了许多这方面的特性。
    ·GRUB支持逻辑块寻址(LBA)方式。LBA将用于寻找驱动器上文件的地址转换工作置于驱动器的硬件中，它被用在许多IDE和所有的SCSI硬盘中。在使用LBA之前，硬盘驱动器遇到一个1024柱面的限制，即BIOS不能找到在1024柱面后的文件（比如一个引导装载程序或是内核文件）。只要系统BIOS能支持LBA模式（大多数都支持），那么LBA就允许GRUB超越1024柱面的限制，引导操作系统。
    ·GRUB的配置能在每次系统引导时被读取。这就避免了用户每次改变引导选项时都要重写一次主引导记录。大多数的引导装载程序都不能很老道地读取配置文件，并使用它们来设置引导选项。比如说，用户必需改变一个LILO的配置文件，然后运行一个命令将新的配置数据重写回系统的主引导记录。这种方法比GRUB所采用　的方法更加危险，因为一个错误配置的主引导记录将让系统无法引导。在使用GRUB中，如果说配置文件被错误配置并且引导，那它也仅仅简单地转到一个默认的命令行，允许用户手工输入命令来运行操作系统。除开更新系统引导的第一步、第二步、或是菜单配置文件的位置，主引导记录是不会被触及到的，而这种情况是很少发生的。

    注意：

    当GRUB的配置文件发生改变时，没有必要重新启动GRUB。所有的改变都能被自动地检测到。如果GRUB被重新启动，那么用户将退回到命令行方式的GRUB外壳下。

    安装GRUB

    如果在Red Hat Linux的安装过程中，GRUB没有被安装，下面将说明如何安装它，并将它设为默认的引导装载程序。

    注意：如果LILO已经被安装，并且是当前的系统引导装载程序，那并没有必要为了使用GRUB而删除它。GRUB一旦安装后，将做为系统默认的引导装载程序。

    首先，获取最新可用的GRUB包。在Red Hat Linux安装光盘上的GRUB包也可以使用。

    其次，在一个外壳提示下，运行命令/sbin/grub-install ，这里的是GRUB将要被安装的位置。比如说：/sbin/grub-install /dev/hda

    最后，重新引导系统。GRUB图形引导装载菜单将出现。　　二、GRUB的术语

    在使用GRUB前，最重要的事情之一就是理解这个程序是如何引用设备的，如系统硬盘驱动器、分区等。对于配置GRUB实现多操作系统的引导，这方面的信息是很重要的。

    设备名称

    系统的第一个硬盘驱动器被GRUB称为(hd0)。在它上面的第一个分区被称为(hd0,0)，第二个硬盘驱动器上的第5个分区被称为(hd1,4)。通常使用GRUB时，文件系统习惯上采用下面的方式命名：

    (,)
    在设备命名中，圆括号和逗号是很重要的。指出是一个硬盘(hd)还是一个软盘(fd)被指定。

    是依照系统BIOS而确定的设备号，从0开始。基本IDE硬盘被标为0，第二IDE硬盘被标为1。这个排序大体上等同于linux内核用字母安排设备的顺序，只是在hda中的a变成了0，hdb中的b变为了1，依次类推。

    注意：GRUB用于设备的命名系统是从0开始，而不是1。这常常是GRUB新手们常犯的最普遍的错误。
    指在一块硬盘上一个分区的编号。类似于，分区的编号也是从0开始。虽然大多数的分区可以用数字指定，但是如果系统使用的是BSD分区，那么它们还是用字母来指定，如a或c。

    GRUB在命名设备和分区时，使用下面的规则：

    ·系统使用IDE硬盘或SCSI硬盘，都没有关系。所有的硬盘都是用hd开始。软盘用fd开头。
    ·当指定整个硬盘，不考虑它的分区时，简单地将逗号和分区编号取消即可。当告诉GRUB配置一个特定硬盘的主引导扇区时，这一点很重要。比如，(hd0)指定第一个设备，(hd3)指定第四个设备。
    ·如果一个系统有多个驱动设备，知道由BIOS确定的驱动器顺序就很重要了。如果系统只有IDE或SCSI驱动器，那是相当简单的。但是如果有多个驱动器混合时，这就变得令人混乱了。

    文件名称

    当在GRUB中输入包括文件的命令时，比如在多操作系统中使用一个菜单列表，文件名必须直接在设备和分区后指定。一个绝对文件名的格式如下：

    (,)/path/to/file

    大多数的时候，用户可以通过在分区上的目录路径后加上文件名来指定文件。这种方法是直接了当的。

    另外，我们也可以将不在文件系统中出现的文件指定给GRUB，比如在一个分区最初几块扇区中的链式引导装载程序。为了指定这些文件，需要提供一个块列表(blocklist)，由它来一块一块地告诉GRUB文件在分区中的位置。当一个文件是由几个不同的块组合在一起时，需要有一个特殊的方式来写块列表。每个文件片断的位置由一个块的偏移量以及从偏移点起始的块数来描述，这些片断以一个逗号分界(comma-delimited)的顺序组织在一起。

    考虑下面的块列表：

    0+50,100+25,200+1

    上面这个块列表告诉GRUB使用一个文件，这个文件起始于分区的第一块，使用了第0块到第49块，第99块到124块，以及第199块。

    当使用GRUB装载诸如微软Windows这样采用链式装载方式的操作系统时，知道如何写块列表是相当有用的。如果从第0块开始，那么可以省略块的偏移量。作为一个例子，当链式装载文件在第一硬盘的第一个分区时，可以使用下面的命名：

    (hd0,0)+1

  下面给出一个带类似块列表名称的chainloader命令。它是在设置正确的设备和分区作为根后，在GRUB命令行中给出的。

    chainloader +1
    GRUB的根文件系统

    一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的，这一点需要记住。

    GRUB的根文件系统是用于一个特定设备的根分区。GRUB使用这个信息来挂入(mount)这个设备并从它上面载入文件。

    在Red Hat Linux中，一旦GRUB载入它自己的包含Linux内核的根分区，那么kernel命令就可以将内核文件的位置作为一个选项来执行。一旦Linux内核引导，它就设定自己的根文件系统，此时的根文件系统就是大多数人用来与Linux联系的了。最初的GRUB根文件系统以及它的挂入都被去掉，它们仅存在于用来引导内核文件。

    关于根和内核命令的更多信息，可以参考后面的命令部分。

三、GRUB的接口

    GRUB主要有三个强大的接口，它们提供了不同级别的功能。每个接口都允许用户引导操作系统，甚至可以在处于GRUB环境下的接口之间移动。

    菜单接口

    如果GRUB是由Red Hat Linux的安装程序自动配置的，那么它默认的显示接口是菜单接口。在系统第一次启动后，一个操作系统或内核的菜单（事先已经用它们各自的引导命令配置好）将一个按名称排列的列表保存在这个接口中。使用箭头键选择一个非默认选项，然后按回车键来引导它。如果不是这样，一个记时器可能已经被设置，那么GRUB将启动装载那个默认的选项。

    在菜单接口上，按[e]键，对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。

    菜单项目编辑器接口

    在引导装载菜单中按[e]键，就进入了菜单项目编辑器。用于项目的GRUB命令就显示在这里。在引导操作系统前，用户可以更改这些命令，添加(加在当前行后面，用[o]键；加在当前行前，用[0])，编辑(用[e]键)，删除(用[d]键)。

    在所有的改变都完成后，用[b]键来执行这些命令，并引导操作系统。[Esc]键来放弃这些修改，将重新入标准的菜单接口。[c]键用来载入命令行接口。

    命令行接口

    命令行是GRUB最基本的接口，但它也是被授予了最大控制能力的接口。在命令行接口中，输入任何相关的GRUB命令，再回车就可以执行了。这个接口的功能有点类似于shell的功能，比如[Tab]键完成，前后文提示，输入命令时的[Ctrl]键组合，如[Ctrl]-[a]移到行的开头，[Ctrl]-[e]移到行的结尾。另外，箭头键，[Home],[End],[Delete]键与bash shell中一样用法。

    接口使用的顺序

    当GRUB环境开始载入第二步引导装载程序时，它寻找自己的配置文件。当找到配置文件后，它使用这个配置文件建立一个要载入的操作系统的菜单列表， 然后显示引导菜单接口。

    如果配置文件没有被找到，或者如果配置文件不能读取，那么GRUB将载入命令行接口，以允许用户手工输入必要的命令来启动操作系统。

    如果配置文件不是正确的，那么GRUB将显示出错误，并请求输入。这点是很有帮助的，因为用户将能够看到问题发生在文件中的什么地方，并修复它。按下任意键，重新载入菜单接口，根据GRUB报告的错误，编辑菜单选项并纠正问题。如果这个修正失败了，那么错误将被报告，且GRUB将再次开始。

    四、GRUB的命令

    GRUB包含了许多不同的命令，它们可以在命令行接口中以交互的方式执行。其中的一些命令能接在命令名后面的选项，这些选项用空格隔开。

    下面的列表给出了最有用的一些命令：

    ·boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
    ·chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一扇区内的文件，使用+1作为文件名。
    ·displaymem - 显示当前内存的使用情况，这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。
    ·initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时，这是必需的。
    ·install p - 安装GRUB到系统的主引导记录。这个命令允许系统重启时出现GRUB接口。

    警告：install命令将覆盖主引导扇区中的其他信息。如果命令被执行，那么除了GRUB信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前，确定你对它有正确的了解。

    这条命令可以用几种不同的方式进行配置。然而，它都要求指定。表示一个设备，分区和文件，在那里可以找到第一个引导装载程序的映象，比如(hd0,0)/grub/stage1。另外，也指定了第一步引导装载程序应该被安装的硬盘，如(hd0)。

选项告诉第一步引导装载程序第二步引导装载程序位于什么地方，例如(hd0,0)/grub/stage2。p选项告诉install命令菜单配置文件被指定在部分，比如说(hd0,0)/grub/grub.conf。

    ·kernel - 当使用直接载入方式引导操作系统时，kernel命令指定内核从GRUB的根文件系统中载入。options选项是跟在kernel命令后面，在内核载入时传给内核。

    在Red Hat Linux中，一个kernel命令的例子看起来象下面的形式：

    kernel /vmlinuz root=/dev/hda5

    上面这行表明了vmlinuz文件是从GRUB的根文件系统载入的，如(hd0,0)。同时，一个选项也被传给了内核。它指出当Linux内核载入时，内核的根文件系统应该是位于hda5，第一个IDE硬盘的第五个分区。如果有必要的话，多个选项可以被放在这个选项后面。

    ·root - 将GRUB的根分区设置成特定的设备和分区，比如说(hd0,0)。并挂入这个分区，这样文件可以被读取。
    ·rootnoverify - 做root命令同样的事情，只是不挂入分区。

    除上面所述外，还有更多的命令可用。输入info grub，得到一个所有命令的完全列表。

    五、GRUB的菜单配置文件

    配置文件在GRUB菜单接口中，创建用于引导操作系统的列表。配置文件可以允许用户选择执行事先设置好的一组命令。这些命令既包括前面给出的命令，也包括一些只用于配置文件的命令。

    配置文件的专用命令

    下面这些命令只用于GRUB的菜单配置文件：

    ·color - 设定在菜单中使用的颜色，一种是作为前景色，一种作为背景色。可以简单地使用颜色名称，如red/black。比如：
    color red/black green/blue
    ·default - 默认项目的标题名称。如果菜单接口超时，那它将被载入。
    ·fallback - 当这个命令被使用时，如果第一次尝试失败，那么这个项目的标题名称将被试用。
    ·hiddenmenu - 这个命令被使用时，它不显示GRUB菜单接口，在超时时间过期后载入默认项。用户通过按[Esc]键，可以看到标准的GRUB菜单。
    ·password - 这个命令被使用时，它可以防止不知道口令的用户编辑菜单的项目。

    作为附加选项，可以在后面指定一个后备的菜单配置文件。因此，如果口令被知道，GRUB将重新启动第二步的引导装载程序，并使用这个后备的配置文件来建立菜单。如果这个后备文件不在命令中指出，那么知道口令的用户能够编辑当前的配置文件。

    ·timeout - 这个命令设定了在GRUB载入由default命令指定的项目前的时间间隔，以秒为单位。

    ·splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。
    ·title - 设定用来装载一个操作系统的一组特定命令的标题。

    字符#用来在菜单配置文件放置注释。
  配置文件的结构

    设置GRUB菜单接口全局参数的命令被放在文件的顶部，接下来的是用于各个操作系统引导的不同项目。

    一个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示：

    default=linux
    timeout=10
    color=green/black light-gray/blue
    # section to load linux
    title linux
    root (hd0,1)
    kernel /vmlinuz root=/dev/hda5
    boot
    # section to load Windows 2000
    title windows
    rootnoverify (hd0,0)
    chainloader +1

    这个文件告诉GRUB建立一个以Red Hat Linux为默认操作系统的菜单，设定10秒后自动引导。这里给出了2个部分，每个部分对应于一个操作系统项目，每个部分都包含了指向操作系统硬盘分区表的命令。

    在下面的附加资料中，将列出如何使用GRUB引导多种操作系统的参考资料。

    六、GRUB的附加资料

    这个部分只是对GRUB以及它的许多选项作一个介绍。如果想要更多的了解GRUB是如何工作的、如何在其他任务中配置它来引导非Linux操作系统，可以参考下面列出的一些资料。

    安装文档
    ·/usr/share/doc/grub-0.90 - /usr/share/doc/grub-0.90是GRUB文档在系统上的目录。
    ·在一个shell提示下，输入man grub命令可以查看GRUB的手册，它包括一个装载GRUB shell时所使用的选项的列表。
    ·在一个shell提示下，使用info grub命令可以得到GRUB的info页，它包括一个指南，一个用户参考手册，一个程序员参考手册，以及一个关于GRUB和它自己用法的FAQ文档。

    有用的一些站点

    ·http://www.gnu.org/software/grub - GNU GRUB 项目的主页。这个站点包含了GRUB发展状态的信息以及一个FAQ。
    ·http://www.uruk.org/orig-grub - 在这个项目被脱管到自由软件基金会进一步发展前的最初的GRUB文档。
    ·http://www.redhat.com/mirrors/LDP/HOWTO/mini/Multiboot-with-GRUB.html - 研究GRUB各种不同的用法，包括引导非Linux操作系统。
    ·http://www.linuxgazette.com/issue64/kohli.html - 一篇介绍性的文章，讨论在一个系统上GRUB配置，包括GRUB命令行选项的概述。


 GRUB三步通

文章作者：
责任编辑：　录入时间：2004-10-18 0:24:39 来源：
频道声明：本频道的文章除部分特别声明禁止转载的专稿外，可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意.

##################
# GRUB的优点 #
##################
GRUB 是引导装入器(boot loader) -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统，如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS，以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务，但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性，那么就可能锁住系统，而无法引导计算机。另外，好的引导装入器可以给您灵活性，让您可以在计算机上安装多个操作系统，而不必处理不必要的麻烦。
GRUB 是一个很棒的boot loader。它有许多功能，可以使引导过程变得非常可靠。例如，它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。这就意味着无论怎样它总能找到内核。另外，GRUB 有一个特殊的交互式控制台方式，可以让您手工装入内核并选择引导分区。这个功能是无价的：假设 GRUB 菜单配置不正确，但仍可以引导系统。哦，对了 -- GRUB 还有一个彩色引导菜单。

更令人惊讶的是，这是一个自由软件！！！

##################
# GRUB菜单 #
##################
先来看一个例子，这是位于/boot/grub/目录下的menu.lst文件。
此文件将在开机是产生一个菜单，包含有Debian linux,Windows2000,RedHat linux和 Mandrake linux,共四个选择项。我一共分了8个区，一个fat16（0x6），一个ntfs（0x7），三个ext2fs分区（0x83），一个swap分区（0x82）。ntfs用来装win2000，三个ext2fs装了三个linux，c盘fat16分区没有装任何东西。
＃例子由此开始

＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃
＃ ＃
＃ 一个GRUB configure 的例子 ＃
＃ ＃
＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃＃

timeout 10
default 2

# --> Debian linux <--

title Debian linux
root (hd0,2)
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
initrd /boot/initrd-2.2.18.gz

# --> Debian END <--

# --> Windows 菜单选项 <--

title Windows2000
root (hd0,0)
chainloader +1

# --> Winddows 结束 <--

# --> RedHat linux 菜单选项 <--

title RedHat linux
root (hd0,8)
chainloader +1 # 在硬盘主引导分区装了lilo，所以也用了chainloader。

# --> RedHat linux 结束 <--

# --> Mandrake linux 菜单选项 <--

title Mandrake linux
root (hd0,5)
kernel /boot/vmlinuz-2.4.3-20mdk root=/dev/hda6 ro
initrd /boot/initrd-2.4.3-20mdk.img

# --> Mandrake linux 结束 <--

＃例子到此结束

以符号井＂＃＂开头的行表示被注释掉，没有任何意义。

timeout表示默认等待的时间，这儿是10秒钟。超过10秒，用户还没有作出选择的话，系统将自动选择默认的操作系统。

默认的操作系统就是由default控制的。default后加一个数字n，表明是第n＋1个。需要注意的是，GRUB中，计数是从0开始的，第一个硬盘是hd0，第一个软驱是fd0，等等。所以，default 2 表示默认的操作系统在这儿是 Redhat linux。

接下来，正如你所想象的，title表示的是“Debian linux”菜单项。root (hd0,2)表示第一个硬盘,第三个分区。这儿的root 于linux的root分区及其不同，此root非彼root也！

在 Linux 中，当谈到 "root" 文件系统时，通常是指主 Linux 分区。但是，GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 Linux 内核的分区。这可能是您的正式 root 文件系统，也可能不是。我们讨论的是 GRUB，需要指定 GRUB 的 root 分区。进入 root 分区时，GRUB 将把这个分区安装成只读型，这样就可以从该分区中装入 Linux 内核。GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区。

到目前为止，您可能会感到一点疑惑，因为 GRUB 所使用的硬盘／分区命名约定与 Linux 使用的命名约定不同。在 Linux 中，第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外，硬盘和分区都用逗号分隔，整个表达式用括号括起。现在，可以发现如果要引导 Linux 硬盘 hda5，应输入 "root (hd0,4)"。

知道了内核在哪儿，还要具体指出哪个文件是内核文件，这就是kernel的工作。
kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro说明/boot/vmlinuz-2.2.18 就是要载入的内核。后面的都是传递给内核的参数。root=/dev/hda3就是linux的硬盘分区表示法，ro是以readonly的意思。
initrd用来初始的linux image，并设置相应的参数。

是不是感觉很简单啊！再来看一看windows的定义段吧。
这里，我添加了一项来引导 Windows2000。要完成此操作，GRUB 使用了“链式装入器”(chainloader)。链式装入器从分区 (hd0,0) 的引导记录中装入 win2000 自己的引导装入器，然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。

我的RedHat linux在硬盘主引导分区装了lilo，所以也用了chainloader。

GRUB的配置文件要简单就这么简单，如果你要更个性化一点，试一试把“color light-gray/blue ”加在default语句的下面，下一次启动GRUB时，看看有什么变化，再试一试“color light-blue/red",惊喜吗？ 有趣吧!

######################
# GRUB的交互性 #
######################

GRUB 最好的优点之一就是其强健的设计 -- 在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置，不必重新安装 GRUB。事实上，如有必要，只要更新 menu.lst 文件即可，一切将保持正常。

只有少数情况下，才需要将 GRUB 引导装入器重新安装到引导记录。首先，如果更改 GRUB root 分区的分区类型（例如，从 ext2 改成 ReiserFS），则需要重新安装。或者，如果更新 /boot/grub 中的 stage1 和 stage2 文件，由于它们来自更新版本的 GRUB，很有可能要重新安装引导装入器。其它情况下，可以不必理睬！

GRUB的最大的特点就是交互性特别强。在开机时，按一下“c”，将进入GRUB 控制台。显示如下：

GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub>

欢迎使用 GRUB 控制台。现在，再研究命令：
我将通过GRUB 控制台绕过lilo来启动RedHat linux，

grub> root (h

现在，按一次 Tab 键。如果系统中有多个硬盘，GRUB 将显示可能完成的列表，从 "hd0" 开始。如果只有一个硬盘，GRUB 将插入 "hd0,"。如果有多个硬盘，继续进行，在 ("hd2") 中输入名称并在名称后紧跟着输入逗号，但不要按 Enter 键。部分完成的 root 命令看起来如下：

grub> root (hd0,

现在，继续操作，再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表，以及它们的文件系统类型。在我的系统中，按 Tab 键时得到以下列表：

grub> root (hd0, (tab，按tab一下键)
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0x6
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x7
Partition num: 5, Filesystem type is ext2fs, partition type 0x83
Partition num: 6, Filesystem type is fat, partition type 0xb
Partition num: 7, Filesystem type is fat, partition type 0xb
Partition num: 8, Filesystem type is ext2fs, partition type 0x83
Partition num: 9, Filesystem type unknown, partition type 0x82

如您所见，GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些，只需要好好理解 GRUB 新奇的硬盘和分区命名语法，然后就可以继续操作了
grub> root (hd0,8)
现在已安装了 root 文件系统，到装入内核的时候了

grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
[Linux-bzImage, setup=0x1200, size=0xe1a30]

您已经安装了 root 文件系统并装入了内核。现在，可以引导了。只要输入 "boot"，Linux 引导过程就将开始。是不是很cool啊，GRUB的menu.lst更像一个linux下的脚本程序。

#####################
# GRUB启动盘 #
#####################
要制作引导盘，需执行一些简单的步骤。首先，在新的软盘上创建 ext2 文件系统。然后，将其安装，并将一些 GRUB 文件复制到该文件系统，最后运行 "grub" 程序，它将负责设置软盘的引导扇区。准备好了吗？

将一张空盘插入 1.44MB 软驱，输入：

# mke2fs /dev/fd0
创建了 ext2 文件系统后，需要安装该文件系统：

# mount /dev/fd0 /mnt/floppy
现在，需要创建一些目录，并将一些关键文件（原先安装 GRUB 时已安装了这些文件）复制到软盘：

# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一个步骤，就能得到可用的引导盘。

在linux bash中，从 root 用户运行“grub”，该程序非常有趣并值得注意，因为它实际上是 GRUB 引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行，您仍可以运行 GRUB 并执行某些任务，而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。
在 grub> 提示符处，输入：

grub> root (fd0)
grub> setup (fd0)
grub> quit

现在，引导盘完成了。
如果要把GRUB装到硬盘上，也很容易。这个过程几乎与引导盘安装过程一样。首先，需要决定哪个硬盘分区将成为 root GRUB 分区。在这个分区上，创建 /boot/grub 目录，并将 stage1 和 stage2 文件复制到该目录中，可以通过重新引导系统并使用引导盘，或者使用驻留版本的 GRUB 来执行后一步操作。在这两种情况下，启动 GRUB，并用 root 命令指定 root 分区。例如，如果将 stage1 和 stage2 文件复制到 hda5 的 /boot/grub 目录中，应输入 "root (hd0,4)"。接着，决定在哪里安装 GRUB -- 在硬盘的 MBR，或者如果与 GRUB 一起使用另一个“主”引导装入器，则安装在特定分区的引导记录中。如果安装到 MBR，则可以指定整个磁盘而不必指定分区，如下（对于 hda）：

grub> setup (hd0)

如果要将 GRUB 安装到 /dev/hda5 的引导记录中，应输入：

grub> setup (hd0,4)

现在，已安装 GRUB。引导系统时，应该立即以 GRUB 的控制台方式结束（如果安装到 MBR）。现在，应创建引导菜单，这样就不必在每次引导系统时都输入那些命令。

小结：在这里只是介绍了 GRUB 的一部分。例如，可以使用 GRUB 来执行网络引导，引导 BSD 文件系统，或更多操作。另外，GRUB 有许多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述，请阅读 GRUB 出色的 GNU 文档。只要在 bash 提示中输入 "info grub" 就可以阅读该文档。

有用的一些信息：xosl是一个支持鼠标的图形界面boot loader，可以于system command和boot manager相比，
网址是www.xosl.org。

GRUB的下载：ftp://alpha.gnu.org/gnu/grub/


Grub相关安装配置及使用实例汇总讲析

    (一)安装linux时安装grub

    安装redhat linux时会提示安装引导程序，如果选择grub为引导程序,建议把grub安装到硬盘的引导扇区MBR.grub 还可以引导其它操作系统，如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS，以及 Windows 95、98、NT、2000、XP。

    (二)grub的配置

    一旦选择了grub为引导程序，下面我们来了解一下它的配置。/boot/grub/grub.conf是grub产生一个引导选择菜单以及设置一些选项。下面是我的grub.conf:

    #==========例子开始==========

    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub
    after making changes to this file
    # NOTICE: You have a /boot partition. This means that
    # all kernel and initrd paths are relative to /boot/, eg.
    # root (hd0,6)
    # kernel /vmlinuz-version ro root=/dev/hda10
    # initrd /initrd-version.img
    #boot=/dev/hda
    default=0
    timeout=10
    splashimage=(hd0,6)/grub/splash.xpm.gz
    # --> Redhat Linux 8.0 <--
    title Red Hat Linux (2.4.18-14)
    root (hd0,6)
    kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
    initrd /initrd-2.4.18-14.img
    # --> Microsoft Windows XP <--
    title Microsoft Windows XP
    rootnoverify (hd0,0)
    chainloader +1

    #===========例子结束==========

    配置选项解释:

    以"#"开头的是注释行。我这里有两个操作系统，分别是Red Hat Linux和Microsoft Windows XP。其中，timeout标识默认等待时间，我这设置为10秒，超过10秒用户还没作出选择的话，将自动选择默认的操作系统(我这里默认的是Redhat linux 8.0)

    默认的操作系统是由default一项来控制的，default后的数字表明第几个是默认的，这里0表示第一个，1表示第二个。

    所以如果你想修改默认的操作系统，就修改default后的数字。title一项是设置操作系统的名称，grub不支持中文(有点遗憾)。splashimage一项指定grub界面的背景图片，有兴趣的朋友可以修改grub的背景。

    root (hd0，6)标识从第一个硬盘，第7个分区来启动搜索引导内核。注意这儿的root与linux的root分区不同，此root非彼root也！grub的硬盘标识方法与linux的有点不同。在linux中第一个主分区为hda1，第二个主分区为hda1，第一个逻辑分区为hda5，而在grub中是以(hdx，y)来标识的，如第一个主分区为(hd0，0)第一个逻辑分区为(hd0，1)依此类推。

    所以这儿root后面的是你的/boot所在分区标识。知道了内核在哪儿，还要具体指出哪个文件是内核文件，这就是ke

    rnel的工作。kernel /vmlinuz-2.2.18-14 ro

    root=LABEL=/。说明/boot/vmlinuz-2.2.18-14就是要载入的内核。后面的都是传递给内核的参数。

    ro是以readonly的意思。注意我这里内核前面的路径是"/"，因为我的boot单独分了一个区，如果你没有为boot单独分区，那么内核前面的路径就是"/boot"。initrd用来初始的linux image，并设置相应的参数。

    再来看一看windows的定义段吧。这里，我添加了一项来引导 WindowsXP。要完成此操作，GRUB使用了"链式装入器"(chainloader)。链式装入器从分区 (hd0，0) 的引导记录中装入 winXP 自己的引导装入器，然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。

    这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。如果你在计算机中装有win98，winme，win2k，winxp的话，chainloader会把引导权交与win的NTLoader来引导。

    (三)Grub启动盘的制作

    要制作引导盘，需执行一些简单的步骤。首先，在新的软盘上创建 ext2 文件系统。然后，将其安装，并将一些 GRUB 文件复制到该文件系统，最后运行 "grub" 程序，它将负责设置软盘的引导扇区。

    将一张空盘插入 1.44MB 软驱，输入：

    # mke2fs /dev/fd0
    创建了 ext2 文件系统后，需要安装该文件系统：

    # mount /dev/fd0 /mnt/floppy
    现在，需要创建一些目录，并将一些关键文件
    （原先安装 GRUB 时已安装了这些文件）复制到软盘：

    # mkdir /mnt/floppy/boot
    # mkdir /mnt/floppy/boot/grub
    # cp /boot/grub/stage1 /mnt/floppy/boot/grub
    # cp /boot/grub/stage2 /mnt/floppy/boot/grub

    再有一个步骤，就能得到可用的引导盘。

    在linux bash中，从root用户运行"grub"，该程序非常有趣并值得注意，因为它实际上是GRUB引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行，您仍可以运行 GRUB 并执行某些任务，而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。在 grub> 提示符处，输入：

    grub> root (fd0)
    grub> setup (fd0)
    grub> quit

    现在，引导盘完成了。

    (四)恢复被windows破坏的grub

    如果你用grub来引导linux和windows，当windows出毛病重新安装后，会破坏MBR中的grub，这时需要恢复grub。

    1.把linux安装光盘的第一张放到光驱，然后重新启动机器，在BOIS中把系统用光驱来引导。

    2.等安装界面出来后，按F4键，也就是linux rescue模式。

    3.一系列键盘以及几项简单的配制，过后就“继续”了这个过程，这里不说了，比较简单。

    4.然后会出现这样的提示符:

    sh#

    5.我们就可以操作GRUB了。输入grub:

    sh#grub

    会出现这样的提示符:

    grub>

    我们就可以在这样的字符后面，输入:

    grub>root (hdX，Y)
    grub>setup (hd0)

    如果成功会有一个successful......

    这里的X，如果是一个盘，就是0，如果你所安装的linux的根分区在第二个硬盘上，那X就是1了；Y，就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。

    (五)用NTLoader来引导linux

    如果你在安装linux时没有选择安装grub，不必着急，现在我们来看看如何在安装linux后安装grub。并用windows的NTLoader来引导linux。

    1. 安装grub

    我用的grub是Redhat8.0带的grub安装包: grub-0.92-7.rpm

    安装: rpm -ivh grub-0.92-7.rpm

    其他安装方式也一样，只要你安装上grub就行了。RH8缺省用的grub， 1、2步骤可以省了。

    2. 建立grub的环境

    cp /usr/share/grub/i386-pc/* /boot/grub

    3. 生成grub的配置文件/boot/grub/menu.conf

    按照上面所讲的grub.conf来生成一个配置文件。

    注意了， 这里我的linux在/dev/hda4，所以menu.conf那些分区位置为(hd0，3)，

    你的可能不一样了，不能完全照着"画瓢"噢! 下面第3步install的中的分区位置也应该和你的系统一致。

    安装grub至Linux分区boot

    将grub的stage1安装到/dev/hda4的boot扇区(hd0，3)。 过程如下:

    /sbin/grub (运行grub)
    grub> install (hd0，3)/boot/grub/stage1
    d (hd0，3) (hd0，3)/boot/grub/stage2
    p (hd0，3)/boot/grub/menu.conf

    (注意，上面"grub>"为grub的提示符，其后内容写在一行上。)

    4. 取得grub的boot信息

    过程如下:

    dd if=/dev/hda4 of=/grub.lnx
    bs=512 count=1

    这样得到grub的引导信息，只要用NT Loader来加载它就行了。

    5. 将上面得到的grub.lnx弄到Windows的C盘根目录下，可以先把grub.lnx弄得软盘上，然后启动windows，拷贝到C:\; 情况允许也可以直接在Linux下拷贝到C:了。 我的C盘(即设备/dev/hda1)为FAT32， 可以直接从Linux下弄过去了。 如下:

    mount -t vfat /dev/hda1 /mnt/c
    cp /grub.lnx /mnt/c
    umount /mnt/c

    6. 修改NT Loader的boot.ini

    在其中加入一行: C:\grub.lnx="Redhat Linux - GRUB"

    加入后boot.ini的内容如下:

    [boot loader]
    timeout=15
    default=C:\boot.lnx
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional"
    /fastdetect

    [VGA mode]" /basevideo /sos
    C:\grub.lnx="Redhat Linux - GRUB"

    可以用NT Loader加载Linux了， 其实上面过程基本上和用NT Loader加载LILO一样。其基本思想就是用NT Loader来加载LILO或grub的引导区(grub.lnx)， 其中的关键就是LILO或grub的引导区的获取。

     (六)活用grub的交互功能

    grub具有强大的交互功能。学会了将会使你受益非浅！

    1.grub没有显示菜单怎么办？

    当开机后进入grub界面但没了菜单，只剩下一个grub>提示符，怎么启动呢？别急，看下面:

    grub>cat (hd0，6)/boot/grub/grub.conf
    (为了看参数)
grub>root (hd0，6)
grub>kernel (hd0，6)
grub>kernel (hd0,6)/vmlinuz-2.4.18-14 ro root=LABEL=/
grub>initrd (hd0,6)/initrd-2.4.18-14.img
grub>boot
OK!启动了吧!以上有些数字要根据你的实际情况更改.
以上这个方法也可以用于测试新编译的内核.
2.进入单用户模式.
有时不小心把root用户密码忘了,只能进入单用户模式来重新设置root密码.方法如下:
开机进入grub界面,按C进入命令行模式,然后按照上面的方法进行,只是在第三步要在后面加入single参数.


Grub4dos tutorial - Grub4Dos Wiki

Grub4dos tutorial

From Grub4Dos Wiki

Jump to: navigation, search

Contents

  • 1 Introduction
    • 1.1 What is GRUB for DOS
    • 1.2 Difference between GRUB for DOS and GNU GRUB
  • 2 Installation
    • 2.1 Install GRUB for DOS boot code to MBR
    • 2.2 Install GRUB for DOS boot code to partition boot sector
    • 2.3 Starting GRUB for DOS from DOS
    • 2.4 Starting GRUB for DOS from Linux
    • 2.5 Booting GRUB for DOS via the Windows NT/2000/XP/2003 boot manager
    • 2.6 Booting GRUB for DOS via the Windows Vista boot manager
    • 2.7 Loading GRUB for DOS using other boot loader
  • 3 Booting DOS/Windows 9X/Windows NT startup files
  • 4 Disk emulation
    • 4.1 Direct mapping
    • 4.2 Indirect mapping
    • 4.3 Auto MBR creation
    • 4.4 memdisk
  • 5 CDROM related subjects
    • 5.1 Using ATAPI CDROM in GRUB for DOS
    • 5.2 Create a bootable CDROM
    • 5.3 Load GRUB for DOS from BCDW
[edit]

Introduction

[edit]

What is GRUB for DOS

GRUB for DOS is an universal boot loader based on GNU GRUB. It can boot off DOS/LINUX, or via Windows boot manager/syslinux/lilo, or from MBR/CD. It also has builtin BIOS disk emulation, ATAPI CDROM driver, etc.

[edit]

Difference between GRUB for DOS and GNU GRUB

First of all, GRUB for DOS has a flexible boot loader. Unlike GNU GRUB which relies on three stages of files to boot, GRUB for DOS uses a much better solution. The main function of GRUB is placed in a single file grldr, while the boot loader is placed in another file grldr.mbr, which can be installed to MBR or partition boot sector. At startup, boot code in grldr.mbr will dynamically scan the root directory of every local partition for grldr, and load the first one found. Using this scheme, the location of boot file is no longer fixed, users can move it across partition boundary without causing booting problems.

Secondly, GRUB for DOS can be loaded in multiple ways. GRUB for DOS runtime image comes in two forms. One is grldr, which can be loaded by MBR/partition boot sector and the Windows NT/2000/XP/2003/Vista boot manager. It can also act as the eltorito boot file for bootable CDROM. The other is grub.exe, which is a hybrid executable that can be launched from linux console and DOS prompt.

Thirdly, GRUB for DOS extends the function of GNU GRUB. The most significant enhancement is the map command. In GRUB for DOS, the map command can be used to create virtual harddisks and floppies from image files. These virtual devices can be accessed even after DOS starts.

There are other useful features of GRUB for DOS which are not present in GNU GRUB, such as ATAPI CDROM driver, Chinese support, and so on.

[edit]

Installation

There are many ways to install GRUB for DOS. Some of them require modifying MBR or partition boot sector, while others require changing system startup configuration files.

[edit]

Install GRUB for DOS boot code to MBR

You can use bootlace.com or grubinst.exe to install GRUB for DOS boot code to MBR:

bootlace.com can be used in DOS, Windows 95/98/Me and Linux. Examples:

Install GRUB for DOS boot code to the MBR of first hard drive under DOS, Windows 95/98/Me:

   bootlace 0x80

Install GRUB for DOS boot code to the MBR of IDE channel 0, primary drive under Linux:

   bootlace /dev/hda

Install GRUB for DOS boot code to the MBR of hard drive image file aa.dsk:

   bootlace aa.dsk

grubinst.exe can be used in Linux, FreeBSD and Windows NT family OSs (Windows NT/2000/XP/2003/Vista). Examples:

Install GRUB for DOS boot code to the MBR of first hard drive under Windows NT family OSs:

   grubinst (hd0)

Install GRUB for DOS boot code to the MBR of IDE channel 0, primary drive under Linux/FreeBSD:

   grubinst "(hd0)"

You can also use device names:

   grubinst /dev/hda  (Linux)
   grubinst /dev/ad0  (FreeBSD)

Install GRUB for DOS boot code to the MBR of hard drive image file aa.dsk:

   grubinst aa.dsk

There are many options you can use with bootlace and grubinst, use the -h option to display help message.

After installing the boot code, you need to copy grldr and menu.lst to the root directory of any FAT16/FAT32/NTFS/EXT2 partition.

[edit]

Install GRUB for DOS boot code to partition boot sector

You can use grubinst to install GRUB for DOS boot code to partition boot sector. Examples:

Install GRUB for DOS boot code to the first primary partition of the first hard drive:

   grubinst (hd0,0)

or

   grubinst --install-partition=0 (hd0)

or

   grubinst -p=0 (hd0)

Install GRUB for DOS boot code to the first primary partition of the hard drive image file aa.dsk:

   grubinst --install-partition=0 aa.dsk

or

   grubinst -p=0 aa.dsk

Just as in GRUB, extended partition starts with (hd0,4).

After installing the boot code, you need to copy grldr and menu.lst to the partition which you install the boot code on.

[edit]

Starting GRUB for DOS from DOS

You can use load GRUB for DOS in config.sys using one of the following lines:

   DEVICE=GRUB.EXE
   INSTALL=GRUB.EXE
   SHELL=GRUB.EXE

grub.exe can also be launched from DOS prompt or batch file such as AUTOEXEC.BAT.

[edit]

Starting GRUB for DOS from Linux

First, you need to apply the kexec patch to the Linux kernel.

Then, you can use the following commands to launch GRUB for DOS from linux:

   kexec -l grub.exe
   kexec -e
[edit]

Booting GRUB for DOS via the Windows NT/2000/XP/2003 boot manager

Add the following line at the end of boot.ini (this file is hidden):

   C:\grldr="Start GRUB4DOS"

Then copy grldr to C:\, and create the GRUB4DOS configuration file at C:\menu.lst.

Next time you start windows, there is a new option "Start GRUB4DOS" which can be used to start GRUB for DOS.

[edit]

Booting GRUB for DOS via the Windows Vista boot manager

Use bcdedit to configure the startup menu:

   bcdedit /create /d "Start GRUB4DOS" /application bootsector
   bcdedit /set {id} device boot
   bcdedit /set {id} path \grldr.mbr
   bcdedit /displayorder {id} /addlast

Then copy grldr.mbr to C:\, grldr and menu.lst to the root directory of any FAT16/FAT32/NTFS/EXT2 partition.

grldr.mbr can also be used to start GRUB for DOS in Windows NT/2000/XP/2003 (in fact, grldr.mbr is basicly the first 16 sectors of grldr). To use grldr.mbr as the boot file, use the following line in boot.ini:

   C:\grldr.mbr="Start GRUB4DOS"

As in Windows Vista, you need to copy grldr and menu.lst to the root directory of any FAT16/FAT32/NTFS/EXT2 partition.

[edit]

Loading GRUB for DOS using other boot loader

grub.exe can be loaded as a linux kernel.

Load GRUB for DOS using GRUB or another copy of GRUB for DOS, add the following section to menu.lst:

   title Load GRUB4DOS
   kernel /grub.exe

Load GRUB for DOS using syslinux, add the following section to syslinux.cfg:

   label GRUB4DOS
           KERNEL grub.exe
[edit]

Booting DOS/Windows 9X/Windows NT startup files

In GRUB for DOS, you can load the DOS/Windows 9X/Windows NT startup files directly.

DOS, Windows 95/98/Me:

   title Load io.sys
   root (hd0,0)
   chainloader (hd0,0)/io.sys

Windows NT/2000/XP/2003:

   title Load ntldr
   root (hd0,0)
   chainloader (hd0,0)/ntldr

Windows Vista:

   title Load bootmgr
   root (hd0,0)
   chainloader (hd0,0)/bootmgr

[edit]

Disk emulation

In GRUB for DOS, disk emulation is implemented using the "map" command.

[edit]

Direct mapping

Here is an example of mapping a image file as virtual floppy, and boot from it:

   title Boot from floppy image
   map (hd0,0)/aa.img (fd0)
   map --hook
   chainloader (fd0)+1
   rootnoverify (fd0)

map --hook is used to make the mapping created by first map command take effect immediately.

Here is an example of booting from the virtual hard disk:

   title Boot from hard disk image
   map (hd0,0)/aa.dsk (hd0)
   map (hd0) (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

Map the image file as virtual hard disk, but boot from the original disk:

   title Create virtual hard disk
   map (hd0,0)/aa.dsk (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

CDROM emulation is not implemented.

In direct mapping, the image file must be contiguous.

The virtual disk is implemented using INT 13. Therefore, it can be accessed in system that still uses INT 13, such as all kinds of DOS and Windows 9X (compatible mode disk access), and it can't be accessed in system that usesprotected mode drivers, such as Linux, FreeBSD and Windows NT family OSs.

[edit]

Indirect mapping

Indirect mapping is very similar to direct mapping, here is an example:

   title Boot from floppy image
   map --mem (hd0,0)/aa.img (fd0)
   map --hook
   chainloader (fd0)+1
   rootnoverify (fd0)

The --mem option indicates indirect mapping.

In indirect mapping, the image file is copy to memory before the mapping is applies, therefore, the image file need not to be contiguous, however, you must have enough memory to hole the image file.

[edit]

Auto MBR creation

To create virtual hard disk, you need an image file that resemble a real hard disk, which consist of MBR and partition data. If the image file only contains partition data, you need to patch it with MBR to create disk image. GRUB for DOS has taken this into consideration. When mapping disk image file, it will test the presence of MBR, if not found, it will create MBR automatically using the partition data. For example:

   title Boot from hard disk image
   map --mem (hd0,0)/aa.dsk (hd0)
   map (hd0) (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

aa.dsk can be either disk image or partition image, in the later case, GRUB for DOS will create the MBR in the air.

[edit]

memdisk

The indirect mapping of GRUB for DOS is similar to the function of external tool memdisk from syslinux. In fact, the following two menu entries do roughly the same thing:

   title Boot from virtual disk using internal map command
   map --mem (hd0,0)/aa.dsk (hd0)
   map (hd0) (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

   title Boot from virtual disk using external memdisk
   kernel (hd0,0)/memdisk
   initrd (hd0,0)/aa.dsk

However, memdisk does not support direct mapping or auto MBR creation.

[edit]

CDROM related subjects

[edit]

Using ATAPI CDROM in GRUB for DOS

Use the following command to initialize ATAPI CDROM:

   cdrom --init

Then, use the following command to start using ATATPI CDROM:

   cdrom --hook

After cdrom --hook, the CDROM device can be accessed using (cd0), (cd1), etc.

To boot from the first CDROM, use the following commands:

   chainloader (cd0)
   boot

To stop using CDROM:

   map --unhook
   cdrom --stop

The first command removes the (cdN) device mapping, while the second one stops the CDROM driver.

Note: If you boot GRUB for DOS from CDROM, the booting device will be (cd). This device is always accessible. However, if you want to access file from other CDROMs, you still need to initialize them using the above commands.

Examples:

To boot from the first CDROM:

   title Boot From First CDROM
   cdrom --init
   map --hook
   chainloader (cd0)
   boot
[edit]

Create a bootable CDROM

In GRUB for DOS, you can use grldr to create bootable CDROM:

   mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root

   mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

grldr and menu.lst should be placed at the root directory of CDROM image.

The above two commands can both create a bootable CDROM, but they are not totally the same.

The first one tells BIOS to load the whole grldr. However, some buggy BIOS might ignore it and load only a portion of the file, typically one sector (2048 bytes). This will cause the program to fail.

The second one tells BIOS to load only the first sector (2048 bytes), and the program loads the rest from CDROM. This method is safer, it should work for most BIOS.

Note: you can optionally use the -boot-info-table option, but the info table will be ignored by the program.

[edit]

Load GRUB for DOS from BCDW

To load GRUB for DOS from BCDW, first copy grldr and menu.lst to the root directory of CDROM image, then add a new line to the [MenuItems] section of BCDW configuration file bcdw.ini:

   \grldr   ; Grub4Dos
Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial"


Grub4dos 简介 - Grub4Dos Wiki

Grub4dos 简介

From Grub4Dos Wiki

Jump to: navigation, search

Contents

  • 1 总述
  • 2 GRUB4DOS 对 GNU GRUB 0.97 的改进
    • 2.1 A20代码 和 bug修正
    • 2.2 磁盘仿真（虚拟磁盘）
    • 2.3 多种方式进入grub环境
      • 2.3.1 通过dos
      • 2.3.2 通过Windows启动菜单
      • 2.3.3 将GRUB4DOS引导代码写入硬盘MBR，开机直接进入grub环境
    • 2.4 图片背景支持
    • 2.5 中文支持
    • 2.6 光驱支持
  • 3 结束
[edit]

总述

相信许多liunxer初次听到“GRUB FOR DOS”这个名字，第一感觉就是：这个对我没用，因为我不用DOS，即使用也不会去通过它启动GRUB。先别急，再问一句：您是否用过grldr呢？是否用过MaxDos、一键ghost、矮人DOS工具盘？如果答案是肯定的，那您已经在用GRUB FOR DOS了。

首先搞清楚与 GNU GRUB 的关系。 GNU GRUB 分为 GNU GRUB Legacy 和 GNU GRUB2 两代 。GNU GRUB Legacy 其实就是原来的 GNU GRUB 0.xx ，最新版是 2005 年发布的 GNU GRUB 0.97 。目前已停止开发，并改名为 GNU GRUB Lagecy 。GNU GRUB2 是第二代 GRUB，它将取代原来的 GNU GRUB （例如0.9x版），但目前还处于开发阶段，尚未发布正式版。

而 GRUB4DOS 则是对 GNU GRUB Lagecy 的二次开发。该项目最早由 不点 在2003年发起，目前主要由他、bean 和另外几位中国人维护，很多人贡献了代码，再加上广大网友热心帮助，使得 GRUB4DOS 不断完善。在当前 新的 GRUB2 没有到位、老的 GNU GRUB Lagecy 又有诸多不完善 的情况下，GRUB4DOS 受到越来越多人的欢迎。不少人已经把 GRUB4DOS 当作仍然处于活跃开发当中的 grub legacy 了，当他们给 grub 0.XX 的补丁被搁浅时，他们又把补丁投递给了 GRUB4DOS。

[edit]

GRUB4DOS 对 GNU GRUB 0.97 的改进

[edit]

A20代码 和 bug修正

对A20的处理历来就是一个棘手问题。当初IBM引入这一设计，本意是为了让以往那些BUGGY软件能够运行，结果造成后世无穷无尽的隐患。当然不能全怪IBM，真正应当责怪的是那些不遵守IBM标准的硬件厂商，它们生产的系统无法用常规的几种方法来控制A20，使得软件开发者可能在很多意想不到的地方碰上A20这个妖魔，除了造成死机之外，还导致执行效率的极度降低。在微软的XMS规范中就明确写着，A20的控制在有些机器上是非常耗时的一个操作。

GNU GRUB 0.97中的A20代码很明确是有问题的，这在GNU GRUB邮件列表档案中就有提到。很多用户报告在使用gnu grub 0.97时键盘失去响应。grub开发组在grub2中对A20代码打了补丁，以解决这些问题，但是这个补丁并没有打到我们目前广泛使用的0.97版上。为此GRUB4DOS用取自Linux内核的A20代码替换了原代码，并参考其他一些开源代码做了很多改进，基本上解决了这一问题。

A20只是改造的一个方面，在GRUB4DOS的开发过程中修复的GNU GRUB 0.97的bug还有很多，有些在Changelog中并没有提到。到目前为止，已经把那些严重的BUG排解殆尽了，应该可以比较平滑地使用GRUB4DOS了。

[edit]

磁盘仿真（虚拟磁盘）

这是GRUB4DOS的一大特色功能，开发者下了不少功夫。这一功能是将 软盘镜像或硬盘镜像甚至某个硬盘分区 虚拟成 软驱或硬盘，进而运行其中的操作系统（DOS、win98），类似于以前流行的“虚拟软驱”（vfloppy），但功能要强得多。 用SYSLINUX中的memdisk也可实现虚拟磁盘。比较而言，GRUB4DOS功能更强，限制更少，用法更灵活，同时对bios的要求也要高那么一点点，在一些BIOS有缺陷的机子上可能会出问题（不过不用太担心，实践表明这种情况极其罕见）。

[edit]

多种方式进入grub环境

[edit]

通过dos

在dos下运行grub.exe即可进入纯粹的grub环境，并部分地支持退回到DOS。也可把grub.exe作为 CONFIG.SYS 里的设备驱动文件而运行。

[edit]

通过Windows启动菜单

这是被广泛使用的一种用法。MaxDos、一键ghost硬盘版、矮人DOS工具盘之类的软件就是以这种方式启动grldr，再通过磁盘仿真虚拟出一个软驱，进而启动DOS的。

[edit]

将GRUB4DOS引导代码写入硬盘MBR，开机直接进入grub环境

乍一看这不算什么改进——GNU GRUB本来就可以这样引导，但实际上在这里 GRUB4DOS 有相当大的革新。GNU GRUB lagecy的传统安装方法是：

root (xxx，x)
setup (xxx)

第一句是指定一个分区，该分区须存放有/boot/stage1和/boot/stage2文件，第二句是将引导代码写入硬盘MBR。这样安装的GRUB，其MBR引导代码被设置为从固定的分区加载stage2。假如我们某一天因为某些原因，需要删除或格式化该分区，或者做一些会引起该分区序号变化的操作（比如用 pqmagic 在该分区前添加或删除分区），就需要预先重装一次grub，重新指定存放stage2文件的分区，否则将无法引导。这一点上 GNU GRUB 显得不够灵活。

而 GRUB4DOS 采取了新的策略：其MBR引导代码并非固定地指向某个分区，而是搜索所有分区，查找并加载 grldr，只要某分区上存有一份 grldr，就能启动。而且安装时可以将原微软的MBR备份，启动时如果找不到grldr，便自动加载备份的MBR。显然这种方式更加灵活、稳健，所以 GRUB4DOS 虽然保留了 GNU GRUB 的全部命令和功能（包括 setup 命令），但不推荐使用传统的安装方式。

当然 GRUB4DOS 方式也不是十全十美，因为其引导代码还不能识别所有的文件系统，目前支持仅 NTFS/FAT12/FAT16/FAT32/EXT2/EXT3（也不少了 ，以后将支持更多的格式），所以可能需要专门设一个分区来存放 grldr 。不过在我看来这是值得的，一点小麻烦换来了更多的方便和稳定。

[edit]

图片背景支持

可用 640x480@14位色 的图片做背景。图片制作请参考这里(链接可能无效)： http://bbs.znpc.net/viewthread.php?t...extra=page%3D4

[edit]

中文支持

GRUB4DOS 发布有中文版，大大方便了中文用户。

[edit]

光驱支持

该功能使得用户可以在GRUB环境下访问光驱，并可由光驱启动，很实用。

[edit]

结束

现在我用的每块硬盘包括u盘都安装了GRUB4DOS，既可启动windows，又能启动linux，还可通过磁盘仿真来启动dos，放上自己喜欢的图片做背景，全中文界面，HOHO，感觉很不错，您不想试试吗？

Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_%E7%AE%80%E4%BB%8B"


Grub4dos安装和启动 - Grub4Dos Wiki

Grub4dos安装和启动

From Grub4Dos Wiki

Jump to: navigation, search

GRUB4DOS的启动方式有很多种，介绍如下：

Contents

  • 1 从MBR中启动
  • 2 从分区启动扇区中启动
  • 3 在DOS命令行启动
  • 4 在Linux下启动
  • 5 通过Windows NT/2000/XP/2003的启动管理器启动GRUB4DOS
  • 6 通过Windows Vista的启动管理器启动GRUB4DOS
[edit]

从MBR中启动

把GRUB4DOS启动代码安装到MBR后，开机后便能直接进入GRUB4DOS。

安装到MBR需要用到工具bootlace或grubinst, bootlace可运行在DOS，Windows 95/98/Me 和 Linux下，而grubinst可运行在 Windows NT/2000/XP/2003/Vista，Linux 和 FreeBSD下。

在DOS, Windows 95/98/Me下，用bootlace把启动代码安装到第一只硬盘的MBR：

bootlace 0x80

在Linux下，用bootlace把启动代码安装到IDE0上主设备的MBR：

bootlace /dev/hda

在Windows NT/2000/XP/2003/Vista下，用grubinst把启动代码安装到第一只硬盘的MBR：

grubinst (hd0)

在Linux/FreeBSD下，用grubinst把启动代码安装到IDE0上主设备的MBR：

grubinst "(hd0)"

注意：grubinst有图形界面grubinst_gui，利用它可以更简单地把启动代码安装到MBR/启动扇区里。

安装启动代码到MBR后，还需要把grldr和menu.lst拷贝到硬盘上任意一个FAT16/FAT32/NTFS/EXT2分区的根目录里。

该方案的优点:

  • 不依赖于操作系统
  • 能够自动搜索硬盘上各个分区的grldr文件
[edit]

从分区启动扇区中启动

GRUB4DOS的启动代码也可以安装到某一FAT16/FAT32/NTFS/EXT2分区的启动扇区中。当从该分区启动时，会引导GRUB4DOS。

用grubinst把启动代码安装到第一只硬盘的第一个主分区里：

grubinst (hd0,0)

或者

grubinst -p=0 (hd0)

安装启动代码到启动扇区后，还需要把grldr和menu.lst拷贝到该分区的根目录里。

该方案的优点：

  • 不依赖于操作系统
  • 不需要修改MBR，因而可以使GRUB4DOS和其他的启动管理器共存
[edit]

在DOS命令行启动

在CONFIG.SYS中启动GRUB4DOS:

install=c:\some\where\grub.exe --config-file=FILE

在DOS命令行下启动GRUB4DOS:

grub.exe --config-file=FILE

如果没有使用--config-file选项，缺省的菜单文件是 (hd0,0)/menu.lst。

FILE可以菜单文件的名字，也可以是菜单的内容。例如：

grub.exe --config-file="root (hd0,0);chainloader +1"

在DOS下启动GRUB4DOS后，可以用quit命令返回到DOS中。

该方案的优点:

  • 不需要修改MBR和启动扇区
  • 可以根据需要在脚本或者其它DOS程序中启动GRUB4DOS
[edit]

在Linux下启动

在Linux下，可以用以下的命令启动GRUB4DOS:

kexec -l grub.exe
kexec -e

注意：为了能在Linux下运行grub.exe，你需要使用打了kexec补丁的Linux内核。

该方案的优点:

  • 不需要修改MBR和启动扇区
  • 可以根据需要在脚本或者其它Linux程序中启动GRUB4DOS
[edit]

通过Windows NT/2000/XP/2003的启动管理器启动GRUB4DOS

在 Windows NT/2000/XP/2003中，可以把grldr和menu.lst拷贝到C:\，然后在boot.ini的最后加上一行：

c:\grldr="Start GRUB4DOS"

如果boot.ini中的timeout值为零，把它设置为大于0的数字，例如timeout=30，然后保存boot.ini。

注意：boot.ini文件一般是隐藏的，你需要在文件夹选项中设置显示所有文件，或者在cmd中使用以下命令来去掉boot.ini的隐藏属性：

attrib -s -r -h c:\boot.ini

下一次启动Windows时，你会发现启动画面中多了Start GRUB4DOS这一选项，使用它便可启动GRUB4DOS。

该方案的优点：

  • 不需要修改MBR和启动扇区
[edit]

通过Windows Vista的启动管理器启动GRUB4DOS

首先，把grldr.mbr拷贝到C:\下，然后在cmd中使用以下的命令：

bcdedit /create /d "Start GRUB4DOS" /application bootsector
bcdedit /set {id} device boot
bcdedit /set {id} path \grldr.mbr
bcdedit /displayorder {id} /addlast

然后把grldr和menu.lst拷贝到任意一个FAT16/FAT32/NTFS/EXT2分区的根目录。

该方案也可应用于Windows NT/2000/XP/2003，但这些系统中修改启动菜单不是使用bcdedit，而是通过在boot.ini的最后加上这样的一行：

c:\grldr.mbr="Start GRUB4DOS"

下一次启动Windows时，你会发现启动画面中多了Start GRUB4DOS这一选项，使用它便可启动GRUB4DOS。

该方案的优点：

  • 不需要修改MBR和启动扇区
  • 能够自动搜索硬盘上各个分区的grldr文件
Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos%E5%AE%89%E8%A3%85%E5%92%8C%E5%90%AF%E5%8A%A8"


Grub4dos新手指南 - Grub4Dos Wiki

Grub4dos新手指南

From Grub4Dos Wiki

Jump to: navigation, search

GRUB4DOS的用法和GRUB Legacy基本上一样的。除非特别说明，以下的用法也适用于GRUB Legacy。

Contents

  • 1 配置文件menu.lst的基本结构
  • 2 基本命令
    • 2.1 help
    • 2.2 default
    • 2.3 timeout
    • 2.4 root
    • 2.5 rootnoverify
    • 2.6 chainloader
    • 2.7 boot
  • 3 设备名字
  • 4 文件名字
  • 5 启动操作系统
    • 5.1 启动一般系统
    • 5.2 启动DOS/Windows 95/98/Me
    • 5.3 启动Windows NT/2000/XP/2003/Vista
    • 5.4 启动Linux
  • 6 修改界面的颜色
  • 7 使用背景图片
  • 8 使用中文界面
[edit]

配置文件menu.lst的基本结构

GRUB4DOS的配置文件和GRUB一样，都是menu.lst。以下是一个例子：

default 0

title Boot First Partition
root (hd0,0)
chainloader +1

title Boot Second Partition
root (hd0,1)
chainloader +1

菜单项是由title来指定，该例子中有两个title，就是说GRUB4DOS器启动时会显示两个菜单项，菜单的标题是title的参数，也就是 Boot First Partition 和 Boot Second Partition。在第一个title前的命令是全局命令，它们在显示菜单之前执行。

menu.lst一般放在和启动文件GRLDR同样的目录里。

以下是该配置文件在启动时的画面：

高亮的菜单项是当前选择的菜单，用上下方向键可以在不同菜单中切换。如果按下回车键，便会以当前菜单中的命令来启动系统。

在菜单界面按下c键，会进入命令行界面：

在命令行界面下，你可以手动输入各个命令。在命令行界面下，按<ESC>键便可以回到菜单界面。

[edit]

基本命令

以下是一些最为常用的命令

[edit]

help

用来显示其它命令的用法，例子：

help root
[edit]

default

指定缺省的菜单项，由0开始算起，例子：

default 0

该命令必须在第一个title之前指定

[edit]

timeout

缺省的等待时间，如果在指定的时间(以秒为单位)不按任何键，则会启动缺省的菜单项，例子：

timeout 10

该命令必须在第一个title之前指定

[edit]

root

用来指定根设备，例子：

root (hd0,0)
[edit]

rootnoverify

该命令也可以用来指定根设备。root在设置根设备前，先测试一下该分区的文件系统是否可以识别，而rootnoverify则省略这一测试。

rootnoverify (hd0,0)
[edit]

chainloader

把启动扇区的内容装入内存，参数+1指的是把分区的第一个扇区，例子：

chainloader +1
[edit]

boot

启动操作系统。在使用该命令前，必须用kernel或者chainloader把系统内核或者启动扇区/启动文件装入内存。例子：

boot

在配置文件中不需要使用这个命令。这是因为GRUB在执行了菜单项的所有命令后，会自动加上boot。该命令一般在命令行界面里使用。

[edit]

设备名字

在GRUB中，硬盘设备用以下的方法来命名：

(hdm)

m是硬盘的序号。序号0相对于BIOS的第一只硬盘。

硬盘上的分区用以下的方法来命名：

(hdm,n)

n是硬盘m里分区的序号。主分区最多有4个，其序号为0-3，扩展分区的序号从4开始。例子：

硬盘0上的第一个主分区：

(hd0,0)

硬盘1上的第一个扩展分区：

(hd1,4)

设备也可以用相应的BIOS设备号来表示。例如，第一只硬盘设备的设备号是0x80，因此，以下的表示是等价的: (hd0,0), (0x80,0), (128,0)。

另外，对于一些文件系统来说，例如FreeBSD中使用的ffs，或者是Solaris中使用的ufs，在分区中还继续划分为子分区。子分区的表示是在分区表示的基础上加上从a开始计算的子分区序号。例如：

硬盘0上的第一个主分区里的第一个子分区：

(hd0,0,a)

软盘设备用以下的方法来命名：

(fdm)

m是软盘的序号。序号0相对于BIOS的第一只软盘。

软盘设备后面同样可以加上分区或者子分区的序号。

GRUB还有其它一些设备，比如说(cd)是光盘设备，(nd)是网络设备，等等。不过它们在特定的情形下才可以使用。

[edit]

文件名字

GRUB的文件名字是在设备名字的基础上加上文件的路径，例子： 硬盘0上第一个主分区根目录里的aa.img文件：

(hd0,0)/aa.img

软盘0上boot目录里的aa.img文件：

(fd0)/boot/aa.img

注意：目录的分隔符是 / ，而不是Windows/DOS下常用的 \ 。

另外，你还可以用扇区的位移和数量来指定数据，比如：

(hd0,0)0+100,200+1,300+300

表示硬盘0上第一个主分区里，从扇区0起的100个扇区，然后是从扇区200起的1个扇区，最后是从扇区300起的300个扇区。当位移为零时，可以省略不写，因此，

(hd0,0)+1

表示的是硬盘0上第一个主分区里从扇区0起的1个扇区，也就是分区的第一个扇区。

GRUB中纪录了一个根设备，它由root命令来指定，例如：

root (hd0,0)

根设备上的文件可以省略设备名，例如，使用了以上的root命令后，文件名 +1 就等同于 (hd0,0)+1。

注意：在GRUB4DOS的扩展中，map命令中使用的文件名的意义和以上所说的有所不同。在map命令里，(hd0,0)+1表示的不是硬盘0上第一个主分区的第一个扇区，而是整个分区。

[edit]

启动操作系统

[edit]

启动一般系统

一般来说，操作系统会在其所在分区的第一个扇区里放入启动代码。因此,用以下的一组命令一般可以启动硬盘0第一主分区上的操作系统：

rootnoverify (hd0,0)
chainloader +1
boot

对于不同的分区，只要修改设备名(hd0,0)就可以了。

注意：大部分的操作系统需要在第一只硬盘的主分区里才能正常启动。

注意：当把该组命令作为menu.lst里某一菜单项的内容时，最后的命令boot可以省略。

注意：该方法是通用的，它可以用来启动以下提到的系统，只要分区的第一个扇区中存在启动代码。

[edit]

启动DOS/Windows 95/98/Me

在GRUB4DOS中，chainloader命令可以装载DOS/Windows 95/98/Me中的io.sys。因此，可以使用类似于以下的一组命令来启动这些系统：

rootnoverify (hd0,0)
chainloader (hd0,0)/io.sys
boot
[edit]

启动Windows NT/2000/XP/2003/Vista

在GRUB4DOS中，chainloader命令也可以装载Windows NT/2000/XP/2003中的ntldr和Windows Vista中的bootmanager。因此，可以使用类似于以下的一组命令来启动这些系统：

启动Windows NT/2000/XP/2003:

rootnoverify (hd0,0)
chainloader (hd0,0)/ntldr
boot

启动Windows Vista:

rootnoverify (hd0,0)
chainloader (hd0,0)/bootmanager
boot
[edit]

启动Linux

可以用kernel指令装载Linux内核：

rootnoverify (hd0,0)
kernel (hd0,0)/vmlinuz
boot

在内核(hd0,0)/vmlinuz后可以加上启动的参数。

当启动Linux内核时，可以使initrd指令来装载初始的内存盘。

rootnoverify (hd0,0)
kernel (hd0,0)/vmlinuz
initrd (hd0,0)/initrd
boot

注意：chainloader用于装载启动扇区和特定的启动文件如io.sys和ntldr，而kernel用于装载Linux内核和符合其标准的启动文件。在一组启动命令中，两者不能同时使用。

[edit]

修改界面的颜色

GRUB界面的颜色可以用color指令来指定。color中指定了两组颜色，第一组是正常文本的颜色，第二组是加亮文本（当前选择的菜单项）的颜色。对应于每组颜色，又需要指定两种颜色。第一种是前景的颜色，第二种是背景的颜色。因此，在color总共需要指定四种颜色，分别是，正常文本前景，正常文本背景，加亮文本前景和加亮文本背景。

颜色代码：

black (黑色) red (红色) green (绿色) brown (棕色) blue (蓝色) magenta (紫色) cyan (青色) light-gray (灰色)

dark-gray (暗灰) light-red (亮红) light-green (亮绿) yellow (黄色) light-blue (亮蓝) light-magenta (亮紫) light-cyan (亮青) white (白色)

前景色可以使用全部16种颜色，而背景色只能使用前面8种颜色。

例子：

color cyan/blue white/magenta

正常文本前景: cyan (青色) 正常文本背景: blue (蓝色) 加亮文本前景: white (白色) 加亮文本背景: magenta (紫色)

以上例子的颜色在运行时的画面：

你也可以在颜色矩阵中直观看到各前景/背景颜色搭配的效果。

color命令一般是作为全局命令，在第一个title前使用。

[edit]

使用背景图片

可以用splashimage命令来加载背景图片：

spashimage (hd0,0)/spash.gz

图片必须是640x480,14色的XPM格式，可以用gzip来进行压缩。

使用了该命令后，GRUB启动时将进入图形模式。这时，color命令指定的文本颜色将会无效。图形模式下颜色的设置应该使用foreground命令：

foreground ffff00

以上命令设置字体的颜色。颜色用RGB值来表示，ffff00是黄色。

如果没有使用foreground命令，缺省的文本颜色是白色。

以上两个命令在启动时的效果：

该例子中使用的背景图片可以在这里下载。

常用颜色的RGB值对应表：

000000 | c0c0c0 | 800000 | ff0000
000080 | 0000ff | 800080 | ff00ff
008000 | 00ff00 | 808000 | ffff00
008080 | 00ffff | 808080 | ffffff

splashimage和foreground命令一般在第一个title前使用。

[edit]

使用中文界面

首先，你必须使用支持中文的版本。并且，要正常显示中文的菜单，你需要使用fontfile命令来装载中文字体:

fontfile (hd0,0)/fonts.gz

fonts.gz是字体文件，并且使用了gzip来压缩。例子中使用的fonts.gz可以在这里下载。

fontfile命令可以和splashimage，foreground一起使用。例如：

splashimage (hd0,0)/splash.gz
foreground ffff00
fontfile (hd0,0)/fonts.gz

title 启动第一个分区
root (hd0,0)
chainloader +1

title 启动第二个分区
root (hd0,1)
chainloader +1

该菜单的显示的效果为：

Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97"


Grub4dos高级功能 - Grub4Dos Wiki

Grub4dos高级功能

From Grub4Dos Wiki

Jump to: navigation, search

Contents

  • 1 虚拟磁盘
    • 1.1 磁盘交换
    • 1.2 建立虚拟磁盘
    • 1.3 建立虚拟内存盘
    • 1.4 自动生成MBR
    • 1.5 虚拟设备(md)
    • 1.6 虚拟设备(rd)
    • 1.7 map的其他参数
    • 1.8 利用memdisk生成虚拟内存盘
  • 2 光驱相关
    • 2.1 在GRUB4DOS中使用光驱
    • 2.2 利用GRUB4DOS制作可启动光盘
  • 3 脚本支持
[edit]

虚拟磁盘

GRUB4DOS中的虚拟磁盘是由map命令实现的。map命令的功能介绍如下：

[edit]

磁盘交换

map命令在GRUB Legacy中的也存在，它是用作磁盘交换。

比如说，你有两只硬盘，但两只硬盘上均有可启动的系统。在第一只硬盘上启动时，不需要特殊的处理，直接用chainloader装载启动扇区就可以了。不过，如果要从第二只硬盘上启动，那么单单用chainloader是不够的，这是因为很多操作系统都缺省地从第一只硬盘上装载启动所需的文件，如果文件不在其上，系统便不能顺利地读取，从而导致启动失败。

一个原始的解决方法是在BIOS中修改启动顺序，把需要启动的硬盘放到最前面。那么，重启计算机后该硬盘便会成为第一只硬盘，从而可以正常启动。

GRUB中的map命令便是为了解决这个问题而设计的，它可以在运行时交换磁盘，而无需修改BIOS。例如：

title Boot First Partition on Second Disk
map (hd0) (hd1)
map (hd1) (hd0)
chainloader (hd1,0)+1
boot

在该例子中，使用了map命令实现了(hd0)和(hd1)的交换。要注意的是，交换是在命令boot后才生效的。因此在chainloader命令中，读取的仍然是第二只硬盘。

[edit]

建立虚拟磁盘

在GRUB4DOS中，大大地扩展了map命令的用法。利用该命令可以建立虚拟磁盘，例子：

把(hd0,0)根目录下的aa.dsk文件映射为第二只硬盘，并且使用原来硬盘上的系统启动：

title Create Virtual Disk
map (hd0,0)/aa.dsk (hd1)
root (hd0,0)
chainloader +1
boot

把(hd0,0)根目录下的aa.dsk文件映射为第一只硬盘，原来的第一只映射为第二只硬盘，并且从aa.dsk里虚拟出来的磁盘中启动：

title Boot From Virtual Disk
map (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1)
map --hook
root (hd0,0)
chainloader +1
boot

在上面提到，map命令的映射不是马上起作用的。但是，要从虚拟磁盘中启动，就必须从中读取数据，因此需要使映射提前起效。在以上的例子中，map --hook的作用便是使前面map命令指定的映射立刻生效。

把(hd0,0)根目录下的aa.img文件映射为第一只虚拟软盘，并从中启动：

title Boot From Virtual Floppy
map (hd0,0)/aa.img (fd0)
map --hook
root (fd0)
chainloader +1
boot

使用这种方式进行映射后，虚拟磁盘的内容和影像文件的内容是同步的，也就是说，如果你修改了虚拟磁盘的内容，影像文件也同样被更新。如果你重启了机器，该修改的效果仍然存在。

在使用这种方式进行映射时，影像文件在磁盘上的存放必须是连续的。

GRUB4DOS中建立的虚拟磁盘，包括以下所说的内存盘，都是通过截取INT 13来实现的。因此在启动了操作系统后，如果该系统是通过INT 13来访问磁盘的，例如各类的DOS，那么在进入系统后仍然可以访问虚拟盘。如果系统是采用其它方式来访问磁盘，例如Linux，各类Unix和Windows NT系列的操作系统，那么在进入系统后便不能访问虚拟盘。Windows 9X系列的操作系统比较特殊，它通常是使用保护模式的驱动来访问磁盘，但当它找不到合适的驱动时，会依旧使用INT 13来访问磁盘，因此，在Windows 9X下也可以访问虚拟磁盘。

[edit]

建立虚拟内存盘

用map也可以建立虚拟内存盘，其用法和以上的很相似，你只需要在map建立虚拟盘的命令中加上--mem参数就行了。例子：

把(hd0,0)根目录下的aa.dsk文件映射为第一只硬盘，原来的第一只映射为第二只硬盘，并且从aa.dsk里虚拟出来的磁盘中启动：

title Boot From Virtual Disk
map --mem (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1)
map --hook
root (hd0,0)
chainloader +1
boot

把(hd0,0)根目录下的aa.img文件映射为第一只虚拟软盘，并从中启动：

title Boot From Virtual Floppy
map --mem (hd0,0)/aa.img (fd0)
map --hook
root (fd0)
chainloader +1
boot

使用了该映射方式，影像文件的内容是装载到内存后才进行映射。这意味着，你必须有足够的内存来存放影像和启动系统。而且，虚拟磁盘和影像文件是分离的，对虚拟磁盘所作的修改不会被更新到影像文件中。

在这种映射方式中，影像文件在磁盘上的存放不需要是连续的。

[edit]

自动生成MBR

影像文件有两种类型。一种是文件系统影像，它里面只包含某一个文件系统的数据。另一种是磁盘影像，它里面包含了类似于物理硬盘的结构，也就是，影像以MBR开始，然后才是文件系统的数据。对于虚拟内存盘，其结构是类似于真实硬盘的，因此在使用map命令进行映射时，应该使用磁盘影像。

GRUB4DOS考虑到了这个问题。为了让用户使用更加方便，GRUB4DOS作了如下的改进：当把磁盘影像读入内存时，程序会检测其结构，如果发现是文件系统影像，那么在它前面自动生成MBR，把它变为磁盘影像。因此，无论用户选择使用文件系统影像还是磁盘影像，装载到内存后都会变成正确的格式。

自动生成MBR还有一个应用，就是直接从硬盘上的装载分区，从而生成虚拟磁盘。例如：

title Load Partition From Disk
map --mem (hd0,0)+1 (hd0)
map (hd0) (hd1)
map --hook
root (hd0,0)
chainloader +1
boot

该菜单的功能是把硬盘上第一个分区的内容装载到内存，并且自动在其前面加上MBR而生成虚拟磁盘。然后，把该虚拟磁盘映射为第一只硬盘，原来的硬盘映射为第二只硬盘。最后，从虚拟磁盘中启动。

在使用该菜单启动后，系统分区的内容和好像和原来一样，但这时实际是使用在内存里的虚拟磁盘。对分区的修改在重启机器后便会消失。

该菜单是把整个分区的内容装载到内存，要确定内存足够大，否则命令不会成功。

在map命令中，(hd0,0)+1是指整个(hd0,0)分区，而不是(hd0,0)的第一个扇区。这种表示只是在map命令中适用，在其它的地方，(hd0,0)+1 还是原来的意义。

[edit]

虚拟设备(md)

在GRUB4DOS中，你可以用设备(md)来访问整个内存，就和用(nd)访问网络设备，用(cd)来访问光盘类似。

GRUB4DOS也扩展了cat命令，它可以用--hex来以十六进制输出，也可以用--locate=STRING来在文件中搜索字符串。

例子：

cat --hex (hd0)+1

以十六进制形式显示第一只硬盘的MBR。

cat --hex (hd0,0)+1

以十六进制形式显示第一只硬盘第一个分区的启动扇区

cat --hex (md)+2

以十六进制形式显示内存开始1K的内容，这里其实是中断向量表。

cat --hex (md)0x800+1

以十六进制形式显示内存从0x800 * 512 = 1M 开始512字节的内容，也就是从扩展内存开始的512字节。

[edit]

虚拟设备(rd)

用虚拟设备(md)可以访问从地址0开始的物理内存，而使用(rd)则可以访问从某一地址开始的内存。

map --rd-base=ADDR

用来设置(rd)内存设备的开始地址(以字节为单位)。

map --rd-size=SIZE

用来设置(rd)内存设备的长度(以字节为单位)。

当把grub.exe作为linux内核启动时，可以用指定初始盘。进入grub后，(rd)设备的开始地址和长度自动设置为初始盘的地址和长度。因此，可以在grub中用(rd)设备来访问初始盘。

map --ram-drive=RD

用来设定访问(rd)内存设备的BIOS设备名。缺省值是0x7F，表示(rd)对应的虚拟盘是软盘设备。如果(rd)对应的虚拟盘是硬盘设备，那么需要设置RD, 使得 0x80< RD < 0xFF。

[edit]

map的其他参数

  • --status

用于显示当前的磁盘映射。

map --status
  • --floppies=M, --harddrives=N

指定软盘/硬盘的数目。

map --harddrvies=2

使用该命令后，本地硬盘的数目设为2。

  • --memdisk-raw=RAW

RAW取值0或1(缺省是1)。RAW=0时，使用int15/ah=87h读扩展内存。RAW=1时，使用内部的函数来读扩展内存。

map --memdisk-raw=0
  • --safe-mbr-hook=SMH ，--int13-scheme=SCH

这两个参数是为了在Windows 9X下能正常使用虚拟盘而设的。

SMH取值0或1(缺省是1)，当你在Windows 9X下使用虚拟盘时出现问题时，可以试试使用以下的命令：

map --safe-mbr-hook=0

SCH取值也是0或1(缺省是1)，当你在Windows 9X下使用虚拟盘时出现问题时，也可以试试使用以下的命令：

map --int13-scheme=0
  • --read-only

使用了该参数后，当前进行映射的磁盘被设为只读模式。

map --mem --read-only (hd0,0)/aa.dsk (hd1)
  • --fake-write

使用了该参数后，当前进行映射的磁盘看似可写，但写入的内容均被丢弃。

map --mem --fake-write (hd0,0)/aa.dsk (hd1)
  • --heads=H, --sectors-per-track=S

一般来说，map命令可以正确地计算出影像文件中使用的磁盘参数。如果你想手动设置，那么可以使用这两个选项。

map --mem --heads=63 --sectors-per-track=255 (hd0,0)/aa.dsk (hd1)
[edit]

利用memdisk生成虚拟内存盘

memdisk是syslinux中的一个工具，利用它也可以生成虚拟内存盘：

title Create virtual disk using memdisk
kernel (hd0,0)/memdisk
initrd (hd0,0)/aa.dsk
boot

该命令把aa.dsk装入内存生成虚拟内存盘，该虚拟盘作为第一只硬盘，原来硬盘的序号向后移动。最后，从虚拟盘中启动。这一系列的操作都是在memdisk内完成的，GRUB的任务只是把aa.dsk装入内存，然后把装载的地址传递给memdisk。

如果只有一只硬盘，那么以上的操作可以用以下的命令完成：

title Create virtual disk using map
map --mem (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1)
map --hook
root (hd0,0)
chainloader +1
boot

map和memdisk的区别：

  • map是GRUB4DOS内置的功能，而memdisk是一个外部的程序
  • map可以直接映射磁盘上的文件，而memdisk必须要把文件装载到内存里。
  • map可以把影像文件映射为第二只硬盘，而而memdisk只能映射为第一只硬盘。
  • map有自动生成MBR的功能，而memdisk没有。因此memdisk只能使用磁盘影像，不能使用文件系统影像。
[edit]

光驱相关

[edit]

在GRUB4DOS中使用光驱

用以下的命令可以初始化光驱：

cdrom --init

初始化后，接着使用map --hook，那么就可以用(cd0),(cd1)等来访问光驱。

GRUB中支持的光驱设备是(cd)，它代表用可启动光盘启动GRUB时(光盘的制作方法在下一节介绍)，用于启动的光驱设备。该设备可直接使用，而不需要使用以上的命令来初始化。

用以下的命令可以停止化光驱：

cdrom --stop

在停止光驱后，还需要用map --unhook来取消map --hook的效果。

用以下的命令可以指定搜索的端口：

cdrom --add-io-ports=0x03F601F0

以下是缺省的搜索端口：0x03F601F0, 0x03760170, 0x02F600F0, 0x03860180, 0x6F006B00, 0x77007300。

在初始化光驱后，可以用blocklist的方式来访问其内容：

cat --hex (cd0)16+2

光驱中使用的扇区大小是2048。

另外，iso9660文件系统驱动程序支持Rock-Ridge扩展，但不支持Joliet扩展，在读取Joliet扩展的光盘是可能会出现问题。

另外，你可以以用chainloader命令来从光驱中启动：

chainloader (cd0)
boot

一个完整的从第一只光驱启动的例子：

title Boot From First CDROM
cdrom --init
map --hook
chainloader (cd0)
boot
[edit]

利用GRUB4DOS制作可启动光盘

在GRUB中，可以利用 stage2_eltorito 来制作启动光盘：

mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso

stage2_eltorito和menu.lst应该放在光盘的/boot/grub目录里。

在GRUB4DOS中，可以利用 grldr 来制作启动光盘。制作方法有两种：

mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root
mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

grldr和menu.lst应该放在光盘的根目录里。

第一种方法告诉 BIOS，希望它能够装入整个 GRLDR 文件到内存。装入内存后，BIOS 还应该正确设置堆栈，使得不至于把堆栈设置到 GRLDR 的程序体内，造成冲突。一般情况下，BIOS 做到这一点很容易，因为它可以设置堆栈指针为装入的起始地址。但也不排除存在 BUGGY BIOS 的可能性。

有些 BIOS 不完全符合可启动的 CDROM 规范，比如 VirtualPC 的就是的。这类 BIOS 只是装入了一部分 GRLDR 扇区到内存，典型的可能只装入了一个扇区（2048 字节的大扇区）到内存。不过我们的代码已经替这些 BUGGY BIOS 打了补丁。只要这些 BIOS 能够设置正确的堆栈，不至于和装入内存中的 GRLDR 扇区数据产生冲突就 OK 了。

也就是说，上述第一种制作光盘的方法，应该没有多大问题了。这种方法很有可能适应于所有的 BIOS。

第二种方法本身就只要求 BIOS 装入一个 CDROM 扇区到内存（等同于 4 个 512 字节的小扇区）。这种方法是最保守的，没有理由会失败了。微软的 win2000 启动光盘就是这么做的，isolinux 和 stage2_eltorito 也都是这么做的。如果这种方法失败了，那么 win2000，isolinux 和 stage2_eltorito 应该都会失败的。

对于第二种方法，我们不需要 -boot-info-table 这个参数。但是允许你用这个参数（用了和没用是一样的，我们的引导代码将忽略由这个参数所传递的数据结构）。

对于第一种方法也一样，不需要 -boot-info-table 这个参数，同时也是允许你用这个参数（用了和没用是一样的，我们的引导代码将忽略由这个参数所传递的数据结构）。

这样，stage2_eltorito 就可以完全用 grldr 来代替了。

[edit]

脚本支持

GRUB4DOS中有实现了简单的脚本支持。目前实现了 && 和 || 两种操作：

command1 && command2

只有当 command1 的返回值是真时，command2 才被执行

command1 || command2

只有当 command1 的返回值是假时，command2 才被执行

目前不支持操作符的嵌入使用。

例子：

is64bit && default 0
is64bit || default 1

如果is64bit命令返回值是真，那么缺省的菜单项是0，否则，缺省的菜单项是1。

Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD"


Grub4dos命令索引 - Grub4Dos Wiki

Grub4dos命令索引

From Grub4Dos Wiki

Jump to: navigation, search
blocklist | 输出文件的块清单表达法。
boot | 引导已加载的操作系统或扇区链式加载器。
bootp | 通过BOOTP初试化网络设备。
cat | 显示指定文件的内容。
cdrom | 初始化或者停止所有的 ATAPI CDROM 设备。
chainloader | 加载扇区链式加载器。
cmp | 比较两个文件, 并且报告两者之间的不同的信息。
color | 改变菜单的颜色。
configfile | 将指定文件作为配置文件予以加载。
debug | 打开/关闭除错模式。
default | 把 NUM 项菜单设为缺省值。
device | 声明BIOS驱动器对应的实际物理设备。
dhcp | 通过DHCP初试化网络设备。
splashimage | 图形模式下载入背景图片文件。
foreground | 设置图形模式下的前景色。
background | 设置图形模式下的背景色。
clear | 清屏幕。
displayapm | 显示 APM BIOS 的相关信息。
displaymem | 显示 GRUB 所判断到的当前系统的内存分布，包括所有物理内存区域。
displaymem | 显示诸多文件的内容。
embed | 如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。
fallback | 如果调用当前的菜单项时出现错误，则转移到 NUM 项后重试。
commandline | 进入命令行提示符方式。
find | 在所有分区上查找文件名, 并显示包含该文件的设备。
fstest | 切换文件系统的试验模式。
geometry | 输出驱动器的相关信息。
halt | 关闭系统。
help | 显示内部命令的帮助信息。
hiddenmenu | 隐藏菜单。
hide | 通过在分区类型上置隐藏标志，隐藏指定分区。
ifconfig | 指定 IP 地址, 子网掩码, 网关和服务器地址。不带参数时，将显示当前的网络配置。
impsprobe | 探测 Intel 多处理器规范 1.1/1.4 配置表并使所找到的各处理器启动进入闭循环。
initrd | 加载Linux格式的初始化虚拟盘, 并设置必要的参数。
install | 安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。
ioprobe | 侦测指定设备的 I/O 端口号。
kernel | 尝试载入主引导影像文件。
lock | 如果用户未被认证，则终止命令的执行。
makeactive | 将 root 设备置为活动分区。
map | 对设备进行映射。
md5crypt | 产生一个 MD5 格式的密码。
module | 对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。
modulenounzip | 与 'module' 类似, 但是自动禁用了解压缩。
pager | 没有参数时，切换页模式。
partnew | 创建一个新的主分区。
parttype | 改变指定分区(PART)的分区类型(TYPE)。
password | 设置密码。
pause | 终止命令的运行，并给出一段信息。任意键按下后，将继续。
quit | 从 GRUB 命令行中退出。
rarp | 用 RARP 初始化网络设备。
read | 从内存的指定位置读取一个 32-bit 的值，并以十六进制形式显示出来。
write | 写一个 32 位的值 VAL 到内存地址 ADDR。
reboot | 重启系统。
fontfile | 指定中文字体文件，并切换到简体中文显示方式。
root | 设置根分区。
rootnoverify | 类似`root'指令, 但不测试安装该分区。
savedefault | 将当前项设置为默认的引导项。
serial | 初始化一个串口设备。
setkey | 改变键盘映射关系。
setup | 自动安装GRUB.
terminal | 选择一个终端。
terminfo | 指定终端的功能。
testload | 以多种不同的方式读取文件(由FILE指定)的整个内容，并予以比较，以测试文件系统的代码。
testvbe | 测试所指定(MODE)的 VBE 模式。
setvbe | 为后续的每个kernel命令行设置VBE模式。
tftpserver | 指定 TFTP 服务器的 IP 地址。
timeout | 设置在自动启动缺省菜单前所等待的秒数。
title | 命名菜单项。
unhide | 通过清除隐藏标志，解除指定分区(PARTITION)的隐藏。
uppermem | 强制指定仅有(KBYTES) KB 的上位内存。
vbeprobe | 侦测 VBE 的信息。
[edit]

blocklist

blocklist FILE

打印出文件 FILE 的“块清单”表达法（该表达法也是合法的 GRUB 文件名，并且完全等价于 FILE）。

[edit]

boot

boot

引导已加载的操作系统或扇区链式加载器。

[edit]

bootp

bootp [--with-configfile]

通过BOOTP初试化网络设备。如果使用了`--with-configfile'参数，此命令将会试图去加载一个特定的配置文件。

[edit]

cat

cat [--hex] [--skip=S] [--length=L] [--locate=STRING] FILE

显示指定文件的内容，或者显示文件中指定字符串的位置。

[edit]

cdrom

cdrom --add-io-ports=P | --init | --stop

初始化或者停止所有的 ATAPI CDROM 设备, 或者为一个可能的 ATAPI CDROM设备设置附加的 IO 端口。P 的高字指定设备控制寄存器组的端口基址，P 的低字指定设备命令寄存器组的端口基址。"

[edit]

chainloader

chainloader [--force] [--load-segment=LS] [--load-offset=LO]
 [--load-length=LL] [--skip-length=SL] [--boot-cs=CS] [--boot-ip=IP]
 [--ebx=EBX] [--edx=EDX] [--sdi] [--enable-a20] FILE

加载链式加载器 FILE。若指定了 --force, 则强制加载而不检查第一扇区 尾部的合法引导标签(55 AA)是否存在。LS:LO 用于指定有别于 0000:7C00 的启动映像加载地址。LL 用于指定启动映像的长度（在 512 字节至 640K 之间）。SL 用于指定装入启动映像之前需要从映像开头跳过的长度（以字节 计数）。CS:IP 用于指定让启动映像获得控制需要跳转到的地址。EBX/EDX 分别用于指定在启动映像获得控制的那一刻 EBX/EDX 寄存器应有的值。用 --sdi 可以强制把 FILE 当作 Windows XP 的一个内存启动文件格式(System Deployment Image)来对待(请参考微软相应文档)。如果你希望在控制传递给 启动映像时切断 CPU 的地址线 A20，可以用 --disable-a20 参数做到。

[edit]

cmp

cmp FILE1 FILE2

比较两个文件, 并且报告两者之间的不同的信息。

[edit]

color

color NORMAL [HIGHLIGHT]

改变菜单的颜色。Normal 用于指定菜单项的未选中时的颜色，HIGHLIGHT 则用于指定菜单项的被选中时的颜色。如果你未指定 HIGHLIGHT 色，那么我们将使用 NORMAL 的反色值。颜色值的格式是 "FG/BG"。FG 和 BG 是颜色的名称，如下：black(黑), blue(蓝), green(绿), cyan(青), red(红), magenta(粉红), brown(棕), light-gray(亮灰),dark-gray(暗灰), light-blue(浅蓝), light-green(淡绿), light-cyan(淡青), light-red(明红), light-magenta(浅红), yellow(黄) 和 white(白)。注意，BG 的值只能是前八个。另外，若想使用闪烁的前景色，你在 FG 前使用前缀 "blink-" 即可。

[edit]

configfile

configfile FILE

把文件 FILE 作为配置文件立即加载执行（只有当加载失败时才返回）。

[edit]

debug

debug

打开/关闭 DEBUG(调试、除错) 模式。

[edit]

default

default [NUM | `saved' | FILE]

设置默认启动的菜单入口项为 NUM (0 代表第一项)，或者由 savedefault 所保存的入口项（如果指定了关键字 saved），或者先前保存在文件 FILE 中的入口项。当指定了 FILE 时，后续的 savedefault 命令都将把入口项 保存到 FILE 中。

[edit]

device

device DRIVE DEVICE

声明BIOS驱动器对应的实际物理设备。这条命令只用于grub命令行。

[edit]

dhcp

dhcp

通过DHCP初试化网络设备。

[edit]

splashimage

splashimage FILE

图形模式下载入背景图片文件。

[edit]

foreground

foreground RRGGBB

设置图形模式下的前景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。这些数值都是用十六进制来表示的。

[edit]

background

background RRGGBB

设置图形模式下的背景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。这些数值都是用十六进制来表示的。

[edit]

clear

clear

清屏幕。

[edit]

displayapm

displayapm

显示 APM BIOS 的相关信息。

[edit]

displaymem

displaymem

显示 GRUB 所判断到的当前系统的内存分布，包括所有物理内存区域。

[edit]

dump

dump FROM TO

显示诸多文件的内容。注意，FROM 所指定的必须是一个 GRUB 文件，TO 所指定的必须是一个 OS 文件。这条命令只在 grub shell 中才有。

[edit]

embed

embed STAGE1_5 DEVICE

如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。如果是个FFS分区, 则可嵌入到该设备饿`引导代码'区中。并输出 Stage 1.5所占的扇区数。

[edit]

fallback

fallback NUM

进入无人干预启动模式：如果默认启动入口项出错失败，立即用入口项 NUM 来启动（这里的“入口项”与 default 命令中的“入口项”意义相同）。

[edit]

commandline

commandline

进入命令行提示符方式。

[edit]

find

find [--set-root] [--ignore-floppies] FILENAME

在所有分区上查找文件名, 并显示包含该文件的设备。如果使用了 --set-root 选项, 那么当在某个设备上找到 FILENAME 时, 立即停止查找, 并将此设备设定为新的 root 设备。如果指定了 --ignore-floppies 选项, 那么查找过程将略过所有的软盘。

[edit]

fstest

fstest

切换文件系统的试验模式。

[edit]

geometry

geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]

输出驱动器的相关信息. 在 grub shell 中, 你可以用这条命令设置驱动器 参数为任意值。如果你省略了总扇区数, 它将由 C/H/S 的值自动计算出来。

[edit]

halt

halt [--no-apm]

关闭系统。如果APM(高级电源管理)功能存在，将使用 APM BIOS 关闭系统，除非指定了　`--no-apm' 选项。

[edit]

help

help [--all] [PATTERN ...]

显示内部命令的帮助信息。要查看所有命令的帮助，请使用 `--all' 参数。

[edit]

hiddenmenu

hiddenmenu

隐藏菜单。

[edit]

hide

hide PARTITION

通过在分区类型上置隐藏标志，隐藏指定分区。

[edit]

ifconfig

ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]

指定 IP 地址, 子网掩码, 网关和服务器地址。不带参数时，将显示当前的网络配置。

[edit]

impsprobe

impsprobe

探测 Intel 多处理器规范 1.1/1.4 配置表并使所找到的各处理器启动进入 闭循环。

[edit]

initrd

initrd FILE [ARG ...]

加载Linux格式的初始化虚拟盘, 并设置必要的参数。

[edit]

install

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

安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。如果使用了选项'd', STAGE1总是试图使用安装STAGE2的驱动器, 而不是启动盘。STAGE2将加载在指定地址上, 如果未声明地址, 则自动检测。如果使用了选项 'p' 或给出了配置文件, 将修改STAGE2的第一个数据块, 修正实际Stage2启动时使用的配置文件位置。对于Stage 1.5, 该值为Stage 2的路径。如果安装的是Stage 1.5, 且指定了实际配置文件, 则将该配置文件路径写入Stage2中。

[edit]

ioprobe

ioprobe DRIVE

侦测指定设备的 I/O 端口号。

[edit]

kernel

kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]

尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。使用此命令以前，内核所用到的模块应该被重新载入。参数 --type 用于说明内核的类型，包括 "netbsd", "freebsd", "openbsd", "linux", "biglinux" 和 "multiboot"。参数 --no-mem-option 用于说明不必自动传递 Linux 的内存参数。

[edit]

lock

lock

如果用户未被认证，则终止命令的执行。

[edit]

makeactive

makeactive

将 root 设备置为活动分区。当然，此命令只对 PC 的硬盘主分区有效。

[edit]

map

map [--status] [--mem[=RESERV]] [--hook] [--unhook] [--rehook] [--floppies=M] [--harddrives=N] [--ram-drive=RD] [--rd-base=ADDR] [--rd-size=SIZE] [[--read-only] [--fake-write] [--unsafe-boot] [--disable-chs-mode] [--disable-lba-mode] [--heads=H] [--sectors-per-track=S] TO_DRIVE FROM_DRIVE]"

对设备进行映射。这对于扇区链式引导是很有用的功能，比如 DOS。这里，目 的驱动器 TO_DRIVE 可以是一个磁盘文件（注意，当没有指定 --mem 时，这 要求磁盘文件是连续存放于介质中的。另外，若使用了 --read-only 参数, 该功能将使仿真磁盘处于只读; 若使用了 --fake-write 参数，该功能将使 仿真磁盘处于假写，即简单地返回“写入”成功，但实际上不执行写入操作; 若使用了 --unsafe-boot 参数，该功能将使仿真磁盘的第一扇区处于可写; （默认时仿真磁盘的第一扇区被保护，不能经由 int13/AH=03h 而写入）。 若使用了 --disable-chs-mode 参数，CHS 访问功能将被禁用; 若使用了 --disable-lba-mode 参数， LBA 访问功能将被禁用; H 和 S 指定了虚拟磁 盘的物理参数。若使用了 --status, --hook, --unhook, --rehook, --floppies, --harddrives, --ram-drive, --rd-base, --rd-size, --memdisk-raw, --safe-mbr-hook, --int13-scheme 诸参数之一，那么其它 的命令行参数将被忽略。--floppies 用于修改 BIOS 数据区 0x410 处的软盘 个数位域。--harddrives 用于修改 BIOS 数据区 0x475 处的硬盘个数字节。 --mem 参数指定使用内存来仿真磁盘（此时 TO_DRIVE 可以是 gzip 格式的压 缩文件）。--ram-drive 用于修改代表内存盘的 BIOS 磁盘号码。--rd-base 指定内存盘的起始地址。--rd-size 指定内存盘的大小（以字节计数）。如果 RESERV <= 0, 那么至少保留 (-RESERV * 512) 字节的内存用来存放该内存盘 的扇区数据；如果 RESERV > 0, 该内存盘将起始于绝对物理地址 (RESERV * 512)，而终止于该起始地址所在的连续内存块的结尾（通常等于或 接近于物理内存的结尾）。

[edit]

md5crypt

md5crypt

产生一个 MD5 格式的密码。

[edit]

module

module FILE [ARG ...]

为多重启动映像格式的引导映像加载启动模块文件 FILE（对该文件的内容不 作任何解释, 因此使用这条命令的用户必须了解所提到的内核映像的要求）。 其余参数作为“模块命令行”传递, 就像 kernel 命令那样。

[edit]

modulenounzip

modulenounzip FILE [ARG ...]

与 module 类似, 但是自动禁用了解压缩。

[edit]

pager

pager [FLAG]

没有参数时，切换页模式。如果使用了 FLAG 参数，那么它为`on' 时为开启, 为 `off' 时为关闭。

[edit]

partnew

partnew PART TYPE START LEN

创建一个新的主分区。START 为起始扇区号，LEN 为其包含的扇区数，TYPE 为其分区类型。

[edit]

parttype

parttype PART TYPE

改变指定分区(PART)的分区类型(TYPE)。

[edit]

password

password [--md5] PASSWD [FILE]

设置密码。当其处于菜单文件的首项时，将禁用所有的交互式菜单编辑功能，包括编辑菜单项(`e`)/进入命令行(`c`)。当正确输入密码 (由PASSWD指定)后，载入新的菜单文件(由FILE指定)。如果你没有指定 FILE 项，那么上述被禁用的功能将被启用了。当然，你也可以将此命令用到某个菜单项里，用以提高系统安全性。参数 --md5 说明密码(PASSWD)是使用md5crypt 加密的。

[edit]

pause

pause [--wait=T]  [MESSAGE ...]

打印信息 MESSAGE，然后等待，直到按下一键，或者 T 秒过后，命令结束， 控制返回到 GRUB，继续执行下一条命令。

[edit]

quit

quit

如果 GRUB 先前是从 DOS 启动的，就返回到 DOS。

[edit]

rarp

rarp

用 RARP 初始化网络设备。

[edit]

read

read ADDR

从内存的指定位置读取一个 32-bit 的值，并以十六进制形式显示出来。

[edit]

write

write ADDR VAL

写一个 32 位的值 VAL 到内存地址 ADDR。

[edit]

reboot

reboot

重启系统。

[edit]

fontfile

fontfile FILE

指定中文字体文件，并切换到简体中文显示方式。

[edit]

root

root [DEVICE [HDBIAS]]

设置根分区。设置根分区为指定设备(DEVICE), 然后尝试挂接该分区以得到分区大小(用于在ES:ESI中传递, 扇区链式启动方式要求这样)。BSD 驱动类型用于启动 BSD 的核心启动), 和确定 BSD 子分区所在的 PC 分区。可选的磁盘偏移参数, 用于 BSD 核心确定有多少个控制器在当前控制器前。比如: 假设同时有一个IDE和SCSI盘, 而BSD根分区在 SCSI盘上, 那么磁盘偏移就为1。

[edit]

rootnoverify

rootnoverify [DEVICE [HDBIAS]]

类似于“root”指令, 但不尝试挂接该分区。这用于有些操作系统安装在 GRUB 能访问到的磁盘区域之外，或者其文件系统不能被 GRUB 识别出来， 但你仍然想把这个设备强制设置为 root 设备的情况。说明：这样一来， 原来在 root 命令中尝试挂接的那些项目，现在将不起作用了。

[edit]

savedefault

savedefault

如果没有指定参数，就把当前菜单项保存为默认的引导项。如果指定了参数 NUM，那么保存的就是它。如果指定的是关键字 fallback，那么保存的是 fallback 命令所指定的菜单项。如果 T 不是 0，将提示用户按下 Y 键来 确认写盘操作，如果在 T 秒之内没有按键，或者按键不是 Y，那么写盘保存 的操作将被取消。

[edit]

serial

serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]

初始化一个串口设备。UNIT 用于指定要使用的串口设备 (如，0 == COM1); PORT 用于指定端口号; SPEED 用于指定通讯的数率; WORD 为字长; PARITY 为奇偶类型(取 `no', `odd' 和 `even' 之一的值。); STOP 是停止位的长度值; 选项 --device 仅用于命令行模式，用以指定 tty 设备的文件名。默认值是这样的，COM1, 9600, 8N1。

[edit]

setkey

setkey [TO_KEY FROM_KEY]

改变键盘映射关系。把FROM_KEY映射为TO_KEY。这里的键必须是字母, 数字, 和以下特殊键: escape(转义), exclam(!), at(@), numbersign(#), dollar($), parenright ()) , caret(^), ampersand(&), asterisk(*), plus(+), percent(%), minus(-), underscore(_), equal(=), parenleft[(], backspace(退格), tab(制表), bracketleft([), braceleft({), bracketright(]), braceright(}), enter(回车), control(控制), semicolon(;), colon(:), quote('), doublequote("), slash(/), backquote(`), tilde(~), shift(换档), backslash(\), bar(|), comma(,), less(<), period(.), greater(>), question(?), alt(交互), space(空格), capslock(大写), Fx(功能键) 和 delete(删除)。

[edit]

setup

setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]

自动安装GRUB. 这条命令使用更灵活的install命令将GRUB安装到指定设备上。如果给出了映象设备,将在该设备寻找GRUB,否则使用缺省的根设备。根设备可用 root指令指定。如果你确认系统的 BIOS 应该支持 LBA 模式, 但是 GRUB 却没有工作于该模式, 则请指定 `--force-lba' 参数。如若你在命令行中已安装了一次 GRUB 可是，你却无法卸载 GRUB 程序所在的分区，请指定 `--stage2' 参数。

[edit]

terminal

terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]

选择一个终端。当指定了多个终端以后, 按任意键方可继续操作。如果控制台和串口都被指定了, 那么你首先在其中按下键盘的终端将被首先选中。如果没有指定任何参数, 那么此命令将显示出当前的终端设置; 参数 --dumb 用以指定一个哑终端, 否则即为 vt100 兼容型; 若使用了 --no-echo 参数, 屏幕上将不会回显输入的字符; 若使用了 --no-edit 参数, the BASH-like 的编辑功能将被禁用; 若使用了 --timeout 参数, 该命令将等待数秒钟(由SECS指定); 可使用 --lines 指定最大的行数; 可使用 --silent 选项关闭消息显示。

[edit]

terminfo

terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ] [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]

指定终端的功能。如果此终端为 vt100 兼容型的，则可指定换码顺序 (即使用 \e 代表 ESC, ^X　代表控制码); 在未给任何参数的情况下，将给出当前配置信息。

[edit]

testload

testload FILE

描述: 以多种不同的方式读取文件(由FILE指定)的整个内容，并予以比较，以测试文件系统的代码。输出看起来会有点儿混乱，但是，如果没有错误的话，`i=X, filepos=Y' 里的 X 和 Y 最后必得相等。如果测试即告成功，下一步即可试图载入内核了。

[edit]

testvbe

testvbe MODE

测试所指定(MODE)的 VBE 模式。

[edit]

setvbe

setvbe MODE_3D 为后续的每个 kernel 命令行设置 VBE 模式 MODE_3D(例如 1024x768x32)。

[edit]

tftpserver

tftpserver IPADDR

指定 TFTP 服务器的 IP 地址。

[edit]

timeout

timeout SEC

设置在自动启动缺省菜单前所等待的秒数。

[edit]

title

title [NAME ...]

命名菜单项。

[edit]

unhide

unhide [PARTITION]

通过清除隐藏标志，解除指定分区(PARTITION)的隐藏。默认的分区是当前的根设备。

[edit]

uppermem

uppermem KBYTES

强制 GRUB 承认系统中只安装了 (KBYTES) KB 的上位内存。略过任何形式的 系统内存地址区域查找步骤。

[edit]

vbeprobe

vbeprobe [MODE]

侦测 VBE 的信息。如果指定了一个模式(MODE 不为空)，则仅显示其信息

Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos%E5%91%BD%E4%BB%A4%E7%B4%A2%E5%BC%95"
Views
  • Article
  • Discussion
  • Edit
  • History
Personal tools
  • Log in / create account
Navigation
  • Main Page
  • Community portal
  • Current events
  • Recent changes
  • Random page
  • Help
  • Donations
Toolbox
  • What links here
  • Related changes
  • Upload file
  • Special pages
  • Printable version
  • Permanent link
  • This page was last modified 16:30, 13 March 2007.
  • This page has been accessed 600 times.
  • Content is available under .
  • Privacy policy
  • About Grub4Dos Wiki
  • Disclaimers


Grubinst使用介绍 - Grub4Dos Wiki

Grubinst使用介绍

From Grub4Dos Wiki

Jump to: navigation, search

Contents

  • 1 1. Introdution
  • 2 1. 介绍
  • 3 2. Difference between grubinst and bootlace.com
  • 4 2. grubinst跟bootlace.com的区别
  • 5 3. Usage
  • 6 3. 用法及示例
  • 7 4. Compilation
  • 8 4. 编译方法
  • 9 5. 相关网站
[edit]

1. Introdution

This utility is used to install GRUB4DOS to the MBR of hard disk or image file.

grubinst.exe is a console mode program. It mimics the behavior of the DOS/Linux utility bootlace.com from TinyBit's GRUB4DOS package. But unlike bootlace.com, grubinst is writen completely in C and can be compiled to run in OSs like Windows NT/2K/XP, Linux and FreeBSD.

grubinst_gui.exe is a GUI frontend to grubinst.exe. It provides a friendly interface to users who are not familiar whith the command line environment. Currently, grubinst_gui.exe only runs in Windows OSs.

Please note that these utilities only install MBR, it DOES NOT copy GRLDR to your partition or configure menu.lst, neither does it modify boot.ini to enable booting from the NT boot manager. To know more about such things, please refers to README_GRUB4DOS.txt which contains information about the GRUB4DOS package.

Also note that the current version of grubinst doesn't support modify the MBR of hard disk in Windows 95/98/ME. For those OSs, bootlace.com should be used instead.

[edit]

1. 介绍

grubinst是一个用来将GRUB4DOS安装到硬盘的MBR（或者分区的引导扇区）以及映像文件中的工具。

grubinst.exe是一个命令行方式的程序，它的功能基本上与不点的GRUB4DOS发行包中的bootlace.com（可以运行在纯DOS或者Linux环境）相同，但是跟bootlace.com不同，grubinst完全是用C语言开发的，能够在Windows NT/2K/XP、Linux和FreeBSD等操作系统下编译并运行。

grubinst_gui.exe是grubinst.exe的图形界面shell程序，对于那些不熟悉命令行操作的用户来说，它提供了更友好的图形操作界面，目前，grubinst_gui.exe只能运行在Windows操作系统（事实上是只能运行在NT/2K/XP环境）下。

另外请注意，当前版本的grubinst不支持在Windows 95/98/ME下修改硬盘的MBR，对于这些操作系统，请使用bootlace.com。

[edit]

2. Difference between grubinst and bootlace.com

In bootlace.com, hard disk device is represented by numbers, 0x80 is the first hard disk, 0x81 is the second, etc. In grubinst, hard disk device is represented using special filename, (hd0), (hd1), etc. Floppy device is not supported yet.

grubinst doesn't support install GRUB4DOS to a partition, this would be fixed in furture releases.

grubinst has a few new options which are used mainly to restore the old MBR.

--save-mbr=FILENAME

This option is used to save the original MBR to FILENAME

--restore-mbr=FILENAME

This option is used to restore MBR from previous saved FILENAME

--restore-prevmbr

This option is used to restore the old MBR saved in the second sector of the hard disk or image file.

Normally, the original MBR is only one sector long, it's stored in the second sector of the new GRLDR MBR. You can restore it using --restore-prevmbr option. However, if the original MBR is longer than one sector, for instance, you have other boot manager installed, then GRLDR MBR dones't have room to hold it. In this case, you should use --save-mbr=FILENAME to save the original MBR to an external file, and use --restore-mbr=FILENAME to restore it.

[edit]

2. grubinst跟bootlace.com的区别

在bootlace.com里，硬盘盘等设备只能用设备的BIOS识别号来表示，如0x80表示第一块硬盘，0x81表示第二块硬盘等等。而在grubinst中，硬盘则可以用特定的设备文件名来表示（跟grub的传统类似），如(hd0), (hd1)...。软驱暂时还不支持这种表示方式。

grubinst支持几个新的选项，主要用于恢复原来的MBR。

--save-mbr=FILENAME

This option is used to save the original MBR to FILENAME 这个选项用于保存原来的MBR到文件中。

--restore-mbr=FILENAME

这个选项用来从前面保存的文件中恢复原来的MBR。

--restore-prevmbr

这个选项用来恢复保存在硬盘或者映像文件中第二个扇区的原来的MBR。

正常情况下，原来的MBR只有一个扇区，它被保存在新的GRLDR MBR中的第二个扇区中。你可以用--restore-prevmbr选项来恢复它。然而，如果原来的MBR的长度超过一个扇区，例如，你安装了别的引导管理软件，那么GRLDR MBR就没有足够的空间保存原来的MBR。在这种情况下，你应该使用--save-mbr=FILENAME将原来的MBR保存到一个外部文件中，需要时再使用--restore-mbr=FILENAME选项从保存的文件中恢复它。

[edit]

3. Usage

from grubinst version: 1.1

grubinst [OPTIONS] DEVICE_OR_FILE

OPTIONS:

       --help,-h               Show usage information

       --pause                 Pause before exiting

       --version               Show version information

       --verbose,-v            Verbose output

       --list-part,-l          List all logical partitions in DEVICE_OR_FILE

       --save=FN,-s=FN         Save the orginal MBR/BS to FN

       --restore=FN,-r=FN      Restore MBR/BS from previously saved FN

       --restore-prevmbr,-r    Restore previous MBR saved in the second sector
                               of DEVICE_OR_FILE

       --read-only,-t          do everything except the actual write to the
                               specified DEVICE_OR_FILE. (test mode)

       --no-backup-mbr         do not copy the old MBR to the second sector of
                               DEVICE_OR_FILE.

       --force-backup-mbr      force the copy of old MBR to the second sector
                               of DEVICE_OR_FILE.(default)

       --mbr-enable-floppy     enable the search for GRLDR on floppy.(default)

       --mbr-disable-floppy    disable the search for GRLDR on floppy.

       --mbr-enable-osbr       enable the boot of PREVIOUS MBR with invalid
                               partition table (usually an OS boot sector).
                               (default)

       --mbr-disable-osbr      disable the boot of PREVIOUS MBR with invalid
                               partition table (usually an OS boot sector).

       --duce                  disable the feature of unconditional entrance
                               to the command-line.

       --boot-prevmbr-first    try to boot PREVIOUS MBR before the search for
                               GRLDR.

       --boot-prevmbr-last     try to boot PREVIOUS MBR after the search for
                               GRLDR.(default)

       --preferred-drive=D     preferred boot drive number, 0 <= D < 255.

       --preferred-partition=P preferred partition number, 0 <= P < 255.

       --time-out=T,-t=T       wait T seconds before booting PREVIOUS MBR. if
                               T is 0xff, wait forever. The default is 5.

       --hot-key=K,-k=K        if the desired key K is pressed, start GRUB
                               before booting PREVIOUS MBR. K is a word
                               value, just as the value in AX register
                               returned from int16/AH=1. The high byte is the
                               scan code and the low byte is ASCII code. The
                               default is 0x3920 for space bar.

       --key-name=S            Specify the name of the hot key.

       --floppy,-f             if DEVICE_OR_FILE is floppy, use this option.

       --floppy=N              if DEVICE_OR_FILE is a partition on a hard
                               drive, use this option. N is used to specify
                               the partition number: 0,1,2 and 3 for the
                               primary partitions, and 4,5,6,... for the
                               logical partitions.

       --sectors-per-track=S   specifies sectors per track for --floppy.
                               1 <= S <= 63, default is 63.

       --heads=H               specifies number of heads for --floppy.
                               1 <= H <= 256, default is 255.

       --start-sector=B        specifies hidden sectors for --floppy=N.

       --total-sectors=C       specifies total sectors for --floppy.
                               default is 0.

       --lba                   use lba mode for --floppy. If the floppy BIOS
                               has LBA support, you can specify --lba here.
                               It is assumed that all floppy BIOSes have CHS
                               support. So you would rather specify --chs.
                               If neither --chs nor --lba is specified, then
                               the LBA indicator(i.e., the third byte of the
                               boot sector) will not be touched.

       --chs                   use chs mode for --floppy. You should specify
                               --chs if the floppy BIOS does not support LBA.
                               We assume all floppy BIOSes have CHS support.
                               So it is likely you want to specify --chs.
                               If neither --chs nor --lba is specified, then
                               the LBA indicator(i.e., the third byte of the
                               boot sector) will not be touched.

       --install-partition=I   Install the boot record onto the boot area of
       -p=I                    partition number I of the specified hard drive
                               or harddrive image DEVICE_OR_FILE.

       --boot-file=F,-b=F      Change the name of boot file.

       --load-seg=S            Change load segment for boot file.

       --grub2,-2              Load grub2 kernel g2ldr instead of grldr.

       --output,-o             Save embeded grldr.mbr to DEVICE_OR_FILE.

Example 1: Install GRLDR MBR to the first hard disk

grubinst (hd0)

Example 2: Install GRLDR MBR to the disk image disk.dsk

grubinst disk.dsk

Example 3: Restore the old one sector MBR of the first hard disk

grubinst --restore-prevmbr (hd0)

Example 4: Install GRLDR MBR to the first hard disk, and save the old MBR as MBR.sav

grubinst --save-mbr=MBR.sav (hd0)

Example 5: Restore MBR from previous save file MBR.sav

grubinst --restore-mbr=MBR.sav (hd0)

Example 6: Load GRUB only if you press space in the first 10 second of booting.

grubinst --boot-prevmbr-first --time-out=10 (hd0)

[edit]

3. 用法及示例

取自grubinst 1.1的--help。(by Climbing)

 grubinst  [选项]  设备或文件

选项:

      --help,-h               显示本帮助

       --pause                 退出前暂停

       --version               显示grubinst版本信息

       --verbose,-v            输出详细信息

       --list-part,-l          列出设备或者文件中的所有分区信息

       --save=FN,-s=FN         保存原来的MBR/引导扇区到文件FN中。

       --restore=FN,-r=FN      从前面备份的FN中恢复原来的MBR/引导扇区

       --restore-prevmbr,-r    恢复保存在设备或者文件第二扇区中的原来的MBR

      --read-only,-t          只是模拟操作，没有真正的写操作（测试模式）

       --no-backup-mbr         不在第二扇区中备份原来的MBR。

       --force-backup-mbr      强制备份原来的MBR到第二扇区（默认选项）

      --mbr-enable-floppy     在软驱上搜索grldr（默认选项）

      --mbr-disable-floppy    禁止搜索软驱上的grldr

      --mbr-enable-osbr       当分区表非法时（通常是某操作系统的引导扇区），仍然启动原来的MBR（默认选项）

      --mbr-disable-osbr      当分区表非法时（通常是某操作系统的引导扇区），禁止启动原来的MBR。

      --duce                  （不明白，无法翻译）disable the feature of unconditional entrance
                               to the command-line.

      --boot-prevmbr-first    在搜索GRLDR之前尝试首先启动原来的MBR

      --boot-prevmbr-last     在启动原来的MBR之前先搜索GRLDR（默认选项）

      --preferred-drive=D     优先启动磁盘编号, 0 <= D < 255.

      --preferred-partition=P 优先启动分区编号, 0 <= P < 255.

      --time-out=T,-t=T       在启动原来的MBR之前等待T秒，如果T是0xff，无限等待，默认等待5秒

      --hot-key=K,-k=K        如果在启动原来的MBR之前按下了指定键，则启动GRUB。K的长度为一个
                                  字(word)，也就是int16/AH=1中断的AX寄存器值。高位字节是对应按键
                                  的扫描码，低位字节是ASCII码。默认按键是0x3920,也就是空格键。

      --key-name=S            指定热键的显示名

      --floppy,-f             如果安装目标是软驱，则指定这个选项。

      --floppy=N              如果安装目标是硬盘的某个分区，则指定这个选项。N用来指定分区编号：0,
                              1,2和3对应主分区，4,5,6,...对应逻辑分区。

      --sectors-per-track=S   对--floppy选项指定每磁道扇区数，1 <= S <= 63, 默认是63.

      --heads=H               对--floppy选项指定磁头数，1 <= H <= 256, 默认是255.

      --start-sector=B        对--floppy=N选项指定隐藏扇区数。

      --total-sectors=C       对--floppy选项指定总扇区数，默认是0。

      --lba                   对--floppy选项使用LBA方式。如果软驱的BIOS支持LBA，你可以指定这个选项。
                                  按规定所有的软驱BIOS都支持CHS方式，所以最好指定--chs选项。如果既没指定
                                  --lba也没指定--chs，则LBA指示字节（一般是启动扇区第3字节）的值不会被改
                                  变。

      --chs                   对--floppy选项使用chs方式。如果你的软驱BIOS不支持LBA方式，你应该指定
                                  --chs选项。我们假定所有的软驱BIOS都支持CHS方式，所以推荐使用--chs选项。
                                  如果既没指定--lba也没指定--chs，则LBA指示字节（一般是启动扇区第3字节）
                                  的值不会被改变。

      --install-partition=I   安装引导扇区到指定硬盘（或硬盘映像）的分区I。
       -p=I

      --boot-file=F,-b=F      改变默认启动文件名（默认是grldr）。

      --load-seg=S            改变启动文件的默认内存加载段（默认是0x2000:0）。

      --grub2,-2              装载grub2的内核g2ldr而不是grldr。

      --output,-o             输出内置的grldr.mbr（受-b参数的影响）。

示例 1: 安装GRLDR MBR到第一个硬盘

grubinst (hd0)

示例 2: 安装GRLDR MBR 到磁盘映像文件disk.dsk

grubinst disk.dsk

示例 3: 恢复第一块硬盘的单扇区MBR

grubinst --restore-prevmbr (hd0)

示例 4: 安装GRLDR MBR到第一块硬盘并保存原来的MBR到MBR.sav文件中。

grubinst --save-mbr=MBR.sav (hd0)

示例 5: 从保存的MBR.sav中恢复原来的MBR。

grubinst --restore-mbr=MBR.sav (hd0)

示例 6: 在启动时10秒内按下空格才加载GRUB

grubinst --boot-prevmbr-first --time-out=10 (hd0)

[edit]

4. Compilation

To compile the program, you need the GCC toolkit in Linux/FreeBSD, and mingw or Visual C++ 6.0 in Windows NT/2K/XP.

Compile using mingw:

make -f Makefile.mgw

Compile using Visual C++ 6.0:

nmake -f Makefile.vc6

Compile using GCC toolkit in Linux:

make -f Makefile.lnx

Compile using GCC toolkit in FreeBSD:

make -f Makefile.bsd

The binary pacakge is built using mingw.

[edit]

4. 编译方法

要编译grubinst，在Linux/FreeBSD下你需要GCC，在Windows NT/2K/XP下你需要mingw或者Visual C++ 6.0。

mingw:

make -f Makefile.mgw

Visual C++ 6.0:

nmake -f Makefile.vc6

Linux GCC:

make -f Makefile.lnx

FreeBSD GCC:

make -f Makefile.bsd

这里提供的二进制代码使用mingw编译。

[edit]

5. 相关网站

[http://grub4dos.sourceforge.net/	grubinst和WINGRUB主页]
[http://grub4dos.jot.com/		由不点维护的最新版GRUB4DOS项目包]
[http://bbs.znpc.net/			时空论坛有GRUB4DOS专区（中文）]
[http://grub.linuxeden.com/		由不点提供的与GRUB4DOS相关的各种信息（中文）]

Retrieved from "http://grub4dos.sourceforge.net/wiki/index.php/Grubinst%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D"


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶使用

 3.2 菜单内置

 对于多数没有或很少接触过linux的windows用户来说，刚开始使用grub时离不开菜单。也就是说，使用grub前，我们要准备menu.lst文件。而且有了菜单文件，使用grub4dos也更加方便。【参看入门篇中的1.4 如何使用grub4dos部分】

通常，我们使用的菜单文件是外置的（一般保存在X:\， X:\boot\grub，X:\grub目录下。），这样菜单文件易被修改。把菜单内置，使目录下文件数减少，显得利落，也能提高安全性，足以应付一些没接触过grub4dos的，或者对grub4dos了解很少的人。

官方提供菜单导入/导出的工具grubmenu。【软件下载参看入门篇中的1.2 如何获得grub4dos最新版】

准备菜单文件menu.lst，新版grldr和grubmenu.exe，保存到同一目录，进入命令行模式，输入:

grubmenu import grldr menu.lst

 导出内置菜单，输入：

grubmenu export grldr menu0.lst

 也可把menu.lst内置到grub.exe，用法类似。

菜单内置后，就可删除目录下的menu.lst了。

【提示：菜单文件建议小于4k，超过部分将被忽略。】
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶篇

 3.3a 使用个性化grub4dos文件名(grubinst)

 grub的核心文件是grldr/grldr.mbr，入门篇中介绍了“通过Windows NT的启动菜单进入grub4dos”，即在boot.ini中加入grldr项；以及“通过Windows VISTA的启动菜单进入grub4dos”，即在BCD中加入grldr.mbr项。

随着grub4dos影响的日益扩大，基于grub4dos的工具也越来越多，比如影响较大的一键ghost，矮人DOS工具箱，MAXDOS等等（本人的“GGhost一键恢复”也是基于grub4dos的）。为避免冲突，这些软件多数采用了修改grldr文件名的方式。修改成个性化文件名，除了自己重新编译，一般要采用暴力修改的方式进行。显然这对于一般使用者来说，操作上存在一定难度，易造成软件无法运行，或带来不可预知的bug。

不过，新版grubinst[2007-07-16(r17)]已全面支持自己修改外部grldr/grldr.mbr文件名，这对于初学者来说无疑是个福音。

采用grubinst，你也能简单可靠地修改成个性化文件名了。

下面以把grldr改名为mygrldr为例进行说明。

首先把grldr复制到C:\，并改名为mygrldr，
然后在grubinst目录下，执行以下命令：

grubinst -e -b=mygrldr C:\mygrldr

 这样boot.ini中就可相应改成：

c:\mygrldr="My GRUB4DOS"

 也可以用grldr.mbr引导，比如把grldr.mbr改名为mygrldr.mbr，执行：

grubinst -e -b=mygrldr C:\mygrldr.mbr

 启动项中加入：

C:\mygrldr.mbr="My GRUB4DOS

 相应修改BCD文件后，Vista系统中也能使用个性化文件名了。

【提示：grldr需7-10或以后的版本。遗憾的是，grubinst已不支持最新版grldr。】
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶篇

 3.3b 用批处理自动给grldr改名 (适用于最新版grldr）

 警告： 最后的“注意事项”，看不懂及不会操作的，不要使用此方法，否则后果自负。

由于grubinst久未更新，已无法自动给grldr改名，现在要改的话，一般只能用UltraEdit等暴力修改。

以下方法可实现批处理自动给grldr改名。
所需工具：

diskrw （或dd for windows）
fr(find and replace Ver 2.1.1.120) （或strw）
bootlace

思路：读取mbr到文件-->安装grub到文件-->字符替换-->写回mbr

具体操作：
---------------------------------------------
一，安装到MBR：（热键F8，个性化文件名myldr）

@echo off
rem by lianjiang
if exist 018.bin del 018.bin >nul

::读取mbr到文件
diskrw 0 0 18 /s 018.bin /y
type 018.bin|find "Missing MBR-helper">nul &&echo.&&echo MBR中已安装有grub，请卸载后再使用。&&echo. &&pause&&goto exit

::用bootlace安装grub到文件 (F8)
copy 018.bin 018_0.bin /y >nul
bootlace --force-backup-mbr --boot-prevmbr-first --time-out=3 --hot-key=0x4200 --mbr-disable-floppy 018.bin

::替换字符grldr-->myldr
copy 018.bin 018_1.bin
fr 018.bin -f:grldr -t:myldr
fr 018.bin -f:GRLDR -t:MYLDR

copy grldr myldr /y >nul
fr myldr -f:grldr -t:myldr
fr myldr -f:GRLDR -t:MYLDR

::写回硬盘mbr
diskrw 0 0 18 /r 018.bin /y

:exit

 二，安装到启动项，只需以下两行：

fr myldr -f:grldr -t:myldr
fr myldr -f:GRLDR -t:MYLDR

 然后把myldr复制到启动盘。

注意事项：
1，个性化文件名的字符数，最好保持不变，用5个；
否则要用空格补齐，再加上引号括上（尚未验证是否可行）。
2，已把grub装到mbr的，应先卸载。
3，万一出现问题，请把备份的mbr（018_0.bin）写回。

需要工具的，网盘下载：http://lianjiang2004.ys168.com
---------------------------------------------

相关资料参看：

在WIN系统下使用BOOTLACE进行安装

grubinst 的问题，以及如何用bootlace来解决

2008.11.29 Dsptw 更新

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶篇

 3.4 安装WinPE到逻辑分区

 在应用篇的硬盘上的应用中介绍了“2.1.2 启动WinPE”，即通过grub4dos启动硬盘上的WinPE来进行系统维护。该法要求核心文件保存到主分区。

下面的方法能完全摆脱主分区的限制，可把所有的有关WinPE的启动文件都放在其它分区上。

首先参照“2.1.2 启动WinPE”中的介绍，准备ntdetect.com、ldrxpe（由setupldr.bin改名而来）、winpe.is_和winnt.xpe四个主要文件，置于任一分区的根目录；

接下来编辑menu.lst文件。添加以下内容：

【下面以放置于第一硬盘第一逻辑分区（一般是D:\）为例进行说明】

title Micro Windows XPE (by LaoMaotao) [hd(0,4)]
map (hd0,4)+1 (hd0)
map --hook
find --set-root /ldrxpe
chainloader /ldrxpe

关于GRUB对设备的命名方法，可参看“入门篇”中的“1.4 如何使用grub4dos”。

【注：方法来源】用grub启动任意分区上的PE获得成功（dylneil）
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶篇

 3.5 利用savedefault命令传递参数的方法与应用

 众所周知，BCDW有传递参数的功能，遗憾的是，只能用于光盘/ISO启动。
grub4dos作为一个启动管理器，功能强大，但可惜没有传递参数的功能。

时空论坛看到有人提出了此问题，zw2312914给出了解决的思路与办法。
感觉思路巧妙，是活学活用的典型，有推广应用价值。

 Public问：

就是能否在 menu.lst 文件里面设置怎样的路径链接，来直接运行 .img 里面的批处理程序吗？
比如说 我有个dos.img 里面有 PQ.bat来运行魔术分区软件，DM.bat来运行DM程序，gho.bat来运行Ghost自动备份C盘的操作等等。

我想在menu.lst 里面编辑一个菜单项，第1项加载PQ.bat，第2项加载DM.bat，第3项加载gho.bat，但是这3个bat文件又都是同在一个dos.img里面的，（如果在各自不同的img文件里面的当然可以实现），请问一下这个有办法解决吗？？

 zw2312914答：

 第一个问题的实质是grub4和dos（操作系统）之间的参数传递的问题。
思考了一个方法，核心就是使用grub4目前唯一一个在文件系统内的写操作命令 savedefault 。然后在dos（操作系统）下对savedefault命令所保存的值进行判断，最后调用相应的批处理。 这个方法应该比写内存然后引导到dos（操作系统），更简洁和合理，而且也许扩展应用较大。
以楼主问题为例：

1.复制grub4dos下载包中的default文件到镜像中（镜像名是dos.img为例），并把default更名为default.txt。
2.在menu.lst中参照以下菜单项改写

title PQ.bat运行魔术分区软件
map --mem /dos.img (fd0)
map --hook
chainloader (fd0)+1
root (fd0)
default (fd0)/default.txt
savedefault 11
boot

title DM.bat来运行DM程序
map --mem /dos.img (fd0)
map --hook
chainloader (fd0)+1
root (fd0)
default (fd0)/default.txt
savedefault 22
boot

title 加载gho.bat
map --mem /dos.img (fd0)
map --hook
chainloader (fd0)+1
root (fd0)
default (fd0)/default.txt
savedefault 33
boot

3.在dos中增加一个bat，用来判断default.txt的开头字符，并根据这个字符值，调用需要加载的bat。

例如，choose.bat:
@echo off
find "11" a:\defaut.txt > nul
if not errorlevel 1 a:\PM.bat
find "22" a:\defaut.txt > nul
if not errorlevel 1 a:\DM.bat
find "33" a:\defaut.txt > nul
if not errorlevel 1 a:\GHOST.bat

（需注意：由defualt文件改名而来的default.txt，由于其中已有2 0 4 8 几个数字，所以savedefault时应避免与它相同。实际上只要保证写入前后deualt.txt文件的大小不变，即2048字节，可以自己建一个2048字节的空内容文本文件作为defualt.txt，不过不推荐这样做）

【注：方法来源】关于GRUB4DOS两个很棘手的问题
首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 3 grub4dos初级教程－进阶篇

 3.6 利用dd命令传递参数的方法与应用

 众所周知，BCDW有传递参数的功能，遗憾的是，只能用于光盘/ISO启动。
grub4dos作为一个启动管理器，功能强大，但可惜没有传递参数的功能。

最新版grub4dos新增了一个用于文件复制的命令-dd。

 dd命令的用法原文为：
Usage:

dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT]

 Copy file IF to OF. BS is blocksize in bytes, default to 512. C is blocks to copy, default is total blocks in IF. IN specifies number of blocks to skip when read, default is 0. OUT specifies number of blocks to skip when write, default is 0. Skipped blocks are not touched. Both IF and OF must exist.

dd is dangerous, use at your own risk. To be on the safe side, you should only use dd to write a file in memory.

In some cases when writing a file in NTFS, dd might fail.

注意：
dd 目前不支持创建文件，也不支持改变文件的长度，所以，不存在的文件是不能写入的。
把一个大的文件写入一个小的文件，这个小的文件不会变长。多余的部分扔掉了。
把一个小的文件写入一个大的文件，这个大的文件不会变短。未写的部分保持不变。
利用此命令，可以做到从文件到文件，扇区到扇区，文件内的字节到字节以及他们之间相互的任意位置写入。
可用于在grub4dos下直接备份和恢复MBR或者分区的引导扇区，也可用于参数的传递。

A, 下面是我在最新版“GGhost硬盘安装器”中使用的用于参数传递的简单例子。

 要实现的是Windows运行“GGhost硬盘安装器”时，把一些参数写入硬盘上的设置文件A（源），在重启时通过grub4dos传递给文件B（目标），然后在dos下读取文件B，根据读取的参数执行相应的命令。

grub4dos的菜单写法示例：

title 0. GGhost 2009
find --set-root /ggui/gghost.img
map --mem /ggui/gghost.img (fd0)
map --hook
dd if=()/ggui/setw.ini of=(fd0)/gghost/setd.ini
chainloader (fd0)+1
rootnoverify (fd0)

 这里：
/ggui/setw.ini表示硬盘上ggui目录下的设置文件setw.ini（源），
(fd0)/gghost/setd.ini表示gghost.img文件中gghost目录下的文件setd.ini（目标），
通过dd命令就把硬盘上的文件写入了img中的文件，从而实现参数的传递功能。

提示：img文件中必须存在目标文件，位于NFTS分区的文件，要求不小于2k。

B, 以下内容引用自时空论坛zw2312914的帖子。详情参看此帖

 dd是一个强大的命令，个人认为是继仿真功能后grub4dos中最为强大的实用功能。
灵活使用bs skip seek 等参数可以做到从文件到文件，扇区到扇区，文件内的字节到字节以及他们之间相互的任意位置写入。可以理解为任意字节的复制 和粘贴 操作。
（需注意两点：1。要实现完整写入，必须使目标文件大于或等于源文件的字节数,2.目前版本，目标文件需存在于设备中，目标文件的内容是什么倒无关）

比如，(fd0)下的一dos脚本 path.bat，其内容是：
set string=abcdefghijklmnopqrstuvwxyz
set path=￥：
goto main
:main
...
...
....
goto end
...
:end

确定第一行37个字节（实际，行末还存在回车或换行符的字节，但这里仅演示dd 的应用，故从略），第二行11个字节，
那么可以将第一行的任意一个字符写到第二行，
比如希望替换掉第二行的字符￥，为指定的盘符，那么:

dd if=(fd0)/path.bat of=(fd0)/path.bat bs=1 skip=11 count=1 seek=46

 执行后，就把path.bat文件的第二行替换为set path=a：

（bs=1 代表以一个字节为单位读写，count=1 代表只写一个由bs参数指定单位的块，这里就代表只写一个字节，skip=11 即读时跳过11个字节，其中空格也是一个字节，即从第一行的第12个字符 a 开始读。seek=46 用来指定写入时跳过46个字节，即写到第47个字节￥的位置。）
因此，作为应用之一的参数传递，dd 命令显得更直接和高效的。
当然直接用dd if=/pe.img of=(fd0) 这样的方式来制作启动盘，或者通过dd if=(cd0) of=/cd.iso 来制作光盘镜像，dd if=(hd0,0)+1 of=/dos.img 来为镜像写入引导，也是非常简单方便的。

首页 总目录 上一页 下一页


grub4dos初级教程－入门篇、应用篇

 如何使用grubinst_gui

 grubinst 可用于在Windows NT/2K/XP 和 Linux/FreeBSD 下把Grub4Dos启动代码安装到MBR/BS。其用法类似于bootlace.com。
grubinst_gui 是运行于Windows系统下的图形界面，利用它可以方便的使用grubinst的功能。
注意：grubinst只负责把GRLDR启动代码安装到 MBR/BS, 你还需要手动把GRLDR文件拷贝到某一FAT16/FAT32分区的根目录里。

grubinst_gui运行后界面如下图。

4.10.1 grubinst_gui新手指南

在Windows NT/2000/XP 下，用以下的步骤可以快速地把Grub4Dos安装到MBR或分区中
前提：你必须拥有FAT16/FAT32的分区。如果全部分区均为NTFS，则请参考最后的部分。

1、下载grubinst,解压
2、双击grubinst_gui.exe
3、在"磁盘"右面的列表中选择需要安装Grub4Dos的硬盘/软盘，如果你有多个磁盘（包括USB移动硬盘&），请留意[]中显示的磁盘大小，以便选择正确的磁盘。
4、若需要安装到分区，可点击"分区列表"右面的"刷新"按钮，然后从下拉列表中选择需要的分区（支 持FAT12/FAT16/FAT32/EXT2/EXT3）。若需要安装到MBR，这一步可省略。
5、若想以后能恢复原来的MBR/BS，则在"保存文件"中输入用于保存的文件名字。
6、点"安装"，出现命令窗口，如果看到"The MBR/BS has been successfully installer", 则说明安装成功。

当然，以上步骤只是安装启动代码，要能正常启动Grub4Dos，还需要以下的步骤：

7、从 http://grub4dos.jot.com/WikiHome 或 http://download.gna.org/grub4dos/ 中下载最新版的Grub4Dos。
8、在压缩包中找到grldr，把它放到FAT16/FAT32分区的根目录中。
9、编辑menu.lst文件(应该放在和GRLDR一样的目录里)，以配置启动菜单。

若没有FAT16/FAT32分区，则不能把Grub4Dos安装到MBR/BS，而只能利用NT的启动管理器启动Grub4Dos:
1、下载Grub4Dos，把GRLDR解压到系统盘的根目录里(C:\)
2、编辑C:\boot.ini（此文件是隐藏的），在文件的最后加上
C:\GRLDR="Load Grub4Dos"
这样一行
3、编辑C:\menu.lst文件，以配置启动菜单。
4、下次启动Windows时，会增加"Load Grub4Dos"一项，选择它便能进入Grub4Dos

4.10.2 grubinst_gui使用指南

1、安装Grub4Dos到硬盘/软盘映像中。
在"文件"右面的输入框中输入映像文件名，则按"安装"时会安装到指定的映像中。
当修改的是软盘映像时，需要勾上选项"软盘映像"。

2、选项设置

只读模式：
模拟所需的操作，但不真正地把MBS/BS写到硬盘/映像中。

输出详细信息：
让后台程序grubinst输出更详细的信息，建议使用。

不保存原来的MBR (适用于安装到MBR时)
在修改原来的MBR前，grubinst会把原来的MBR保存到第二个扇区中。若选了这个选项，则 屏蔽这一功能。

启动时不搜索软盘 (适用于安装到MBR时)
启动时，若在硬盘上找不到GRLDR，Grub4Dos会试图到软盘上去寻找。若选了这个选项，则 屏蔽这一功能。

不引导原来的MBR (适用于安装到MBR时)
若原来的MBR保存在第二个扇区里，则当Grub4Dos找不到GRLDR时，会用原来的MBR来启动。 若选了这个选项，则屏蔽这一功能。

优先引导原来的MBR (适用于安装到MBR时)
若选了这个选项，则优先使用原来的MBR来启动。
注意1: Grub4Dos只保留了一个扇区的空间来存储原来的MBR，若原来的MBR超过一扇区，则只 有第一扇区被保存，因此不能用原来的MBR来启动。
注意2: 若使用了这一选项，则在启动时会有5秒的等待时间，若你在5秒内按了空格键，则启 动Grub4Dos，按其他键或5秒超时的话便引导原来的MBR。等待时间和按键可以定制。

软盘映像
当你把Grub4Dos安装到软盘映像时，请勾上这一选项
注意1: 安装到物理软盘时，并不需要点这一选项
注意2：当你选择了映像文件，并刷新了分区列表时，程序会根据映像文件的类型自动设置 这一参数。
注意3：安装到软盘映像或分区时，以上的适用于安装到MBR的各参数将不起作用

等待时间：
设置当优先引导原来的MBR时，启动的等待时间，缺省值是5

热键：
设置当优先引导原来的MBR时，启动Grub的热键，缺省值是空格。
注意：原来版本的grubinst(bootlace.com也一样)利用扫描码来代表按键，比如说，空格是 0x3920。但新版的grubinst允许用字符串来表示按键。比如说，a , ctrl-a , shift-a, alt-a, F1, home, end, space, key-5 (小键盘上的5键) 等等。

额外参数：
你可以在这里输入其他传给后台程序grubinst.exe的参数

3、恢复功能

保存文件：
指定用于保存/恢复的外部文件

从文件中恢复
没有使用了这一选项时，"安装"按钮是正常的安装操作，若保存文件框不是空，则指定用于 保存原来的MBR/BS的文件
使用了这一选项时，"安装"按钮的操作变为从指定的保存文件中恢复原来的MBR/BS

从原来的MBR中恢复
使用了这一选项时，"安装"按钮的操作是从第二个扇区中恢复原来的MBR
注意1: 原来的MBR必须是单扇区，否则恢复后不能启动
注意2: 使用这一功能时，"保存文件"应该为空，并且不能选择"从文件中恢复"

4、"测试"按钮
用于显示传给grubinst的参数，但并不真正地调用grubinst。
注意: 这和"只读模式"是不同的。使用"只读模式"时调用了后台的grubinst，只是grubinst 不进行修改MBR/BS的操作。

说明：
新版已增加对NTFS文件系统的支持，但目前可能仍存在不完善的地方，相关说明及使用方法可参看作者的帖子。


Grub 命令索引

命令索引:

background | 设置图形模式下的背景色。
blocklist | 输出文件的块清单标记。
boot | 引导已加载的操作系统或扇区链式加载器。
bootp | 通过BOOTP初试化网络设备。
cat | 显示指定文件的内容。
chainloader | 加载扇区链式加载器。
clear | 清屏幕。
cmp | 比较两个文件, 并且报告两者之间的不同的信息。
color | 改变菜单的颜色。
configfile | 将指定文件作为配置文件予以加载。
debug | 打开/关闭除错模式。
default | 把 NUM 项菜单设为缺省值。
device | 声明BIOS驱动器对应的实际物理设备。
dhcp | 通过DHCP初试化网络设备。
displayapm | 显示 APM BIOS 的相关信息。
displaymem | 显示 GRUB 所判断到的当前系统的内存分布，包括所有物理内存区域。
dump | 显示诸多文件的内容。
embed | 如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。
fallback | 如果调用当前的菜单项时出现错误，则转移到 NUM 项后重试
find | 在所有分区上查找文件名, 并显示包含该文件的设备。如果设置了参数 --set-root，则在找到第一个匹配后马上停止，并且把该设备设为根。
fontfile | 指定中文字体文件，并切换到简体中文显示方式。
foreground | 设置图形模式下的前景色。
fstest | 切换文件系统的试验模式。
geometry | 输出驱动器的相关信息。
gfxmenu | 使用 FILE 中的图形菜单。
halt | 关闭系统。
help | 显示内部命令的帮助信息。
hiddenmenu | 隐藏菜单。
hide | 通过在分区类型上置隐藏标志，隐藏指定分区。
ifconfig | 指定 IP 地址, 子网掩码, 网关和服务器地址。不带参数时，将显示当前的网络配置。
impsprobe | 通过一些循环操作，侦测出符合 Intel 多处理器规范 1.1/1.4 的 CPUs，以便于发挥其更好的效能。
initrd | 加载Linux格式的初始化虚拟盘, 并设置必要的参数。
install | 安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。
ioprobe | 侦测指定设备的 I/O 端口号。
kernel | 尝试载入主引导影像文件。
lock | 如果用户未被认证，则终止命令的执行。
makeactive | 将 root 设备置为活动分区。
map | 对设备进行映射。
md5crypt | 产生一个 MD5 格式的密码。
module | 对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。
modulenounzip | 与 'module' 类似, 但是自动禁用了解压缩。
pager | 没有参数时，切换页模式。
partnew | 创建一个新的主分区。
parttype | 改变指定分区(PART)的分区类型(TYPE)。
password | 设置密码。
pause | 终止命令的运行，并给出一段信息。任意键按下后，将继续。
portmap | 进行端口映射。
quit | 从 GRUB 命令行中退出。
rarp | 用 RARP 初始化网络设备。
read | 从内存的指定位置读取一个 32-bit 的值，并以十六进制形式显示出来。
reboot | 重启系统。
root | 设置根分区。
rootnoverify | 类似`root'指令, 但不测试安装该分区。这用于有些系统装在 GRUB 能访问的磁盘区之外, 但仍需要设置正确的根分区的情况。有些需要安装分区才能确定的参数可能会有问题。
run | 运行一个为光盘启动而设计的引导文件（非模拟方式的）
savedefault | 将当前项设置为默认的引导项。
scdrom | 寻找系统的第一个 CD-ROM 驱动器，然后为其分配一个驱动器号以备后续使用(--install)。或者，用该驱动器中的可引导光盘启动系统。(--boot)。
serial | 初始化一个串口设备。
setkey | 改变键盘映射关系。
setup | 自动安装GRUB.
splashimage | 图形模式下载入背景图片文件。
terminal | 选择一个终端。
terminfo | 指定终端的功能。
testload | 以多种不同的方式读取文件(由FILE指定)的整个内容，并予以比较，以测试文件系统的代码。
testvbe | 测试所指定(MODE)的 VBE 模式。
tftpserver | 指定 TFTP 服务器的 IP 地址。
timeout | 设置在自动启动缺省菜单前所等待的秒数。
title | 命名菜单项。
unhide | 通过清除隐藏标志，解除指定分区(PARTITION)的隐藏。
uppermem | 强制指定仅有(KBYTES) KB 的上位内存。
vbeprobe | 侦测 VBE 的信息。

blocklist

用法: blocklist FILE
描述:
输出文件的块清单标记。

boot

用法: boot
描述:
引导已加载的操作系统或扇区链式加载器。

bootp

用法: bootp [--with-configfile]
描述:
通过BOOTP初试化网络设备。如果使用了`--with-configfile'参数，此命令将会试图去加载一个特定的配置文件。

cat

用法: cat FILE
描述:
显示指定文件的内容。

chainloader

用法: chainloader [--force] FILE
描述:
加载扇区链式加载器。若使用了--force参数, 则忽略该扇区的启动标识的有效性。

cmp

用法: cmp FILE1 FILE2
描述:
比较两个文件, 并且报告两者之间的不同的信息。

color

用法: color NORMAL [HIGHLIGHT]
描述:
改变菜单的颜色。Normal 用于指定菜单项的未选中时的颜色，HIGHLIGHT 则用于指定菜单项的被选中时的颜色。如果你未指定 HIGHLIGHT 色，那么我们将使用 NORMAL 的反色值。颜色值的格式是 "FG/BG"。FG 和 BG 是颜色的名称，如下：black(黑), blue(蓝), green(绿), cyan(青), red(红), magenta(粉红), brown(棕), light-gray(亮灰),dark-gray(暗灰), light-blue(浅蓝), light-green(淡绿), light-cyan(淡青), light-red(明红), light-magenta(浅红), yellow(黄) 和 white(白)。注意，BG 的值只能是前八个。另外，若想使用闪烁的前景色，你在 FG 前使用前缀 "blink-" 即可。

configfile

用法: configfile FILE
描述:
将指定文件作为配置文件予以加载。

debug

用法: debug
描述:
打开/关闭除错模式。

default

用法: default [NUM | `saved']
描述:
把 NUM 项菜单设为缺省值。

device

用法: device DRIVE DEVICE
描述:
声明BIOS驱动器对应的实际物理设备。这条命令只用于grub命令行。

portmap

用法: portmap prog_number vers_number
描述:
进行端口映射。

dhcp

用法: dhcp
描述:
通过DHCP初试化网络设备。

splashimage

用法: splashimage FILE
描述:
图形模式下载入背景图片文件。

foreground

用法: foreground RRGGBB
描述:
设置图形模式下的前景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六进制的值。

background

用法: background RRGGBB
描述:
设置图形模式下的背景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六进制的值。

clear

用法: clear
描述:
清屏幕。

displayapm

用法: displayapm
描述:
显示 APM BIOS 的相关信息。

displaymem

用法: displaymem
描述:
显示 GRUB 所判断到的当前系统的内存分布，包括所有物理内存区域。

dump

用法: dump FROM TO
描述:
显示诸多文件的内容。注意，FROM 所指定的必须是一个 GRUB 文件，TO 所指定的必须是一个 OS 文件。

embed

用法: embed STAGE1_5 DEVICE
描述:
如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。如果是个FFS分区, 则可嵌入到该设备饿`引导代码'区中。并输出 Stage 1.5所占的扇区数。

fallback

用法: fallback NUM
描述:
如果调用当前的菜单项时出现错误，则转移到 NUM 项后重试

find

用法: find [--set-root] FILENAME
描述:
在所有分区上查找文件名, 并显示包含该文件的设备。如果设置了参数 --set-root，则在找到第一个匹配后马上停止，并且把该设备设为根。

fstest

用法: fstest
描述:
切换文件系统的试验模式。

gfxmenu

用法: gfxmenu FILE
描述:
使用 FILE 中的图形菜单。

geometry

用法: geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]
描述:
输出驱动器的相关信息。在grub壳程序中, 你可以用这条命令设置驱动器参数为任意值。如果你省略了总扇区数, 则该值缺省有其它参数决定。

halt

用法: halt [--no-apm]
描述:
关闭系统。如果APM(高级电源管理)功能存在，将使用 APM BIOS 关闭系统，除非指定了　`--no-apm' 选项。

help

用法: help [--all] [PATTERN ...]
描述:
显示内部命令的帮助信息。要查看所有命令的帮助，请使用 `--all' 参数。

hiddenmenu

用法: hiddenmenu
描述:
隐藏菜单。

hide

用法: hide PARTITION
描述:
通过在分区类型上置隐藏标志，隐藏指定分区。

ifconfig

用法: ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]
描述:
指定 IP 地址, 子网掩码, 网关和服务器地址。不带参数时，将显示当前的网络配置。

impsprobe

用法: impsprobe
描述:
通过一些循环操作，侦测出符合 Intel 多处理器规范 1.1/1.4 的 CPUs，以便于发挥其更好的效能。

initrd

用法: initrd FILE [ARG ...]
描述:
加载Linux格式的初始化虚拟盘, 并设置必要的参数。

install

用法: install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]
描述:
安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。如果使用了选项'd', STAGE1总是试图使用安装STAGE2的驱动器, 而不是启动盘。STAGE2将加载在指定地址上, 如果未声明地址, 则自动检测。如果使用了选项 'p' 或给出了配置文件, 将修改STAGE2的第一个数据块, 修正实际Stage2启动时使用的配置文件位置。对于Stage 1.5, 该值为Stage 2的路径。如果安装的是Stage 1.5, 且指定了实际配置文件, 则将该配置文件路径写入Stage2中。

ioprobe

用法: ioprobe DRIVE
描述:
侦测指定设备的 I/O 端口号。

kernel

用法: kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]
描述:
尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。使用此命令以前，内核所用到的模块应该被重新载入。参数 --type 用于说明内核的类型，包括 "netbsd", "freebsd", "openbsd", "linux", "biglinux" 和 "multiboot"。参数 --no-mem-option 用于说明不必自动传递 Linux 的内存参数。

lock

用法: lock
描述:
如果用户未被认证，则终止命令的执行。

makeactive

用法: makeactive
描述:
将 root 设备置为活动分区。当然，此命令只对 PC 的硬盘主分区有效。

map

用法: map [--status] [--hook] [--unhook] [--rehook] [[--read-only] [--fake-write] [--unsafe-boot] [--disable-chs-mode] [--disable-lba-mode] [--heads-per-cylinder=H] [--sectors-per-track=S] TO_DRIVE FROM_DRIVE]
描述:
对设备进行映射。这对于扇区链式引导是很有用的功能，比如 DOS。这里，目的驱动器(TO_DRIVE)可以是一个磁盘文件，即使用磁盘虚拟功能。注意，这要求磁盘文件是连续存放于分区中的。另外，若使用了 --read-only 参数，该功能将使`磁盘'处于只读;若使用了 --fake-write 参数，该功能将使`磁盘'处于假写，即可以"写入"数据，但是却并未记录到真实磁盘上; 若使用了 --unsafe-boot 参数，该功能将使`磁盘'处于真实可写; 若使用了 --disable-chs-mode 参数，CHS 访问功能将被禁用; 若使用了 --disable-lba-mode 参数， LBA访问功能将被禁用; H 和 S 指定了虚拟磁盘的物理参数。若使用了 --status, --hook, --unhook,--rehook 诸参数之一, 那么其它的命令行参数将被忽略。

md5crypt

用法: md5crypt
描述:
产生一个 MD5 格式的密码。

module

用法: module FILE [ARG ...]
描述:
对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。剩余参数作为`模快命令行`传递, 象`kernel'命令一样。

modulenounzip

用法: modulenounzip FILE [ARG ...]
描述:
与 'module' 类似, 但是自动禁用了解压缩。

pager

用法: pager [FLAG]
描述:
没有参数时，切换页模式。如果使用了 FLAG 参数，那么它为`on' 时为开启, 为 `off' 时为关闭。

partnew

用法: partnew PART TYPE START LEN
描述:
创建一个新的主分区。START 为起始扇区号，LEN 为其包含的扇区数，TYPE 为其分区类型。

parttype

用法: parttype PART TYPE
描述:
改变指定分区(PART)的分区类型(TYPE)。

password

用法: password [--md5] PASSWD [FILE]
描述:
设置密码。当其处于菜单文件的首项时，将禁用所有的交互式菜单编辑功能，包括编辑菜单项(`e`)/进入命令行(`c`)。当正确输入密码 (由PASSWD指定)后，载入新的菜单文件(由FILE指定)。如果你没有指定 FILE 项，那么上述被禁用的功能将被启用了。当然，你也可以将此命令用到某个菜单项里，用以提高系统安全性。参数 --md5 说明密码(PASSWD)是使用md5crypt 加密的。

pause

用法: pause [MESSAGE ...]
描述:
终止命令的运行，并给出一段信息。任意键按下后，将继续。

quit

用法: quit
描述:
从 GRUB 命令行中退出。

rarp

用法: rarp
描述:
用 RARP 初始化网络设备。

read

用法: read ADDR
描述:
从内存的指定位置读取一个 32-bit 的值，并以十六进制形式显示出来。

reboot

用法: reboot
描述:
重启系统。

fontfile

用法: fontfile FILE
描述:
指定中文字体文件，并切换到简体中文显示方式。

scdrom

用法: scdrom [--install], [--bootcd]
描述:
寻找系统的第一个 CD-ROM 驱动器，然后为其分配一个驱动器号以备后续使用(--install)。或者，用该驱动器中的可引导光盘启动系统。(--boot)。

run

用法: run FILE
描述:
运行一个为光盘启动而设计的引导文件（非模拟方式的）

root

用法: root [DEVICE [HDBIAS]]
描述:
设置根分区。设置根分区为指定设备(DEVICE), 然后尝试挂接该分区以得到分区大小(用于在ES:ESI中传递, 扇区链式启动方式要求这样)。BSD 驱动类型用于启动 BSD 的核心启动), 和确定 BSD 子分区所在的 PC 分区。可选的磁盘偏移参数, 用于 BSD 核心确定有多少个控制器在当前控制器前。比如: 假设同时有一个IDE和SCSI盘, 而BSD根分区在 SCSI盘上, 那么磁盘偏移就为1。

rootnoverify

用法: rootnoverify [DEVICE [HDBIAS]]
描述:
类似`root'指令, 但不测试安装该分区。这用于有些系统装在 GRUB 能访问的磁盘区之外, 但仍需要设置正确的根分区的情况。有些需要安装分区才能确定的参数可能会有问题。

savedefault

用法: savedefault
描述:
将当前项设置为默认的引导项。

serial

用法: serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]
描述:
初始化一个串口设备。UNIT 用于指定要使用的串口设备 (如，0 == COM1); PORT 用于指定端口号; SPEED 用于指定通讯的数率; WORD 为字长; PARITY 为奇偶类型(取 `no', `odd' 和 `even' 之一的值。); STOP 是停止位的长度值; 选项 --device 仅用于命令行模式，用以指定 tty 设备的文件名。默认值是这样的，COM1, 9600, 8N1。

setkey

用法: setkey [TO_KEY FROM_KEY]
描述:
改变键盘映射关系。把FROM_KEY映射为TO_KEY。这里的键必须是字母, 数字, 和以下特殊键: escape(转义), exclam(!), at(@), numbersign(#), dollar($), parenright ()) , caret(^), ampersand(&), asterisk(*), plus(+), percent(%), minus(-), underscore(_), equal(=), parenleft[(], backspace(退格), tab(制表), bracketleft([), braceleft({), bracketright(]), braceright(}), enter(回车), control(控制), semicolon(;), colon(:), quote('), doublequote("), slash(/), backquote(`), tilde(~), shift(换档), backslash(\), bar(|), comma(,), less(<), period(.), greater(>), question(?), alt(交互), space(空格), capslock(大写), Fx(功能键) 和 delete(删除)。

setup

用法: setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]
描述:
自动安装GRUB. 这条命令使用更灵活的install命令将GRUB安装到指定设备上。如果给出了映象设备,将在该设备寻找GRUB,否则使用缺省的根设备。根设备可用root指令指定。如果你确认系统的 BIOS 应该支持 LBA 模式, 但是 GRUB 却没有工作于该模式, 则请指定 `--force-lba' 参数。如若你在命令行中已安装了一次 GRUB 可是，你却无法卸载 GRUB 程序所在的分区，请指定 `--stage2' 参数。

terminal

用法: terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]
描述:
选择一个终端。当指定了多个终端以后, 按任意键方可继续操作。如果控制台和串口都被指定了, 那么你首先在其中按下键盘的终端将被首先选中。如果没有指定任何参数, 那么此命令将显示出当前的终端设置; 参数 --dumb 用以指定一个哑终端, 否则即为 vt100 兼容型; 若使用了 --no-echo 参数, 屏幕上将不会回显输入的字符; 若使用了 --no-edit 参数, the BASH-like 的编辑功能将被禁用; 若使用了 --timeout 参数, 该命令将等待数秒钟(由SECS指定); 可使用 --lines 指定最大的行数; 可使用 --silent 选项关闭消息显示。

terminfo

用法: terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ] [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]
描述:
指定终端的功能。如果此终端为 vt100 兼容型的，则可指定换码顺序 (即使用 \e 代表 ESC, ^X　代表控制码); 在未给任何参数的情况下，将给出当前配置信息。

testload

用法: testload FILE
描述:
以多种不同的方式读取文件(由FILE指定)的整个内容，并予以比较，以测试文件系统的代码。输出看起来会有点儿混乱，但是，如果没有错误的话，`i=X, filepos=Y' 里的 X 和 Y 最后必得相等。如果测试即告成功，下一步即可试图载入内核了。

testvbe

用法: testvbe MODE
描述:
测试所指定(MODE)的 VBE 模式。

tftpserver

用法: tftpserver IPADDR
描述:
指定 TFTP 服务器的 IP 地址。

timeout

用法: timeout SEC
描述:
设置在自动启动缺省菜单前所等待的秒数。

title

用法: title [NAME ...]
描述:
命名菜单项。

unhide

用法: unhide PARTITION
描述:
通过清除隐藏标志，解除指定分区(PARTITION)的隐藏。

uppermem

用法: uppermem KBYTES
描述:
强制指定仅有(KBYTES) KB 的上位内存。任何系统的地址变换将被取消。

vbeprobe

用法: vbeprobe [MODE]
描述:
侦测 VBE 的信息。如果指定了一个模式(MODE 不为空)，则仅显示其信息。


GRUB 简体中文化版使用方法

by Gandalf<f22_storm@163.com>

目录

一.功能概述

二.基本概念及界面说明

三.功能详情及使用

四.致谢

一.功能概述

在本源上, Grub 是Linux的一个载入程序,正如 NTLDR 之于 Windows NT/2K/XP. 但是,它却拥有多引导的功能,而且还在不断得发展与完善之中. 当前,它的新功能如下:

1. 支持中文显示,背景图片;

2. 支持软盘虚拟功能,可以用以引导系统;

3. 支持硬盘虚拟,磁盘的映射(当然,还能激活/隐藏/创建分区);

4. 支持网络启动(包括网络虚拟软盘);

5. 支持光驱启动(拥有一个独立与BIOS的ATAPI设备的驱动程序);

6. 跨平台的支持;

7. 对多引导文件的支持;

二.基本概念及界面说明

A.基本概念

1. GRUB 里的设备命名法则

它使用了UNIX对设备的命名方法.比如我们拥有两块硬盘,那么采用这种形式(hdx,y), 这里,x,y, 都是从0开始计数的.所以两块硬盘是 (hd0,y),(hd1,y). 他们位于第一个IDE接口上. 对 hd0 来说, 请看下图:

(注, C: 为第一主分区, 其他分区是扩展分区.由于主分区只能有四个,即 0,1,2,3, 所以第一个扩展分区的编号从 4 开始.)

这是硬盘,那么光驱哪? 对,采用 (cd) 就可以了. 网络设备使用 (nd). 我估计,以后支持usb以后,可以使用 (ud). ;-) 欢迎你的参与,我们的开发还在继续.

那么,这里就要提及 GRUB 里的一个很首要的概念了, 即 "根(/)", 或者 root. 其实,它就是一个源一样的东西,与草木的"根"相类似. 在GRUB中,其它的文件对象都域于此. 所以,一旦你指定了一个根,后续的操作除非显示地说明,否则都是对"根"而言的.

其实在某种意义上来说,和相对/绝对路径有点关联性. ;-) 正如,你所猜到的那样, GRUB 使用 root 命令来指定根设备(通常都是文件系统).

B. 命令和参数

在古老的 dos 时代,这两个东东是很平常的. 可以认为,命令是程序的名称,参数是告诉程序如何作和怎么作.比如在 Grub 的控制台里:

GRUB>help scdrom

那么, help 就是命令, 而 scdrom 就是参数了. 它的意思是"给出 scdrom 命令的帮助信息."

C. 界面说明

首先,引导程序应该简单易用,菜单加鼠标是不错的主意.是的, GRUB 支持自定义的菜单选择功能项;但当前来说,它还不能支持鼠标的点选. 另外,为了更灵活, GRUB 还可以动态地编辑菜单项,这就是它的控制台功能(在控制台里,你可以使用 `ESC`键返回到主选菜单界面).以下三图可供参考:

(主菜单)

(编辑菜单项)

(命令行模式)

D. 关于菜单脚本文件

与 Windows NT 类似, GRUB 也提供了一个菜单生成文件,我们常称之以脚本.

通常情况下,我们把 GRUB 要用到地文件都放到 /boot/grub/ (这里我们省略了对根设备的指定, 所以完整的表示可能是 (hd0,0)/boot/grub ). 而菜单文件的默认名称是 menu.lst. 这里有一个样本实例,

>> 请点击 <<

这里应该说明的是, 菜单文件里的注释是以"#"开头的, 而每一项菜单都必须指定一个标题(title),否则不但不能被显示出来,反而还作为了上一项的命令了.

三.功能详情及使用

1. 支持中文显示,背景图片;

1).中文的显示, 请使用:

fontfile FILE

实例: fontfile (hd0,0)/boot/grub/fonts

2). 背景图的使用:

splashimage FILE

实例: splashimage (hd0,0)/boot/grub/bj2008.xpm.gz

3). 图形菜单( gfxmenu ) 的使用:

gfxmenu FILE

实例: gfxmenu (hd0,0)/boot/grub/grub_chs.msg

[注] fontfile 的文件必须是 16 点阵字库;

splashimage 的文件必须是 640x480 14 色的 XPM 格式, 支持zip压缩;

gfxmenu 的文件当前只能使用 Linux 下的 mkbootmsg 工具生成, 此功能先见于 SuSe Linux 7.2.

2. 支持软盘虚拟功能,可以用以引导系统;

1). 使用 MEMDISK

kernel (hd0,0)/boot/grub/memdisk.gz
initrd (hd0,0)/boot/grub/win99.zip
boot (此项仅在命令行中使用,在菜单文件里无需指定)

2). 使用内建的 MAP

map (hd0,0)/boot/grub/win99.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
boot (同上)

[注] + 使用 memdisk 有很多好处. 首先它不需要磁盘镜像文件的连续存放,支持网络上,光盘上的磁盘镜像文件, 而且此文件可以使用 zip 压缩格式. 如果磁盘文件的原始大小不是 1.44/2.88MB, 那么,使用起来,就有一些技巧了:

1). 默认情况下, 将被视为硬盘的镜像文件(与使用 harddisk 效果相同, 故通常不用指定此参数);

2). 如果是软盘镜像文件,请使用 floppy 参数, 比如:

kernel (hd0,0)/boot/grub/memdisk.gz c=274 h=2 s=18 floppy
initrd (hd0,0)/boot/acronis/pe.zip
 boot (同上)
 => 提示：可以使用新版的 Winimage 获取上述的 C/H/S 参数, 参见:

+ 用 MAP 命令是,磁盘镜像文件必须连续存放,大小上无限制.但是不支持网络/光盘上的文件,且不支持 zip 压缩了的文件.

3. 支持硬盘虚拟,磁盘的映射(当然,还能激活/隐藏/创建分区);

就硬盘虚拟功能而言, 在上一个段落里,我们已提及到了, 在应用上, 我们可以构造一个虚拟的磁盘环境来, 但是, 这个磁盘的访问是通过对 INT 13 的挂接来进行的, 这也就是为什么, 我们可以虚拟一个安装有 DOS/Win9X 的硬盘, 而对 Windows NT/2K/XP 就无能为力了, 即便是他们的恢复控制台(cmdcons).

[ 如果你想体验这种功能, 你可以到 Win98_for_grub 下获取 Win98SE_CHS 的两个镜像文件, 他们都带有图形界面. ]

[ 此外, 如果你试图使 WinNT 等系统能运行于虚拟的磁盘镜像文件, 请参考 Windows XP Embedded 的相关信息, 通过使用 Ramdisk 驱动, 可以做到的. 你可以到 RamDisk_WinXPe 获取一个针对 WMWare 的硬件环境的 WinXP Embedded 版本.]

而“磁盘的映射”, 通常不用, 故而也就不再此处讨论了.

4. 支持网络启动(包括网络虚拟软盘);

ifconfig --address=192.168.0.122 (本机使用的 IP 地址)
ifconfig --mask=255.255.255.0 (子网掩码)
ifconfig --gateway=192.168.0.254 (网关的 IP 地址)
ifconfig --server=192.168.0.1 (tftp 服务器的 IP 地址)
kernel (nd)/memdisk.gz
initrd (nd)/win99.gz (可以使用 zip 压缩的文件)
boot (同上)

5. 支持光驱启动(拥有一个独立与BIOS的ATAPI设备的驱动程序);

1). 如何让GRUB识别光驱

scdrom --install

安装成功后, 你可以将 root 设备指定到光盘上(root cd), 访问光盘上的内容(比如指定 memdisk: kernel (cd)/memdisk, 等等)

2). 如何跳转到光驱启动

scdrom --bootcd

这是"一去不复返"式的跳转, 如果成功的话. 如果失败,将返回 GRUB.

6. 跨平台的支持;

1). 在纯 DOS 下运行GRUB

使用配套的 GRUB.exe 程序.

2). 从光盘上直接启动GRUB(必须是非模拟方式的)

使用配套的 stage2_eltorito 文件作为启动文件.

3). 在 Linux 上运行 GRUB

使用配套的 grub 程序(elf 格式)即可. 可能需要修改运行权限(chmod a+x grub).

4). 无盘启动 GRUB

使用配套的 nbgrub/pxegrub 即可.

* 5). 使用 WinNT/2K/XP/LH 的引导器(NTLDR)载入GRUB *

使用配套的 grldr 即可.

如何作:

首先, 你一定要确认你的系统拥有 NTLDR 的引导功能, 然后打开它的配置文件( boot.ini, 这个文件通常在你的 "c:\"),进行修改. 请为 GRUB 新添如下一行到文件的末尾(注意, 请另起一行)

C:\GRLDR="Boot Grub with Full Set", 然后保存之.

当然你可能会得到信息说文件是只读的, 请修改它的属性后,再保存. 随后,请把压缩包里的 grldr 解到 C:\ 就可以了.

7. 对多引导文件的支持

我们假设文件所用到的文件位于 C:\ (hd0,0)

1). 硬盘扇区文件

root (hd0,0) (对使用硬盘的时候,一定要使用 hd, 这样才会传递引导盘符为 80H)
root (显示说明磁盘为 80H)
run /peloader.bin (运行之)

2). 光盘非模拟方式的引导文件

scdrom --install (初始化,安装光盘驱动)
root (cd) (指定引导盘符的操作)
root (显示说明磁盘为 80H)
run (hd0,0)/emurtosk.bin (运行之)

* 注: 所指定的文件要小于 32768 字节.

四.致谢

这个版本的 GRUB 的公开, 离不开很多人的努力,合作与帮助. 他们是:

GNU GRUB 的作者 : 一个伟大的程序工作者,为我们带来了功能强大的 Grub
fsys_ntfs.c 的提供者 : 此版本的 Grub 引用它来提供对 NTFS 分区的支持
Smart BootManager 的开发者 : 此版本的 Grub 引用了它的 ATAPI 驱动模块

VCCode 龙堂论坛上的 zhaoxg : 他向我提供了蓝点 Grub 的相关信息, 使此版本中文支持有了源头
Grub 的网络支持补丁的提供者: 此版本的 Grub 引用了诸多官方版本所不支持的网卡驱动
Grub4Dos 的开发者 : 此版本的 Grub 引用了它的 MAP/NTLDR 模块(谢谢 tinybit)

findroot 功能的提供者 : 他(Chris_s)来自 topologilinux 还有他的朋友(Tobias)
United DOS forum : 在这里有,我经常和多位高手交流. 感谢 ruymbeke 发出的邀请
VCCode 龙堂论坛上的小丫头 : 我向她请教了 bj2008.xpm 背景图的修改问题

... ... ... ... ...

还有很多人士, 在此一并表示感谢!

更新时间:
2004-11-13 12:50:50 - 新增 gfxmenu 动画图形菜单的功能使用说明
2004-11-05 14:55:40 - 对 RUN 命令的描述[添加]
2004-10-13 19:28:18 - 对 memdisk 的只能支持 1.44M/2.88M 的说法的调整[更正]
对第三条目, 进行内容的添加[添加]


GRUB 2使用简介
 by bean@sysoft

Grub 2 是新一代的Grub，它实现了一些Grub中所没有的功能：

1、模块化设计

 不同于Grub的单一内核结构，Grub 2 的功能分布在很多的小模块中，并且能在运行时动态装载和卸除。

2、支持多体系结构

 Grub 2可支持PC(i386), MAC(powerpc)等不同的体系机构，而且支持最新的EFI架构。

3、国际化的支持

 Grub 2 可以支持非英语的语言。

4、内存管理

 Grub 2 有真正的内存管理系统。

5、脚本语言

 Grub 2 可以支持脚本语言，例如条件，循环，变量，函数等。
当然，Grub 2正处在开发阶段，因此以上的某些功能可能现阶段还不是很完善。

安装和使用

 Grub 2的内核是符合multiboot标准的，因此可以在Grub中引导。

1、下载
 http://grub4dos.sourceforge.net/grub2.zip
解压到某个FAT分区的根目录，会生成/boot/grub目录，Grub 2的文件便在该目 录下。

2、修改
/boot/grub/grub.cfg
这是Grub 2的配置文件，它的格式不同于menu.lst，以下是一个例子：

set timeout=20
set default=0

menuentry "Chainload First Part" {
set root=(hd0,1)
chainloader +1
}

menuentry "Load Linux at Second Part" {
set root=(hd0,2)
linux /vmlinuz root=/dev/hda2
initrd /initrd
}

 如果你熟悉Grub，应该可以看明白里面的内容。要注意的是:
a、timeout, default等参数用变量来储存
d、菜单项由menuentry定义
c、第1个分区是(hd0,1)而不是(hd0,0)
d、当前支持的启动方式是chainload,linux和multiboot

3、在Grub中使用以下的命令进入Grub2
 root (hd0,0)
kernel /boot/grub/core.img
boot

(hd0,0)请用存放Grub2的分区的名字来代替

4、进入Grub 2后，在菜单界面下输入 c 便可进入控制界面。

 基本命令：

lsmod
列表当前装载的模块

insmod mod_name
装载模块

rmmod mod_name
卸除模块

help [command]
显示帮助

ls [options] [dir]
列表目录。当不带参数时，显示的是所有的硬盘设备，带参数时，显示的是目录里的子目录和文件。

还有很多其它的命令，全部命令的列表在/boot/grub/command.lst里:
boot cat chainloader cmp . configfile export font halt hello help initrd
lsmod linux loopback ls lsmod module multiboot play reboot rescue rmmod
search set source terminal terminfo [ unset vbeinfo vbetest videotest

 可以用help来看具体的用法

注意：

a、很大一部分命令都在模块里，如果输入时显示找不到命令，只需要用insmod 装载相应的模块就可以了。

b、你可以定制内核，使所需的命令包在其中。

从代码中编译：

1、用cvs取得源代码
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub2

2、当前的Grub2代码中有一个bug，使得启动后不会显示grub.cfg中的菜单，我写了 一个补丁，在：
http://grub4dos.sourceforge.net/grub2-menu.diff
要使用该补丁，请进入grub2的目录，然后：
patch -p1 < grub2-menu.diff
这里假设grub2-menu.diff放在grub2目录下

3、./configure
然后
./make

4、定制内核

./grub-mkimage -d . -v -o core.img fat pc

core.img是内核的名字，fat和pc是加入内核的模块。常用模块有：

fat: 支持 fat 文件系统
ext2: 支持 ext2 文件系统
pc: 支持主分区和扩展分区
help: help命令
ls: ls命令

除了当前分区的文件系统的模块外，其它的都可以用insmod在进入grub2后才转载

5、把core.img, boot.img, diskboot.img, *.mod, fs.lst, command.lst
抄到某一分区的 /boot/grub目录下，然后编写配置文件grub.cfg


GRUB2高级教程

by bean
这个教程介绍GRUB2中的一些高级功能。

1、编译和安装

 首先，使用cvs下载代码：

cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub2

 下载完成后进入工作目录grub2。

然后，可以有选择地打上补丁。比如说，要加上ntfs支持的话，可以运行：

patch -p0 < grub2-ntfs-u2.diff

补丁后运行以下的命令进行编译：

./configurev
make

然后，利用grub-mkimage定制内核，例如：

./grub-mkimage -d . -o core.img pc fat ntfs

如果要转换为grldr.mbr可引导的形式，运行：

cat g2ldr.bin core.img > g2ldr

注意；grub-mkimage有一个参数--prefix，用来指定启动时grub.cfg和模块文件所在的目录，比如：

./grub-mkimage --prefix=/grub2 -d . -o core.img pc fat ntfs

这样在启动时会到/grub2目录里寻找grub.cfg和模块文件。缺省目录是/boot/grub/。

在安装时，把core.img或g2ldr拷贝到某一分区FAT/NTFS的根目录，把moddep.lst, commands.lst, fs.lst和*.mod文件拷贝到分区的/boot/grub/目录里。

g2ldr可以在NT的启动管理器里引导。首先，利用grubinst生成g2ldr.mbr。

grubinst -2 > C:\g2ldr.mbr【lianjiang注：疑为笔误，应为 grubinst -2 -o C:\g2ldr.mbr】

然后，在boot.ini里增加一项：
C:\g2ldr.mbr="Start GRUB2"

也可以安装到MBR里：

grub -2 (hd0)

这样，下次启动时会引导g2ldr而不是grldr.

你也可以在grub4dos里引导grub2，这时使用的是core.img：

kernel (hd0,0)/core.img
boot

2、预编译版本

 如果觉得自己编译麻烦，可以使用预编译版本，网址是：

http://grub4dos.sourceforge.net/grub2/

里面的grub2-*.zip文件就是了。

该版本打上了所有的补丁(*.diff文件)，并且使用了以下的参数配置内核。

./grub-mkimage -d . -o core.img pc fat ntfs

补丁说明：
grub2-ntfs-u2.diff
NTFS文件系统代码的补丁

grub2-parser-u2.diff
修正了脚本代码的很多bug，建议使用

grub2-parser-u2-1.diff
在grub2-parser-u2.diff基础上的递增补丁，修正了\转义字符的一个小bug

3. 配置文件

 grub2中的配置文件是grub.cfg，它的语法与GRUB Legacy中不太一样。以下是一个例子：

set timeout=10
set default=0

menuentry "Boot First Partition" {
set root=(hd0,1)
chainloader +1
}

menuentry "Boot Memdisk" {
linux (hd0,1)/memdisk
initrd (hd0,1)/aa.img
}

注意：grub2中的分区是从(hd0,1)开始的。

3. 变量

 grub2中引入了变量的概念，使用set可以设置变量的值，例如:

set AA=1

 需要调用变量的值时，使用$AA或${AA}。

例如：

set BB=$AA

 BB的值被设为1。要注意的是，原来版本的变量赋值有问题，需要使用grub2-parser-u2.diff补丁。

grub2的一些功能是利用变量来实现的，例如：

timeout

 缺省的等待时间，相当于grub中的timeout命令。

default

 缺省的菜单项，相当于grub中的timeout命令。

pager
 pager为1时，输出满一个屏幕时会暂停一下，相当于grub中的pager命令。

root
 设置根设备。相当于grub中的root命令。

?
 这个变量的值是对上一条命令的执行结果。

prefix
 模块文件和grub.cfg所在的目录。

debug
 这个变量用于调试。部分grub2的代码使用了调试输出，它们在一般情况下是不会显示的，但如果把debug设置为相应的值后，调试信息就会显示。比如说，脚本部分使用了scripting关键字。当debug中包含scripting时，脚本调试信息就会显现。

set debug=scripting

 4. 命令介绍

 这里主要介绍一些grub2中高级命令，简单的可以使用help来查看用法。

4.1、ls命令
 grub2中的ls命令可以显示设备和文件列表。

ls
 列出当前的所有设备。

ls -l
 详细列出当前的所有设备。对于分区，会显示其label。

ls (hd0,1)/
 列出分区(hd0,1)根目录的文件。

ls -l (hd0,1)/
 详细列出分区(hd0,1)根目录的文件，会显示文件的大小和是否为目录。

4.2、search命令
search相当于grub4dos中的find --root，它可以在所有分区里寻找某一文件。

search /grub.exe

 列出所有根目录里包含grub.exe文件的分区。

search可以根据分区的label来搜索：

search -l WinXP

 搜索label是WinXP的分区。

search可以把搜索的结果保存到某一个变量中。

search --set=AA /grub.exe

 另外，不指定变量的名字时，缺省变量是root

search --set /grub.exe

 另外要注意一点，在匹配项多于一个时，搜索结果不会保存到变量中。

4.3 loopback命令

loopback命令可用于建立回放设备：例子：

loopback lo0 (hd0,1)/aa.iso

 然后可以使用lo0设备来访问aa.iso里的内容，比如说，可以从aa.iso里的软盘映像中启动：

loopback lo0 (hd0,1)/aa.iso
linux (lo0)/memdisk
initrd (lo0)/aa.img

 当使用硬盘映像时，要加上-p参数。

loopback -p lo0 (hd0,1)/aa.dsk

 这时，映像中的第一个分区就可以使用(lo0,1)来访问。

loopback命令可以嵌套使用。比如说，列表第一个分区里的硬盘映像aa.dsk里的光盘映像aa.iso里的软盘映像aa.img里的根目录的文件：

loopback -p lo0 (hd0,1)/aa.dsk
loopback lo1 (lo0,1)/aa.iso
loopback lo2 (lo1)/aa.img
ls -l (lo2)/

 回放设备的名字可以随意设置，比如说，可以使用loop作为名字，访问时使用(loop)就可以了。

要删除某一回放设备，可以使用-d参数：

loopback -d lo0

 5. 图形终端和中文显示

 可以使用以下的命令启动图形终端：

insmod vbe
font (hd0,1)/unifont.pff
insmod gfxterm
terminal gfxterm

unifont.pff是字体文件，在sf上有一个可以直接使用的版本，它是使用以下的方法制作的。

首先，下载unifont字体文件：

http://czyborra.com/unifont/unifont.hex.gz

解压后得到unifont.hex文件。

grub2的util目录中有一个工具，可以把unifont.hex转换为grub2可以使用的格式：

ruby util/unifont2pff.rb unifont.hex > unifont.pff

另外，在转换时可以选择某一个子区域。

ruby util/unifont2pff.rb 0-127 unifont.hex > unifont.pff

这样，生成的字体文件就只包含ASCII的字符了。sf上的unifont_ascii.pff就是这样生成的。

进入了图形终端后，就可以显示中文了。可以使用ls命令，列表一下分区中的文件，可以看到中文目录和文件的名字了。如果目录是以英文开始，可以输入开始字符，然后按TAB自动完成。利用这个办法，即使没有输入法，也可以进入中文的目录里。

磁盘的label也可以是中文的，使用ls -l就可以显示出来，但是FAT文件系统中有bug，中文label不能正确显示，NTFS则没有问题。

当然，也可以在grub.cfg使用中文，包括菜单的标题和文件名参数。但是，要记得使用UTF-8编码。另外，如果你是使用Windows的写字板来把ANSI转换为UTF-8的话，在文件的一开始会多出三个字符 EF BB BF, 需要使用UltraEdit等二进制编辑工具把它们去掉。


分享：gfxmenu定制高级教程（新增可定制菜单）

本教程介绍从源代码的角度来定制gfx的菜单，比较适合喜欢DIY的用户。我修改了一下gfxboot的代码，使得定制工作完全可以在Windows环境下运行，也方便没有Linux的用户了。

1，下载和编译

首先，下载msys工具包：

http://nufans.net/grub4dos/grub_msys_v4.zip

编译工作需要在sh环境下进行。工具包里没有cpio，但在帖子"grub4dos 的 gfxmenu 支持"的#9可以找到，把文件复制到bin目录或者系统路径能找到的地方。

然后，下载SuSE风格的配置文件：

3.2系列：
http://nufans.net/grub4dos/gfxboot-3.2.zip

3.3系列：
http://nufans.net/grub4dos/gfxboot-3.3.zip

输入

make

就能编译成功，生成文件在 boot/message。

2、基本定制

back.jpg
背景图片。置换后，再运行一下make就能把新的图片加进message，比用cpio命令要快。

help-boot.en.html, help-boot.zh_CN.html, help-install.en.html, help-install.zh_CN.html
中英文帮助信息，可以按自己的需要进行修改。html语句不要用得太复杂，不然gfxmenu可能处理不了。

po/bootloader.pot, po/zh_CN.po
中英文的信息翻译，bin目录里是一些有用的工具，在README里有介绍。比如说，要加一个新翻译Boot Windows，可以在po目录里输入：

bin/add_text bwin "Boot Windows"

然后，打开zh_CN.po，找到

#. txt_bwin
msgid "Boot Windows"
msgstr ""

"" 改为 "启动Windows" 就行了。记得要使用UTF-8编码。

16x16.fnt
在3.2系列里，生成字体的程序getx11font需要X-Window的支持，在Windows下无法使用。因此，不要运行make font来生成字体。里面的16x16.fnt是我预先定制的，包含500个常用汉字。

在3.3系列里，生成字体的程序mkblfont可以在Windows下使用，我把相应的exe文件加上了。目录里的chs.txt是包含的汉字，共有3500个，应该是足够了。如果有缺字的话，可以修改chs.txt，然后运行make font生成新的字体文件。不过，新版字体和旧版是不兼容的，不能把这里生成的字体拿到3.2系列里用。

字体缺省使用宋体，你也可以按需要改动。打开Makefile，找到：
aafont:
mkblfont -v -l 18 \
-a 0x20-0x7e,0xa0-0xbf,0xc1-0xcb,0xcd-0xce,0xd0-0xd1,0xd3-0xd8,0xda-0xff \
-t chs.txt \
-f simsun:prop=2:space_width=4:size=17:nobitmap=1:autohint=1 \
16x16.fnt >16x16.log

可以把simsun改为其他值。控制面板的字体里显示了系统里所有的字体，只要把文件名里的后续去掉就行了。比如说，黑体是simhei。

3、使用可定制菜单（3.3系列）

为了方便大家修改message的参数，我制作了一个可定制的message文件。你可以通过编辑message里的gfxboot.cfg文件，来达到定制的目地，而不需要进行重新编译了。

message里的gfxboot.cfg列出所有的选项，不过在变量前都加上了#，变为注释了。使用时，先把#和其后的空格去掉，然后再根据自己需要修改数值。

目前支持的参数有：

boot_show （缺省值0）
值为0时，隐藏Options编辑框，值为1时显示。因为options框实际上是没有作用的，建议把它隐藏起来。

xmenu_hide_current （缺省值0）
值为1时，隐藏语言下面的“简体中文”的字样。

menu_start_x, menu_start_y
菜单左上角的x,y坐标。

menu_max_entries（缺省值8）
最多显示的菜单行数

menu_bar_min_width（缺省值300）
选择菜单条的最小宽度。如果不想菜单条过长，可以把这里的值设得很小，例如1，那样的话，菜单条的长度就会自动设为菜单项的最大长度了。

menu_text_normal（缺省值0xfffff，即白色）
一般菜单项的字体颜色，使用rgb的数值

menu_text_select（缺省值0）
当前选择项的字体颜色

boot_text_options （缺省值0xfffff）
options框字体颜色

boot_text_normal （缺省值0xfffff）
启动文本字体颜色

infobox_bg （缺省值0xd8deed）
帮助信息框的背景颜色

infobox_text_normal（缺省值0）
帮助信息框的字体颜色

menu_bar_color （缺省值0xffffff）
菜单条的颜色

loading_color （缺省值0x295202）
载入框颜色

title_bg （缺省值0x4f9805）
弹出框标题背景颜色

hide_reboot （缺省值0）
值为1时，不显示重启的按钮。

hide_poweroff （缺省值0）
值为1时，不显示关机的按钮。

disable_num_key（缺省值0）
缺省时，按1-9键就会启动相应的菜单项，把disable_num_key设为1可以屏蔽这一功能。

4、风格定制

这就需要修改inc文件。该文件是类似于forth语法的，要看懂不容易。不过，不少文件的开始就是重要常量的定义，只需要修改它们的值就能定制gfxmenu的行为。比如说，在xmenu.inc里面有很多可以定制的参数：
复制内容到剪贴板
代码:
/xmenu.normal.bg        lightgray def
/xmenu.normal.fg        black def
/xmenu.selected.fg        white def
/xmenu.selected.bg        0x6c6c6c newcolor
这里就是定义普通文本和选择文本的颜色。颜色可以用常量black,white,blue,red,green, yellow, lightgray, dotcolor, lightdotcolor, somegreen和lightblue（它们在common.inc里定义）, 也可以直接使用RGB值。
复制内容到剪贴板
代码:
small_layout {
  /xmenu.maxlines        22 def
} {
  /xmenu.maxlines        28 def
} ifelse
这里其实就是设置菜单里显示的最大行数的。这句的意思是在small_layout时，最多显示22个菜单项，否则，最多显示28个菜单项。你可以根据需要修改它的值。

要注意的是，在3.3系列里，修改最大行数的方法改变了。你可以定制菜单框出现的位置和大小，而最大行数则根据框的大小自动算出。

5、修改代码

gfxmenu的配置文件是使用类似于forth语言的结构。它和一般高级语言有很大的区别，它是面对机器的，其核心的概念是堆栈。比如说，对于表达式：

1 + 2 * 3

在forth里表示为：

1 2 3 * +

其操作步骤为：

第一步：数字 1 进栈
第二步：数字 2 进栈
第三步：数字 3 进栈
第四步：操作符 ×，2, 3 出栈，相乘，结果6进栈
第五步：操作符 +，1, 6 出栈，相乘，结果7进栈

最后，堆栈里剩下7，就是1 + 2 * 3的结果。

由于forth和机器的运算非常接近，其解析器很小，运算速度很快，这对于gfxboot来说还是比较合适的。

在gfxboot目录下有gfxboot.html，就是gfxboot的用户指南。里面包含所有基本函数的定义。举例说：
复制内容到剪贴板
代码:
* add – addition

( int1 int2 — int3 )

( string1 int4 — string2 )

( ptr1 int5 — ptr2 )

int3: int1 + int2

string2: substring of string1 at offset int4

Note: Strings are treated as byte sequences, not Unicode chars. Sizes of string1 and ptr1 are not checked.

See also: abs, and, div, max, min, mod, mul, neg, not, or, shl, shr, sub, xor

Example 9.

  1 2 add         % 3

  "abc" 1 add     % "bc"
复制内容到剪贴板
代码:
× add - addition
函数的名字和简单描述
复制内容到剪贴板
代码:
( int1 int2 — int3 )

( string1 int4 — string2 )

( ptr1 int5 — ptr2 )
这是参数描述。 - 左边是操作前的堆栈状态，右边是操作后的堆栈状态。这里有三个，就是说add有三种不同的用法。
复制内容到剪贴板
代码:
int3: int1 + int2

string2: substring of string1 at offset int4
对于上面参数值的具体描述。
复制内容到剪贴板
代码:
Note: Strings are treated as byte sequences, not Unicode chars. Sizes of string1 and ptr1 are not checked.
说明。
复制内容到剪贴板
代码:
See also: abs, and, div, max, min, mod, mul, neg, not, or, shl, shr, sub, xor
其他相关的函数。
复制内容到剪贴板
代码:
Example 9.

  1 2 add         % 3

  "abc" 1 add     % "bc"
例子，% 后是运算的结果。

附件

message.zip (551.57 KB)2009-1-12 23:30


Please refer to http://grub4dos.sourceforge.net/wiki/ for DOCs on GRUB4DOS.

Main project page:	https://gna.org/projects/grub4dos/

Download site:		http://download.gna.org/grub4dos/
Download site:		http://grub4dos.sourceforge.net/
Download site:		http://sarovar.org/projects/grub4dos/
Download site:		http://grub4dos.nufans.net/
Download site:		http://sites.google.com/site/grubdos/
Download site:		ftp://grub4dos.sarovar.org/pub/grub4dos/

Get the latest source code by using anonymous svn in this way:

    svn co svn://svn.gna.org/svn/grub4dos/trunk grub4dos

or in this way:

    svn co http://svn.gna.org/svn/grub4dos/trunk grub4dos

View the source code online with your web browser at:

    http://svn.gna.org/viewcvs/grub4dos/trunk/

GRUB4DOS mailing list:

    grub4dos-devel@gna.org

Subscription page:

    https://mail.gna.org/listinfo/grub4dos-devel/

Discussion forum(Official technical support site):

    http://www.boot-land.net/forums/index.php?showforum=66

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

Usage:
        GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE]

        The FILE, for example, can be (hd0,0)/menu.lst

        In CONFIG.SYS, the line looks like:

            install=c:\some\where\grub.exe --config-file=FILE

        If no options present, GRUB.EXE simply uses

            (hd0,0)/menu.lst

        as the configure file, if it exists. (Notice! We finally
        changed the default file from (hd0,0)/boot/grub/menu.lst to
        (hd0,0)/menu.lst) (Changed 2006-12-23. See Update 3 below.)

        The partition (hd0,0) can be of a Windows partition or a Linux
        partition, or any other partition type supported by GRUB.

        Only GRUB-style filename is acceptable here for FILE. A DOS
        filename won't work(it is certain we should use GRUB-style
        filenames because DOS-filenames won't access a file in a
        Linux ext2 partition for example).(See Update 2 below)

        Update: FILE can be the contents of a menu. Use semi-colon
        to delimitate the embedded commands here in FILE. The FILE
        can be enclosed with a pair of double-quotes. For example:

            GRUB --config-file="root (hd0,0);chainloader +1"

        This command will boot the system in (hd0,0).

        Another example:

            GRUB --config-file="reboot"

        This command will reboot the machine.

        One more example:

            GRUB --config-file="halt"

        This command will halt the machine.

        if --bypass is specified, GRUB will exit to DOS when
        timeout reached.

        The option `--time-out=T' specifies the timeout value in
        seconds. T defaults to 5 if --bypass is specified and defaults
        to 0 if --bypass is not specified.

        The default hot key value is 0x3920(for space bar). If this
        key is pressed, GRUB will boot normally. If another key is
        pressed, GRUB will terminate immediately and return back to
        DOS. See "int 16 keyboard scan codes" below.

        Each option can be specified only once at most.

        Update 2: DOS filenames have been supported(patched by John
        Cobb). If the beginning two characters of FILE are "#@", then
        the rest of FILE is taken as a DOS filename. Example:

            GRUB --config-file="#@c:\menu.lst"

        Only the beginning 4KB of the DOS file will be used. The file
        should be an uncompressed text file.

        Note: You may also use the `direct DOS file access' with the
        SHELL or INSTALL line in CONFIG.SYS, but should not use it
        with the DEVICE line. The DOS document said that a DOS device
        driver should not call the `open file' DOS call.

        Update 3(2006-12-23): By default, GRUB.EXE will locate its
        config file in the following order:

            (DOS file) .\menu.lst, the MENU.LST in the current dir.

            (DOS file) \menu.lst, the MENU.LST in the root dir of
                        the current drive.
            (GRUB file) /menu.lst, the MENU.LST in the root dir of
                        the boot device.

        The default boot device is still (hd0,0).

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

Update 1:	Version 0.2.0 also brings out a new thing, GRUB for NTLDR,
        which could be used to boot into GRUB from the boot menu
        of Windows NT/2000/XP. Copy GRLDR to the root directory of
        drive C: of Windows NT/2000/XP and append to C:\BOOT.INI
        this line:

            C:\GRLDR="Start GRUB"

        That will be done. The GRLDR should be in the same directory
        as BOOT.INI and NTLDR. Note that BOOT.INI is usually hidden
        and you must unhide it before you can see it. The filename
        GRLDR shouldn't be changed. If GRLDR is in a NTFS partition,
        it should be copied to the root directory of another non-NTFS
        partition(and likewise should the menu.lst file be). If GRLDR
        is compressed, e.g., in a NTFS partition, it will not work.

        Even if the drive letter of this disk has been changed to
        other than C by the Windows device manager, it seems you still
        have to use the letter C here in BOOT.INI, otherwise, NTLDR
        will fail to locate the GRLDR file.

        And what's more, if you are booting NTLDR from a floppy, you
        will have to write the GRLDR line in A:\BOOT.INI like this:

            C:\GRLDR="Start GRUB"

        and shouldn't use the letter A like this:

            A:\GRLDR="Start GRUB"

        (Note that in the case when BOOT.INI is on floppy A, the
        notation "C:\GRLDR" actually refer to the file A:\GRLDR).

Update 2:	GRUB for Linux is also introduced along with 0.2.0. You can
        boot grub using a linux loader KEXEC, LILO, SYSLINUX or another
        GRUB. (GRUB4LIN has merged into GRUB.EXE)

        To boot GRUB off Linux, use this pair of commands:

            kexec -l grub.exe
            kexec -e

        To boot GRUB via GRUB, use commands like the following:

            kernel (hd0,0)/grub.exe
            boot

        To boot GRUB via LILO, use these lines in lilo.conf:

            image=/boot/grub.exe
            label=grub.exe

        To boot GRUB via SYSLINUX, use these lines in syslinux.cfg:

            label grub.exe
                kernel grub.exe

        LOADLIN may encounter problems when loading grub.exe, because
        grub.exe requires some unchanged original BIOS interrupt
        vectors, but DOS has destroyed them, and loadlin does not
        recover them before it transfers control to grub.exe.

Update 3:	Beginning at version 0.4.0, GRUB for DOS supports memdrives.
        Example:

            # boot into a floppy image
            map --mem (hd0,0)/floppy.img (fd0)
            map --hook
            chainloader (fd0)+1
            rootnoverify (fd0)
            map --floppies=1
            boot

        Because the image will be copied to a memory area, the image
        itself can be non-contiguous and even gzipped.

        Another Example:

            map --mem=-2880 (hd0,0)/floppy.img (fd0)

        This memdrive (fd0) will occupy at least 1440 KB of memory.
        This is useful when the size of a 1.44M-floppy image is less
        than 1440 KB.

        One more example:

            map --mem --read-only (hd0,0)/hd.img (hd1)

        This memdrive is a hard drive, and read-only. That means you
        will not be able to write data to the memdrive (hd1).

        You can use many memdrives and many ordinary virtual emulated
        disk-based drives at the same time.

        If the BIOS does not support int15/EAX=e820h, you will not be
        able to use any memdrives.

Update 4:	For memdrive emulation, a single-partition image can be used
        instead of a whole-harddrive image. Example:

            map --mem (hd0,7)/win98.img (hd0)
            map --hook
            chainloader (hd0)+1
            rootnoverify (hd0)
            map --harddrives=1
            boot

        Here win98.img is a partition image without the leading MBR
        and partition table in it. Surely GRUB for DOS will build an
        MBR and partition table for the memdrive (hd0).

Update 5:	Now GRLDR can be used as a no-emulation-mode bootable CD-ROM
        boot image. Example for Linux users:

            mkdir iso_root
            cp grldr iso_root
            mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root

        As an alternative, grldr can also be used the same way as
        stage2_eltorito. The -boot-info-table option is allowed but you
        can omit it:

            mkdir iso_root
            cp grldr iso_root
            mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

        Also note that the bootable.iso above must be created with the
        -boot-load-seg 0xHHHH option where HHHH is greater than or
        equal to 1000(hex). If HHHH < 1000(hex), QEMU will hang. This
        is a bug in QEMU. The grldr.iso can be created with or without
        -boot-load-seg 0xHHHH option.

        The menu.lst file should be placed in the root dir of the CD.

Update 6:	The Chinese special build is in the "chinese" subdirectory.
        (patched by Gandalf, 2005-06-27)

        The Chinese special build also has scdrom builtin.
        (update: scdrom has been dropped since 2006-07-20)

Update 7:	Added memory drive (md). Like (nd) for network drive and (cd)
        for CD-ROM drive, a new drive (md) is implemented for accessing
        the whole memory as a disk drive. (md) only works for systems
        with BIOS int15/EAX=E820h support.

        The cat command now has a few new options: --hex for hexdump,
        and --locate=STRING for string search in file.

        Typical examples:

            cat --hex (hd0)+1

        It will display the MBR sector in hex form.

            cat --hex (md)+2

        It will display 1KB of your memory(in fact, it is the real-mode
        IDT table), also in hexdump form.

            cat --hex (md)0x800+1

        It will display 1 sector of your extended memory.

            cat --hex (hd0,0)+1

        It will display the first sector of partition (hd0,0). Usually
        this sector contains the boot record of an operating system.

Update 8:	Added ram drive (rd). The (md) device accesses the memory
        starting at physical address 0. But (rd) accesses memory
        starting at any base address. The base and length of the ram
        drive can be specified through the map command. "help map" for
        details. You can even specify the BIOS drive number used for
        the (rd) drive, e.g., map --ram-drive=0xf0. The default drive
        number for (rd) is 0x7F which is a floppy. If (rd) is a hard
        drive image, you should change the drive number to a value
        greater than or equal to 0x80(but should avoid using 0xffff,
        because 0xffff is for the (md) device).

        The notation (rd)+1 always represents the file which contains
        all the bytes stored in (rd).

Update 9:	Directly boot NTLDR of WinNT/2K/XP and IO.SYS of Win9x/ME and
        KERNEL.SYS of FreeDOS. Examples:

            chainloader --edx=0xPPYY (hd0,0)/ntldr
            boot

            chainloader --edx=0xYY (hd0,0)/io.sys
            boot

            chainloader --ebx=0xYY (hd0,0)/kernel.sys
            boot

        Hex YY specifies the boot drive number, and hex PP specifies
        the boot partition number of NTLDR. If the boot drive is
        floppy, PP should be the hex value ff, i.e., decimal 255.

        For KERNEL.SYS of FreeDOS, the --edx won't work,
        use --ebx please.

        The option --edx ( --ebx ) can be omitted if the file is in
        its normal place. But in some cases, those options are needed.

        If, e.g., the ntldr file is in an ext2 partition called
        (hd2,8) while you want it to think of the Windows partition
        (hd0,7) as the boot partition, then --edx is required:

            chainloader --edx=0x0780 (hd2,8)/ntldr

        For DOS kernels(i.e., IO.SYS and KERNEL.SYS), the boot
        partition number is meaningless, so you only need to specify
        the correct boot drive number YY(but specifying the boot
        partition number is harmless).

        The above PPYY can also be specified by using a root or
        rootnoverify command after the chainloader command. Examples:

            chainloader (hd2,6)/kernel.sys
            rootnoverify (hd0)	<-------- YY=80
            boot

            chainloader (hd0,0)/ntldr
            rootnoverify (hd0,5)	<-------- YY=80, PP=05
            boot

        Tip: CMLDR (the ComMand LoaDeR, which is used to load the
        Windows Fault Recovery Console) can be chainloaded as well
        as NTLDR.

        Bean has successfully decompressed and booted IO.SYS of WinME.
        Thanks for the great job!

Update 10:	isolinux.bin (version 3.73) can be chainloaded as with build
        2009-02-09.

            chainloader (cd)/isolinux.bin

        isolinux.bin must reside in a real or virtual cdrom.

Update 11:	stage2 of Grub Legacy can be chainloaded in this way:

            chainloader --force --load-segment=0 --load-offset=0x8000 --boot-cs=0 --boot-ip=0x8200 (...)/.../stage2

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

    There is no full documentation in English at present. Here are some
    examples showing the usage of disk emulation commands:

1.	Emulates HD partition C: as floppy drive A: and boot win98 from C:

        map --read-only (hd0,0)+1 (fd0)
        chainloader (hd0,0)+1
        rootnoverify (hd0)
        boot

    In the above example, (hd0,0) is drive C: with win98 on it. After win98
    boot complete, you will find that A: contains all files of C:, and if
    you delete files in A:, the files in C: will also disappear.

    At the map command line, the notation (hdm,n)+1 is interpreted to
    represent the whole partition (hdm,n), not just the first sector of the
    partition.

2.	Emulates HD partition C: as floppy drive A: and boot win98 from A:

        map --read-only (hd0,0)+1 (fd0)
        map --hook
        chainloader (fd0)+1
        rootnoverify (fd0)
        map --floppies=1
        boot

    After the "map --hook" command, the emulation takes effect instantly
    even in the GRUB command line.

    Note that the (fd0) in "chainloader (fd0)+1" is the emulated virtual
    floppy A:, not the real floppy diskette(because map is hooked now).

3.	Emulates an image file as floppy drive A: and boot win98 from C:

        map --read-only (hd0,0)/floppy.img (fd0)
        chainloader (hd0,0)+1
        rootnoverify (hd0)
        map --floppies=1
        map --harddrives=1
        boot

4.	Emulates an HD partition as the first hard disk and boot DOS from it:

        map --read-only (hd2,6)+1 (hd0)
        map --hook
        chainloader (hd0,0)+1
        rootnoverify (hd0)
        map --harddrives=1
        boot

    In this example, (hd2,6)+1 represents an extended logical DOS partition
    of the third BIOS hard disk (hd2).

    If a DOS partition is used to emulate a hard disk, GRUB for DOS will
    first try to locate the partition table, usually 63 sectors ahead of
    the DOS partition. GRUB for DOS will refuse the emulation if the
    partition table is not there.

5.	Emulates an image file as the first hard disk and boot DOS from it:

        map --read-only (hd0,0)/harddisk.img (hd0)
        chainloader --load-length=512 (hd0,0)/harddisk.img
        rootnoverify (hd0)
        map --harddrives=1
        boot

    If an image file is used to emulate a hard disk, the image file must
    contain an MBR. In other word, the first sector of HARDDISK.IMG must
    contain the partition table of the emulated virtual hard disk.

Note:	Counters for floppies and harddrives in the BIOS Data Area remain
    unchanged during the mapping. You should manually set them to proper
    values with `map --floppies=' and/or `map --harddrives=', especially,
    e.g., when there is no real floppy drive attached to the mother board.
    If not doing so, DOS might fail to start.

    `map --status' can report the values. Note also that `map --floppies='
    and `map --harddrives=' can be used independently without the
    appearance of mappings.

    0.4.2 has introduced a new variable, memdisk_raw, to simulate the
    memdisk-like raw mode. If the BIOS has no int15/87h, or if it has
    buggy int15/87h support, you should set this variable before any
    memdrives are used. Here is an example:

        map --memdisk-raw=1
        map --mem (hd0,0)/floppy.img (fd0)
        map --hook
        chainloader (fd0)+1
        rootnoverify (fd0)
        boot

    If you encountered a memdrive failure without using
    map --memdisk-raw=1, you should have a try with `map --memdisk-raw=1'.

    If you `map --memdisk-raw=0' later, you should afterwards do a
    `map --unhook'(and followed by a `map --hook' if needed).

    Update: memdisk_raw now defaults to 1. You should `map --memdisk-raw=0'
    if you want to use int15/87h to access memdrives.

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

    Floppies/harddisks of any size can be emulated with GRUB for DOS 0.2.0.

    Image file must be contiguous, or else GRUB for DOS will refuse it.

    The `blocklist' command can list fragments or pieces of a file.

    Type "help map" at the GRUB prompt to get a brief description of the
    command.

    The form

        map ... (fd?)

    is a floppy emulation, and the form

        map ... (hd?)

    is a hard disk emulation.

    When a HARD DISK emulation is used, better not start Windows for
    security reasons. Windows may even destroy all data and all information
    on all your real hard disks!!!!!!!!

    Update for --mem: when --mem is used, it seems rather safe even after
    entering Windows. Win98 can operate the memdrive normally.

    Windows NT/2000/XP does not recognize the emulated drives no matter
    whether the --mem option is present.

******************************************************************************
***   Explanation of the grldr-bootable floppies or harddisk partitions    ***
******************************************************************************

1. Ext2 Boot Sector/Boot Record Layout (for loading grldr)
------------------------------------------------------------------------------
An EXT2/EXT3 volume can be GRUB-bootable. Copy grldr and an optional menu.lst
to the root dir of the EXT2/EXT3 volume, and build the boot sector based on the
fifth sector of grldr(some fields need to be changed as detailed in the
following table). And then the EXT2/EXT3 volume is GRUB-bootable.

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the first sector of an EXT2/EXT3 volume.

Offset	Length	Description
======	======	==============================================================
00h	2	Machine code for short jump over the data.

02h	1	LBA indicator. Valid values are 0x02 for CHS mode, or 0x42 for
        LBA mode.

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x42.

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x42. It seems that
        (generally) all USB BIOSes have LBA support.

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x42,
        otherwise, set to 0x02.

        Note that Windows98 uses the value 0x0e as the LBA indicator.

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.

03h	10	OEM name string (of OS which formatted the disk).
        Update: this field is now used for error message of "I/O error"

0Dh	1	Sectors per block. Valid values are 2, 4, 8, 16 and 32.

0Eh	2	Bytes per block. Valid values are 0x400, 0x800, 0x1000, 0x2000
        and 0x4000.

10h	4	Pointers in pointers-per-block blocks, that is, number of
        blocks covered by a double-indirect block.

        Valid values are 0x10000, 0x40000, 0x100000, 0x400000 and
        0x1000000.

14h	4	Pointers per block, that is, number of blocks covered by an
        indirect block.

        Valid values are 0x100, 0x200, 0x400, 0x800, 0x1000.

18h	2	Sectors per track.

1Ah	2	Number of heads/sides.

1Ch	4	Number of hidden sectors (those preceding the boot sector).

        Also referred to as the starting sector of the partition.

        For floppies, it should be 0.

20h	4	Total number of sectors in the filesystem(or in the partition).

24h	1	BIOS drive number of the boot device.

        Actually this byte is ignored for read. The boot code will
        write DL onto this byte. The BIOS or the caller should set
        drive number in DL.

        We assume all BIOSes pass correct drive number in DL.
        Buggy BIOSes are not supported!!

25h	1	Partition number of this partition on the boot drive.

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.

        0xff is for whole drive. So for floppies, it should be 0xff.

26h	2	inode size in bytes. (Notice! We use the formerly reserved
        word here for inode size!)

28h	4	Number of inodes per group.

        Normally a 1.44M floppy has only one group, and the total
        number of inodes is 184. So the value should be	184 or
        greater.

2Ch	4	The block number for group descriptors.

        Valid values are 2 for 1024-byte blocks, and 1 otherwise.

        The value here is equal to (s_first_data_block + 1).

30h	1	code for "cld"(0xFC).

31h	2	code for "xor ax,ax"(0x31, 0xC0).

33h	1	code for "nop"(0x90) or "cwd"(0x99)

34h	458	The rest of the machine code.

1FEh	2	Boot Signature AA55h.

2. FAT12/FAT16 Boot Sector/Boot Record Layout (for loading grldr)
------------------------------------------------------------------------------
A FAT12/16 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the FAT12/16 volume, and build the boot sector based on the
fourth sector of grldr(some fields need to be changed as detailed in the
following table). And then the FAT12/16 volume is GRUB-bootable.

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the boot sector of an FAT12/16 volume.

Offset	Length	Description
======	======	==============================================================
00h	2	Machine code for short jump over the data.

02h	1	LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
        LBA mode.

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x0e.

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x0e. It seems that
        (generally) all USB BIOSes have LBA support.

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x0e,
        otherwise, set to 0x90.

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.

        Update(2006-07-31): Though GRLDR won't use this LBA-indicator
        byte, Windows 98 uses it. Usually this byte should be 0x90 for
        CHS mode(especially for floppies). If this byte is not set
        properly, Windows 98 will not recognize the floppy or
        partition. This problem was reported by neiljoy. Many thanks!

03h	8	OEM name string (of OS which formatted the disk).

0Bh	2	Bytes per sector. Must be 512.

0Dh	1	Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
        and 128. But a cluster size larger than 32K should not occur.

0Eh	2	Reserved sectors(number of sectors before the first FAT,
        including the boot sector), usually 1.

10h	1	Number of FATs(nearly always 2).

11h	2	Maximum number of root directory entries.

13h	2	Total number of sectors (for small disks only, if the disk is
        too big this is set to 0 and offset 20h is used instead).

15h	1	Media descriptor byte, pretty meaningless now (see below).

16h	2	Sectors per FAT.

18h	2	Sectors per track.

1Ah	2	Total number of heads/sides.

1Ch	4	Number of hidden sectors (those preceding the boot sector).

        Also referred to as the starting sector of the partition.

        For floppies, it should be 0.

20h	4	Total number of sectors for large disks.

24h	1	BIOS drive number of the boot device.

        Actually this byte is ignored for read. The boot code will
        write DL onto this byte. The BIOS or the caller should set
        drive number in DL.

        We assume all BIOSes pass correct drive number in DL.
        Buggy BIOSes are not supported!!

25h	1	Partition number of this filesystem in the boot drive.

        This byte is ignored for read. The boot code will write
        partition number onto this byte. See offset 41h below.

26h	1	Signature (must be 28h or 29h to be recognised by NT).

27h	4	Volume serial number.

2Bh	11	Volume label.

36h	8	File system ID. "FAT12   ", "FAT16   " or "FAT     ".

3Eh	1	code for "cli".

3Fh	1	code for "cld".

40h	1	code for "mov dh, imm8".

41h	1	Partition number of this partition on the boot drive.

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.

        0xff is for whole drive. So for floppies, it should be 0xff.

42h	442	The rest of the machine code.

1FCh	4	Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)

3. FAT32 Boot Sector/Boot Record Layout (for loading grldr)
------------------------------------------------------------------------------
A FAT32 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the FAT32 volume, and build the boot sector based on the
third sector of grldr(some fields need to be changed as detailed in the
following table). And then the FAT32 volume is GRUB-bootable.

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the boot sector of an FAT32 volume.

Offset	Length	Description
======	======	==============================================================
00h	2	Machine code for short jump over the data.

02h	1	LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
        LBA mode.

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x0e.

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x0e. It seems that
        (generally) all USB BIOSes have LBA support.

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x0e,
        otherwise, set to 0x90.

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.

        Update(2006-07-31): Though GRLDR won't use this LBA-indicator
        byte, Windows 98 uses it. Usually this byte should be 0x90 for
        CHS mode(especially for floppies). If this byte is not set
        properly, Windows 98 will not recognize the floppy or
        partition. This problem was reported by neiljoy. Many thanks!

03h	8	OEM name string (of OS which formatted the disk).

0Bh	2	Bytes per sector. Must be 512.

0Dh	1	Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
        and 128. But a cluster size larger than 32K should not occur.

0Eh	2	Reserved sectors(number of sectors before the first FAT,
        including the boot sector), usually 1.

10h	1	Number of FATs(nearly always 2).

11h	2	(Maximum number of root directory entries)Must be 0.

13h	2	(Total number of sectors for small disks only)Must be 0.

15h	1	Media descriptor byte, pretty meaningless now (see below).

16h	2	(Sectors per FAT)Must be 0.

18h	2	Sectors per track.

1Ah	2	Total number of heads/sides.

1Ch	4	Number of hidden sectors (those preceding the boot sector).

        Also referred to as the starting sector of the partition.

        For floppies, it should be 0.

20h	4	Total number of sectors for large disks.

24h	4	FAT32 sectors per FAT.

28h	2	If bit 7 is clear then all FATs are updated, otherwise bits
        0-3 give the current active FAT, all other bits are reserved.

2Ah	2	High byte is major revision number, low byte is minor revision
        number, currently both are 0.

2Ch	4	Root directory starting cluster.

30h	2	File system information sector.

32h	2	If non-zero this gives the sector which holds a copy of the
        boot record, usually 6.

34h	12	Reserved, set to 0.

40h	1	BIOS drive number of the boot device.

        80h is first HDD, 00h is first FDD.

        Actually this byte is ignored for read. The boot code will
        write DL onto this byte. The BIOS or the caller should set
        drive number in DL.

        We assume all BIOSes pass correct drive number in DL.
        Buggy BIOSes are not supported!!

41h	1	Partition number of this filesystem in the boot drive.

        This byte is ignored for read. The boot code will write
        partition number onto this byte. See offset 5Dh below.

42h	1	Signature (must be 28h or 29h to be recognised by NT).

43h	4	Volume serial number.

47h	11	Volume label.

52h	8	File system ID. "FAT32   ".

5Ah	1	opcode for "cli".

5Bh	1	opcode for "cld".

5Ch	1	opcode for "mov dh, imm8".

5Dh	1	Partition number of this partition on the boot drive.

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.

        0xff is for whole drive. So for floppies, it should be 0xff.

5Eh	414	The rest of the machine code.

1FCh	4	Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)

4. NTFS Boot Sector/Boot Record Layout (for loading grldr)
------------------------------------------------------------------------------
An NTFS volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the NTFS volume, and build the boot sector based on the
6th-9th sectors of grldr(some fields need to be changed as detailed in the
following table). And then the NTFS volume is GRUB-bootable.

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the leading 4 sectors of an NTFS volume.

Offset	Length	Description
======	======	==============================================================
00h	2	Machine code for short jump over the data.

02h	1	LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
        LBA mode.

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x0e.

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x0e. It seems that
        (generally) all USB BIOSes have LBA support.

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x0e,
        otherwise, set to 0x90.

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.

        Update(2006-07-31): Though GRLDR won't use this LBA-indicator
        byte, Windows 98 uses it. Usually this byte should be 0x90 for
        CHS mode(especially for floppies). If this byte is not set
        properly, Windows 98 will not recognize the floppy or
        partition. This problem was reported by neiljoy. Many thanks!

03h	8	OEM name string (of OS which formatted the disk).

0Bh	2	Bytes per sector. Must be 512.

0Dh	1	Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
        and 128. But a cluster size larger than 32K should not occur.

0Eh	2	(Reserved sectors)Unused.

10h	1	(Number of FATs)Must be 0.

11h	2	(Maximum number of root directory entries)Must be 0.

13h	2	(Total number of sectors for small disks only)Must be 0.

15h	1	Media descriptor byte, pretty meaningless now (see below).

16h	2	(Sectors per FAT)Must be 0.

18h	2	Sectors per track.

1Ah	2	Total number of heads/sides.

1Ch	4	Number of hidden sectors (those preceding the boot sector).

        Also referred to as the starting sector of the partition.

        For floppies, it should be 0.

20h	4	(Total number of sectors for large disks)Must be 0.

24h	4	(FAT32 sectors per FAT) - Usually 80 00 80 00, A value of
        80 00 00 00 has been seen on a USB thumb drive which is
        formatted with NTFS under Windows XP. Note this is removable
        media and is not partitioned, the drive as a whole is NTFS
        formatted.

28h	8	Number of sectors in the volume.

30h	8	LCN of VCN 0 of the $MFT.

38h	8	LCN of VCN 0 of the $MFTMirr.

40h	4	Clusters per MFT Record.

44h	4	Clusters per Index Record.

48h	8	Volume serial number.

50h	4	Checksum, usually 0.

54h	1	opcode for "cli".

55h	1	opcode for "cld".

56h	1	opcode for "mov dh, imm8".

57h	1	Partition number of this partition on the boot drive.

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.

        0xff is for whole drive. So for floppies, it should be 0xff.

58h	420	The rest of the machine code in the first sector.

1FCh	4	Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)

200h	1536	The rest of the machine code in the last 3 sectors.

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

Appendix A: File System Information Sector of FAT32(not used by grldr)

Offset	Length	Description
======	======	==============================================================
0h	4	Leading Signature 41615252h.

4h	480	Reserved, set to 0.

1E4h	4	FSI structure signature 61417272h.

1E8h	4	Contains the last known count of free clusters, if this is
        equal to FFFFFFFFh, then the count is unknown.

1ECh	4	Cluster number at which you should begin a search for a free
        cluster, if this is equal to FFFFFFFFh then the field has not
        been set.

1F0h	12	Reserved, set to 0.

1FCh	4	Trailing Signature AA550000h.

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

Appendix B: Media Descriptor Byte(not used by grldr)

The Media descriptor byte is meaningless because of the duplications, F0h for
example.

Byte	Type of disk	Sectors	Heads	Tracks	Capacity
----	------------	-------	-----	------	--------
FFh	5 1/4"		8	2	40	320KB
FEh	5 1/4"		8	1	40	160KB
FDh	5 1/4"		9	2	40	360KB
FCh	5 1/4"		9	1	40	180KB
FBh	both		9	2	80	640KB
FAh	both		9	1	80	320KB
F9h	5 1/4"		15	2	80	1200KB
F9h	3 1/2"		9	2	80	720KB
F0h	3 1/2"		18 	2	80	1440KB
F0h	3 1/2"		36 	2	80	2880KB
F8h	hard disk	NA	NA	NA	NA

******************************************************************************
***   grldr.mbr - How to write it to Master Boot Track of the hard disk    ***
******************************************************************************

grldr.mbr contains code that can be used as Master Boot Record. The code is
responsible for searching all partitions for grldr and when found, loading it.
Currently supported partition types are: FAT12/FAT16/FAT32, NTFS, EXT2/EXT3.
Logical partitions in the extended partition are supported, provided that the
extended partition type is Microsoft-compatible. In fact, the Linux extended
partition type(0x85) is not fully tested for the search mechanism.

How to write GRLDR.MBR to the Master Boot Track of a hard disk?

First, read the Windows disk signature and partition information bytes
(72 bytes in total, from offset 0x01b8 to 0x01ff of the MBR sector), and put
them on the same range from offset 0x01b8 to 0x01ff of the beginning sector of
GRLDR.MBR.

Optionally, if the MBR in the hard disk is a single sector MBR created by
Microsoft FDISK, it may be copied onto the second sector of GRLDR.MBR.

The second sector of GRLDR.MBR is called "previous MBR". When GRLDR not found,
"previous MBR" will be started.

No other steps needed, after all necessary changes stated above have been made,
now simply write GRLDR.MBR on to the Master Boot Track. That's all.

Note: The Master Boot Track means the first track of the hard drive.

Note: The bootstrap code of GRLDR.MBR only finds GRLDR file in the root dir of
a partition. You'd better place menu.lst file accompanying with GRLDR(i.e., in
the same root dir of the same partition as GRLDR).

The filename "grldr" in an ext2 partition must be in lower case letters, and
the file type of grldr must be plain regular. Other types, e.g., a symbolic
link, won't work.

Update:	bootlace.com is a DOS/Linux utility for installing grldr.mbr to MBR.
The whole grldr.mbr is embedded in the body of the bootlace.com utility, so
bootlace.com can be used independently. See below.

******************************************************************************
***               grldr.mbr - Details about the control bytes              ***
******************************************************************************

Six bytes can be used to control the boot process of GRLDR.MBR.

Offset	Length	Description
======	======	==============================================================
02h	1	bit0=1: disable the search for GRLDR on floppy
        bit0=0: enable the search for GRLDR on floppy

        bit1=1: disable the boot of PREVIOUS MBR with invalid
            partition table(usually an OS boot sector)
        bit1=0: enable the boot of PREVIOUS MBR with invalid
            partition table(usually an OS boot sector)

        bit2=1: disable the feature of unconditional entrance to
            the command-line(See below `--duce')
        bit2=0: enable the feature of unconditional entrance to
            the command-line(See below `--duce')

        bit3=1: disable geometry tune(See below `--chs-no-tune')
        bit3=0: enable geometry tune(See below `--chs-no-tune')

        bit4 - bit6: reserved

        bit7=1: try to boot PREVIOUS MBR after the search for GRLDR
        bit7=0: try to boot PREVIOUS MBR before the search for GRLDR

03h	1	timeout in seconds to wait for a key press. 0xff stands for
        waiting all the time(endless).

04h	2	hot-key code. high byte is scan code, low byte is ASCII code.
        the default value is 0x3920, which stands for the space bar.
        if this key is pressed, GRUB will be started prior to the boot
        of previous MBR. See "int 16 keyboard scan codes" below.

06h	1	preferred boot drive number, 0xff for no-drive
07h	1	preferred partition number, 0xff for whole drive

        if the preferred boot drive number is 0xff, the order of the
        search for GRLDR will be:

            (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
            (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
            ... ... ... ... ... ... ... ...
            (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
                               (X=max harddrive number)
            (fd0)

        otherwise, if the preferred boot drive number is Y(not equal to
        0xff) and the preferred partition number is K, then the order of
        the search for GRLDR will be:

            (Y) if K=0xff; or (Y,K) otherwise
            (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
            (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
            ... ... ... ... ... ... ... ...
            (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
                               (X=max harddrive number)
            (fd0)

        Note: if Y < 0x80, then (Y) is floppy, else (Y) is harddrive,
              and (Y,K) is partition number K on harddrive (Y).

******************************************************************************
***        bootlace.com - Install GRLDR.MBR bootstrap code to MBR          ***
******************************************************************************

BOOTLACE.COM installs GRLDR.MBR boot record to the MBR of a harddrive or of a
harddrive image file, or to the boot sector of a floppy or a floppy image.

Usage:

    bootlace.com  [OPTIONS]  DEVICE_OR_FILE

OPTIONS:

    --read-only		do everything except the actual write to the
                specified DEVICE_OR_FILE.

    --restore-mbr		restore the previous mbr.

    --mbr-no-bpb		do not copy BPB in the boot sector of the
                leading FAT partition to MBR.

    --no-backup-mbr		do not copy the old MBR to the second sector of
                DEVICE_OR_FILE.

    --force-backup-mbr	force the copy of old MBR to the second sector
                of DEVICE_OR_FILE.

    --mbr-enable-floppy	enable the search for GRLDR on floppy.

    --mbr-disable-floppy	disable the search for GRLDR on floppy.

    --mbr-enable-osbr	enable the boot of PREVIOUS MBR with invalid
                partition table(usually an OS boot sector).

    --mbr-disable-osbr	disable the boot of PREVIOUS MBR with invalid
                partition table(usually an OS boot sector).

    --duce			disable the feature of unconditional entrance
                            to the command-line.

                Normally one can unconditionally get the
                command-line console by a keypress of `C',
                bypassing all config-files(including the
                preset-menu). This is a security hole. So we
                need this option to disable the feature.

                DUCE is for Disable Unconditional Command-line
                Entrance.

    --chs-no-tune		disable the feature of geometry tune.

    --boot-prevmbr-first	try to boot PREVIOUS MBR before the search for
                GRLDR.

    --boot-prevmbr-last	try to boot PREVIOUS MBR after the search for
                GRLDR.

    --preferred-drive=D	preferred boot drive number, 0 <= D < 255.

    --preferred-partition=P	preferred partition number, 0 <= P < 255.

    --serial-number=SN	setup a new serial number for the hard drive.
                SN must be non-zero.

    --time-out=T		wait T seconds before booting PREVIOUS MBR. if
                T is 0xff, wait forever. The default is 5.

    --hot-key=K		if the desired key K is pressed, start GRUB
                before booting PREVIOUS MBR. K is a word
                value, just as the value in AX register
                returned from int16/AH=1. The high byte is the
                scan code and the low byte is ASCII code. The
                default is 0x3920 for space bar. See "int 16
                keyboard scan codes" below.

    --floppy		if DEVICE_OR_FILE is floppy, use this option.

    --floppy=N		if DEVICE_OR_FILE is a partition on a hard
                drive, use this option. N is used to specify
                the partition number: 0,1,2 and 3 for the
                primary partitions, and 4,5,6,... for the
                logical partitions.

    --sectors-per-track=S	specifies sectors per track for --floppy.
                1 <= S <= 63, default is 63.

    --heads=H		specifies number of heads for --floppy.
                1 <= H <= 256, default is 255.

    --start-sector=B	specifies hidden sectors for --floppy=N.

    --total-sectors=C	specifies total sectors for --floppy.
                default is 0.

    --lba			use lba mode for --floppy. If the floppy BIOS
                has LBA support, you can specify --lba here.
                It is assumed that all floppy BIOSes have CHS
                support. So you would rather specify --chs.
                If neither --chs nor --lba is specified, then
                the LBA indicator(i.e., the third byte of the
                boot sector) will not be touched.

    --chs			use chs mode for --floppy. You should specify
                --chs if the floppy BIOS does not support LBA.
                We assume all floppy BIOSes have CHS support.
                So it is likely you want to specify --chs.
                If neither --chs nor --lba is specified, then
                the LBA indicator(i.e., the third byte of the
                boot sector) will not be touched.

    --fat12			FAT12 is allowed to be installed for --floppy.

    --fat16			FAT16 is allowed to be installed for --floppy.

    --fat32			FAT32 is allowed to be installed for --floppy.

    --vfat			FAT12/16/32 are allowed to be installed for
                --floppy.

    --ntfs			NTFS is allowed to be installed for --floppy.

    --ext2			EXT2 is allowed to be installed for --floppy.

    --install-partition=I	Install the boot record onto the boot area of
                partition number I of the specified hard drive
                or harddrive image DEVICE_OR_FILE.

DEVICE_OR_FILE:	Filename of the device or the image file. For DOS, a BIOS drive
number(hex 0xHH or decimal DDD) can be used to access the drive. BIOS drive
number 0 is for the first floppy, 1 is for the second floppy; 0x80 is for the
first hard drive, 0x81 is for the second hard drive, etc.

Note: BOOTLACE.COM writes only the boot code to MBR. The boot code needs to
load GRLDR as the second(and last) stage of the GRUB boot process. Therefore
GRLDR should be copied to the root directory of one of the supported
partitions, either before or after a successful execution of BOOTLACE.COM.
Currently only partitions with filesystem type of FAT12, FAT16, FAT32, NTFS,
EXT2 or EXT3 are supported.

Note 2: If DEVICE_OR_FILE is a harddisk device or a harddisk image file, it
must contain a valid partition table, otherwise, BOOTLACE.COM will fail. If
DEVICE_OR_FILE is a floppy device or a floppy image file, then it must contain
a supported filesystem(i.e., either of FAT12/FAT16/FAT32/NTFS/EXT2/EXT3).

Note 3: If DEVICE_OR_FILE is a floppy device or a floppy image file, and it
was formated EXT2/EXT3, then you should specify --sectors-per-track and
--heads explicitly.

Important!! If you install GRLDR Boot Record to a floppy or a partition, the
floppy or partition will boot solely grldr, and your original
IO.SYS(DOS/Win9x/Me) and NTLDR(WinNT/2K/XP) will become unbootable. This is
because the original boot record of the floppy or partition was overwritten.
There is no such problem when installing GRLDR Boot Record onto the MBR.
Update: Some NTLDR/IO.SYS/KERNEL.SYS files can be directly chainloaded in the
latest GRUB4DOS.

Tip: If the filename begins in a dash(-) or a digit, you may prefix a dirname
(./) or (.\) to it.

Examples:

    Installing GRLDR boot code to MBR under Linux:

        bootlace.com  /dev/hda

    Installing GRLDR boot code to MBR under DOS:

        bootlace.com  0x80

    Installing GRLDR boot code to a harddisk image under DOS or Linux:

        bootlace.com  hd.img

    Installing GRLDR boot code to floppy under Linux:

        bootlace.com  --floppy --chs /dev/fd0

    Installing GRLDR boot code to floppy under DOS:

        bootlace.com  --floppy --chs 0x00

    Installing GRLDR boot code to a floppy image under DOS or Linux:

        bootlace.com  --floppy --chs floppy.img

BOOTLACE.COM cannot function well under Windows NT/2000/XP/2003. It is expected
(and designed) to run under DOS/Win9x and Linux. Update: For image FILES,
bootlace.com function well under Windows NT/2000/XP/2003. For devices,
bootlace.com will not work under Windows NT/2000/XP/2003 because bootlace.com
is a DOS utility and Windows NT/2000/XP/2003 does not allow bootlace.com to
access devices.

******************************************************************************
***        kexec-tools should be patched for the 1.101 release             ***
******************************************************************************

The file kexec-tools-1.101-patch is a patch to the kexec-tools-1.101 release.
Kexec might fail to load grub.exe without this patch.

The home page of kexec-tools is:

    http://www.xmission.com/~ebiederm/files/kexec/

Note: The Linux kernel should be KEXEC enabled before kexec can be run.

            !! Important Update !!

The patch `kexec-tools-1.101-patch' is not needed now and has been deleted.
Even worse, it fails in `kexec -l grub.exe --initrd=imgfile'. So please
do not use it any more.

******************************************************************************
***           Direct transition to DOS/Win9x from within Linux             ***
******************************************************************************

By using kexec, we can easily boot into DOS/Win9x from a running Linux system.

If WIN98.IMG is a bootable hard-disk image, do as follows:

kexec -l grub.exe --initrd=WIN98.IMG --command-line="--config-file=map (rd) (hd0); map --hook; chainloader (hd0)+1; rootnoverify (hd0)"

kexec -e

If DOS.IMG is a bootable floppy image, do this way:

kexec -l grub.exe --initrd=DOS.IMG --command-line="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"

kexec -e

Note that in this manner, we can boot DOS/Win9x without using a real DOS/Win9x
disk. We need no FAT partition but an image file.

We have noticed that Linux itself can act as a big boot manager by using kexec
and grub.exe. This may be convenient to developers who write installation or
bootstrap or initialization programs.

Certainly, grub.exe and the bootable disk image can also be loaded by a running
GRUB or LILO or syslinux. Examples:

1. Loaded by GRUB:

    kernel (hd0,0)/grub.exe --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
    initrd (hd0,0)/DOS.IMG
    boot

2. Loaded by LILO:

    image=/boot/grub.exe
        label=grub.exe
        initrd=/boot/DOS.IMG
        append="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"

3. Loaded by SYSLINUX:

    label grub.exe
        kernel grub.exe
        append initrd=DOS.IMG --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"

Note: If the above `map (rd) (...)' failed, you may use `map (rd)+1 (...)'
instead and try again.

******************************************************************************
***               Keyboard BIOS Scan Code/ASCII code tables                ***
******************************************************************************

Keyboard bios scan code and ascii character code tables can be obtained from
the web by, for example, googling for "3920 372A 4A2D 4E2B 352F". Here are 2
main results:

1. From "http://heim.ifi.uio.no/~stanisls/helppc/scan_codes.html":

INT 16 - Keyboard Scan Codes

       Key	 Normal    Shifted   w/Ctrl    w/Alt

    A	  1E61	    1E41      1E01	1E00
    B	  3062	    3042      3002	3000
    C	  2E63	    2E43      2E03	2E00
    D	  2064	    2044      2004	2000
    E	  1265	    1245      1205	1200
    F	  2166	    2146      2106	2100
    G	  2267	    2247      2207	2200
    H	  2368	    2348      2308	2300
    I	  1769	    1749      1709	1700
    J	  246A	    244A      240A	2400
    K	  256B	    254B      250B	2500
    L	  266C	    264C      260C	2600
    M	  326D	    324D      320D	3200
    N	  316E	    314E      310E	3100
    O	  186F	    184F      180F	1800
    P	  1970	    1950      1910	1900
    Q	  1071	    1051      1011	1000
    R	  1372	    1352      1312	1300
    S	  1F73	    1F53      1F13	1F00
    T	  1474	    1454      1414	1400
    U	  1675	    1655      1615	1600
    V	  2F76	    2F56      2F16	2F00
    W	  1177	    1157      1117	1100
    X	  2D78	    2D58      2D18	2D00
    Y	  1579	    1559      1519	1500
    Z	  2C7A	    2C5A      2C1A	2C00

       Key	 Normal    Shifted   w/Ctrl    w/Alt

    1	  0231	    0221		7800
    2	  0332	    0340      0300	7900
    3	  0433	    0423		7A00
    4	  0534	    0524		7B00
    5	  0635	    0625		7C00
    6	  0736	    075E      071E	7D00
    7	  0837	    0826		7E00
    8	  0938	    092A		7F00
    9	  0A39	    0A28		8000
    0	  0B30	    0B29		8100

       Key	 Normal    Shifted   w/Ctrl    w/Alt

    -	  0C2D	    0C5F      0C1F	8200
    =	  0D3D	    0D2B		8300
    [	  1A5B	    1A7B      1A1B	1A00
    ]	  1B5D	    1B7D      1B1D	1B00
    ;	  273B	    273A		2700
    '	  2827	    2822
    `	  2960	    297E
    \	  2B5C	    2B7C      2B1C	2600 (same as Alt L)
    ,	  332C	    333C
    .	  342E	    343E
    /	  352F	    353F

    Key	 Normal    Shifted   w/Ctrl    w/Alt

    F1	  3B00	    5400      5E00	6800
    F2	  3C00	    5500      5F00	6900
    F3	  3D00	    5600      6000	6A00
    F4	  3E00	    5700      6100	6B00
    F5	  3F00	    5800      6200	6C00
    F6	  4000	    5900      6300	6D00
    F7	  4100	    5A00      6400	6E00
    F8	  4200	    5B00      6500	6F00
    F9	  4300	    5C00      6600	7000
    F10	  4400	    5D00      6700	7100
    F11	  8500	    8700      8900	8B00
    F12	  8600	    8800      8A00	8C00

    Key	    Normal    Shifted	w/Ctrl	  w/Alt

    BackSpace    0E08      0E08	 0E7F	  0E00
    Del	     5300      532E	 9300	  A300
    Down Arrow   5000      5032	 9100	  A000
    End	     4F00      4F31	 7500	  9F00
    Enter	     1C0D      1C0D	 1C0A	  A600
    Esc	     011B      011B	 011B	  0100
    Home	     4700      4737	 7700	  9700
    Ins	     5200      5230	 9200	  A200
    Keypad 5		4C35	 8F00
    Keypad *     372A		 9600	  3700
    Keypad -     4A2D      4A2D	 8E00	  4A00
    Keypad +     4E2B      4E2B		  4E00
    Keypad /     352F      352F	 9500	  A400
    Left Arrow   4B00      4B34	 7300	  9B00
    PgDn	     5100      5133	 7600	  A100
    PgUp	     4900      4939	 8400	  9900
    PrtSc				 7200
    Right Arrow  4D00      4D36	 7400	  9D00
    SpaceBar     3920      3920	 3920	  3920
    Tab	     0F09      0F00	 9400	  A500
    Up Arrow     4800      4838	 8D00	  9800

- Some key combinations are not available on all systems.  The PS/2
  includes many that aren't available on the PC, XT and AT.
- To retrieve the character from a scan code logical AND the word
  with 0x00FF.
- see  INT 16  MAKE CODES

2. From "http://www.hoppie.nl/ivan/keycodes.txt":

     Keystroke                  Keypress code
--------------------------------------------------
     Esc                        011B
     1                          0231
     2                          0332
     3                          0433
     4                          0534
     5                          0635
     6                          0736
     7                          0837
     8                          0938
     9                          0A39
     0                          0B30
     -                          0C2D
     =                          0D3D
     Backspace                  0E08
     Tab                        0F09
     q                          1071
     w                          1177
     e                          1265
     r                          1372
     t                          1474
     y                          1579
     u                          1675
     i                          1769
     o                          186F
     p                          1970
     [                          1A5B
     ]                          1B5D
     Enter                      1C0D
     Ctrl                         **
     a                          1E61
     s                          1F73
     d                          2064
     f                          2166
     g                          2267
     h                          2368
     j                          246A
     k                          256B
     l                          266C
     ;                          273B
     '                          2827
     `                          2960
     Shift                        **
     \                          2B5C
     z                          2C7A
     x                          2D78
     c                          2E63
     v                          2F76
     b                          3062
     n                          316E
     m                          326D
     ,                          332C
     .                          342E
     /                          352F
     Gray *                     372A
     Alt                          **
     Space                      3920
     Caps Lock                    **
     F1                         3B00
     F2                         3C00
     F3                         3D00
     F4                         3E00
     F5                         3F00
     F6                         4000
     F7                         4100
     F8                         4200
     F9                         4300
     F10                        4400
     F11                        8500
     F12                        8600
     Num Lock                     **
     Scroll Lock                  **
     White Home                 4700
     White Up Arrow             4800
     White PgUp                 4900
     Gray -                     4A2D
     White Left Arrow           4B00
     Center Key                 4C00
     White Right Arrow          4D00
     Gray +                     4E2B
     White End                  4F00
     White Down Arrow           5000
     White PgDn                 5100
     White Ins                  5200
     White Del                  5300
     SysReq                       **
     Key 45 [1]                 565C
     Enter (number keypad)      1C0D
     Gray /                     352F
     PrtSc                        **
     Pause                        **
     Gray Home                  4700
     Gray Up Arrow              4800
     Gray Page Up               4900
     Gray Left Arrow            4B00
     Gray Right Arrow           4D00
     Gray End                   4F00
     Gray Down Arrow            5000
     Gray Page Down             5100
     Gray Insert                5200
     Gray Delete                5300

     Shift Esc                  011B
     !                          0221
     @                          0340
     #                          0423
     $                          0524
     %                          0625
     ^                          075E
     &                          0826
     * (white)                  092A
     (                          0A28
     )                          0B29
     _                          0C5F
     + (white)                  0D2B
     Shift Backspace            0E08
     Shift Tab (Backtab)        0F00
     Q                          1051
     W                          1157
     E                          1245
     R                          1352
     T                          1454
     Y                          1559
     U                          1655
     I                          1749
     O                          184F
     P                          1950
     {                          1A7B
     }                          1B7D
     Shift Enter                1C0D
     Shift Ctrl                   **
     A                          1E41
     S                          1F53
     D                          2044
     F                          2146
     G                          2247
     H                          2348
     J                          244A
     K                          254B
     L                          264C
     :                          273A
     "                          2822
     ~                          297E
     |                          2B7C
     Z                          2C5A
     X                          2D58
     C                          2E43
     V                          2F56
     B                          3042
     N                          314E
     M                          324D
     <                          333C
     >                          343E
     ?                          353F
     Shift Gray *               372A
     Shift Alt                    **
     Shift Space                3920
     Shift Caps Lock              **
     Shift F1                   5400
     Shift F2                   5500
     Shift F3                   5600
     Shift F4                   5700
     Shift F5                   5800
     Shift F6                   5900
     Shift F7                   5A00
     Shift F8                   5B00
     Shift F9                   5C00
     Shift F10                  5D00
     Shift F11                  8700
     Shift F12                  8800
     Shift Num Lock               **
     Shift Scroll Lock            **
     Shift 7 (number pad)       4737
     Shift 8 (number pad)       4838
     Shift 9 (number pad)       4939
     Shift Gray -               4A2D
     Shift 4 (number pad)       4B34
     Shift 5 (number pad)       4C35
     Shift 6 (number pad)       4D36
     Shift Gray +               4E2B
     Shift 1 (number pad)       4F31
     Shift 2 (number pad)       5032
     Shift 3 (number pad)       5133
     Shift 0 (number pad)       5230
     Shift . (number pad)       532E
     Shift SysReq                 **
     Shift Key 45 [1]           567C
     Shift Enter (number pad)   1C0D
     Shift Gray /               352F
     Shift PrtSc                  **
     Shift Pause                  **
     Shift Gray Home            4700
     Shift Gray Up Arrow        4800
     Shift Gray Page Up         4900
     Shift Gray Left Arrow      4B00
     Shift Gray Right Arrow     4D00
     Shift Gray End             4F00
     Shift Gray Down Arrow      5000
     Shift Gray Page Down       5100
     Shift Gray Insert          5200
     Shift Gray Delete          5300

     Ctrl Esc                   011B
     Ctrl 1                       --
     Ctrl 2 (NUL)               0300
     Ctrl 3                       --
     Ctrl 4                       --
     Ctrl 5                       --
     Ctrl 6 (RS)                071E
     Ctrl 7                       --
     Ctrl 8                       --
     Ctrl 9                       --
     Ctrl 0                       --
     Ctrl -                     0C1F
     Ctrl =                       --
     Ctrl Backspace (DEL)       0E7F
     Ctrl Tab                   9400
     Ctrl q (DC1)               1011
     Ctrl w (ETB)               1117
     Ctrl e (ENQ)               1205
     Ctrl r (DC2)               1312
     Ctrl t (DC4)               1414
     Ctrl y (EM)                1519
     Ctrl u (NAK)               1615
     Ctrl i (HT)                1709
     Ctrl o (SI)                180F
     Ctrl p (DEL)               1910
     Ctrl [ (ESC)               1A1B
     Ctrl ] (GS)                1B1D
     Ctrl Enter (LF)            1C0A
     Ctrl a (SOH)               1E01
     Ctrl s (DC3)               1F13
     Ctrl d (EOT)               2004
     Ctrl f (ACK)               2106
     Ctrl g (BEL)               2207
     Ctrl h (Backspace)         2308
     Ctrl j (LF)                240A
     Ctrl k (VT)                250B
     Ctrl l (FF)                260C
     Ctrl ;                       --
     Ctrl '                       --
     Ctrl `                       --
     Ctrl Shift                   **
     Ctrl \ (FS)                2B1C
     Ctrl z (SUB)               2C1A
     Ctrl x (CAN)               2D18
     Ctrl c (ETX)               2E03
     Ctrl v (SYN)               2F16
     Ctrl b (STX)               3002
     Ctrl n (SO)                310E
     Ctrl m (CR)                320D
     Ctrl ,                       --
     Ctrl .                       --
     Ctrl /                       --
     Ctrl Gray *                9600
     Ctrl Alt                     **
     Ctrl Space                 3920
     Ctrl Caps Lock               --
     Ctrl F1                    5E00
     Ctrl F2                    5F00
     Ctrl F3                    6000
     Ctrl F4                    6100
     Ctrl F5                    6200
     Ctrl F6                    6300
     Ctrl F7                    6400
     Ctrl F8                    6500
     Ctrl F9                    6600
     Ctrl F10                   6700
     Ctrl F11                   8900
     Ctrl F12                   8A00
     Ctrl Num Lock                --
     Ctrl Scroll Lock             --
     Ctrl White Home            7700
     Ctrl White Up Arrow        8D00
     Ctrl White PgUp            8400
     Ctrl Gray -                8E00
     Ctrl White Left Arrow      7300
     Ctrl 5 (number pad)        8F00
     Ctrl White Right Arrow     7400
     Ctrl Gray +                9000
     Ctrl White End             7500
     Ctrl White Down Arrow      9100
     Ctrl White PgDn            7600
     Ctrl White Ins             9200
     Ctrl White Del             9300
     Ctrl SysReq                  **
     Ctrl Key 45 [1]            --
     Ctrl Enter (number pad)    1C0A
     Ctrl / (number pad)        9500
     Ctrl PrtSc                 7200
     Ctrl Break                 0000
     Ctrl Gray Home             7700
     Ctrl Gray Up Arrow         8DE0
     Ctrl Gray Page Up          8400
     Ctrl Gray Left Arrow       7300
     Ctrl Gray Right Arrow      7400
     Ctrl Gray End              7500
     Ctrl Gray Down Arrow       91E0
     Ctrl Gray Page Down        7600
     Ctrl Gray Insert           92E0
     Ctrl Gray Delete           93E0

     Alt Esc                    0100
     Alt 1                      7800
     Alt 2                      7900
     Alt 3                      7A00
     Alt 4                      7B00
     Alt 5                      7C00
     Alt 6                      7D00
     Alt 7                      7E00
     Alt 8                      7F00
     Alt 9                      8000
     Alt 0                      8100
     Alt -                      8200
     Alt =                      8300
     Alt Backspace              0E00
     Alt Tab                    A500
     Alt q                      1000
     Alt w                      1100
     Alt e                      1200
     Alt r                      1300
     Alt t                      1400
     Alt y                      1500
     Alt u                      1600
     Alt i                      1700
     Alt o                      1800
     Alt p                      1900
     Alt [                      1A00
     Alt ]                      1B00
     Alt Enter                  1C00
     Alt Ctrl                     **
     Alt a                      1E00
     Alt s                      1F00
     Alt d                      2000
     Alt f                      2100
     Alt g                      2200
     Alt h                      2300
     Alt j                      2400
     Alt k                      2500
     Alt l                      2600
     Alt ;                      2700
     Alt '                      2800
     Alt `                      2900
     Alt Shift                    **
     Alt \                      2B00
     Alt z                      2C00
     Alt x                      2D00
     Alt c                      2E00
     Alt v                      2F00
     Alt b                      3000
     Alt n                      3100
     Alt m                      3200
     Alt ,                      3300
     Alt .                      3400
     Alt /                      3500
     Alt Gray *                 3700
     Alt Space                  3920
     Alt Caps Lock                **
     Alt F1                     6800
     Alt F2                     6900
     Alt F3                     6A00
     Alt F4                     6B00
     Alt F5                     6C00
     Alt F6                     6D00
     Alt F7                     6E00
     Alt F8                     6F00
     Alt F9                     7000
     Alt F10                    7100
     Alt F11                    8B00
     Alt F12                    8C00
     Alt Num Lock                 **
     Alt Scroll Lock              **
     Alt Gray -                 4A00
     Alt Gray +                 4E00
     Alt 7 (number pad)           #
     Alt 8 (number pad)           #
     Alt 9 (number pad)           #
     Alt 4 (number pad)           #
     Alt 5 (number pad)           #
     Alt 6 (number pad)           #
     Alt 1 (number pad)           #
     Alt 2 (number pad)           #
     Alt 3 (number pad)           #
     Alt Del                      --
     Alt SysReq                   **
     Alt Key 45 [1]               --
     Alt Enter (number pad)     A600
     Alt / (number pad)         A400
     Alt PrtSc                    **
     Alt Pause                    **
     Alt Gray Home              9700
     Alt Gray Up Arrow          9800
     Alt Gray Page Up           9900
     Alt Gray Left Arrow        9B00
     Alt Gray Right Arrow       9D00
     Alt Gray End               9F00
     Alt Gray Down Arrow        A000
     Alt Gray Page Down         A100
     Alt Gray Insert            A200
     Alt Gray Delete            A300

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

Footnotes

        [1]   In the United States, the 101/102-key keyboard is shipped
              with 101 keys. Overseas versions have an additional key
              sandwiched between the left Shift key and the Z key. This
              additional key is identified by IBM (and in this table) as
              "Key 45."

        [**]  Keys and key combinations marked ** are used by the ROM BIOS
              but do not put values into the keyboard buffer.

        [--]  Keys and key combinations marked -- are ignored by the ROM
              BIOS.

3. From "http://heim.ifi.uio.no/~stanisls/helppc/make_codes.html":

INT 9 - Hardware Keyboard Make/Break Codes

    Key	     Make  Break		Key    Make  Break

    Backspace     0E    8E			F1	3B    BB
    Caps Lock     3A    BA			F2	3C    BC
    Enter	      1C    9C			F3	3D    BD
    Esc	      01    81			F4	3E    BE
    Left Alt      38    B8			F7	41    C1
    Left Ctrl     1D    9D			F5	3F    BF
    Left Shift    2A    AA			F6	40    C0
    Num Lock      45    C5			F8	42    C2
    Right Shift   36    B6			F9	43    C3
    Scroll Lock   46    C6			F10	44    C4
    Space	      39    B9			F11	57    D7
    Sys Req (AT)  54    D4			F12	58    D8
    Tab	      0F    8F

            Keypad Keys		       Make   Break

            Keypad 0  (Ins)		52	D2
            Keypad 1  (End) 		4F	CF
            Keypad 2  (Down arrow)	50	D0
            Keypad 3  (PgDn)		51	D1
            Keypad 4  (Left arrow)	4B	CB
            Keypad 5			4C	CC
            Keypad 6  (Right arrow)	4D	CD
            Keypad 7  (Home)		47	C7
            Keypad 8  (Up arrow)	48	C8
            Keypad 9  (PgUp)		49	C9
            Keypad .  (Del) 		53	D3
            Keypad *  (PrtSc)		37	B7
            Keypad -			4A	CA
            Keypad +			4E	CE

           Key    Make  Break	       Key    Make  Break

        A      1E    9E 		N      31    B1
        B      30    B0 		O      18    98
        C      2E    AE 		P      19    99
        D      20    A0 		Q      10    90
        E      12    92 		R      13    93
        F      21    A1 		S      1F    9F
        G      22    A2 		T      14    94
        H      23    A3 		U      16    96
        I      17    97 		V      2F    AF
        J      24    A4 		W      11    91
        K      25    A5 		X      2D    AD
        L      26    A6 		Y      15    95
        M      32    B2 		Z      2C    AC

           Key    Make  Break	       Key    Make  Break

        1      02    82 		-      0C    8C
        2      03    83 		=      0D    8D
        3      04    84 		[      1A    9A
        4      05    85 		]      1B    9B
        5      06    86 		;      27    A7
        6      07    87 		'      28    A8
        7      08    88 		`      29    A9
        8      09    89 		\      2B    AB
        9      0A    8A 		,      33    B3
        0      0B    8B 		.      34    B4
                        /      35    B5

Enhanced Keyboard Keys (101/102 keys)

    Control Keys		  Make		  Break

    Alt-PrtSc (SysReq)	  54		  D4
    Ctrl-PrtSc		  E0 37 	  E0 B7
    Enter			  E0 1C 	  E0 9C
    PrtSc			  E0 2A E0 37	  E0 B7 E0 AA
    Right Alt		  E0 38 	  E0 B8
    Right Ctrl		  E0 1D 	  E0 9D
    Shift-PrtSc		  E0 37 	  E0 B7
    /			  E0 35 	  E0 B5
    Pause			  E1 1D 45 E1 9D C5  (not typematic)
    Ctrl-Pause (Ctrl-Break)   E0 46 E0 C6	     (not typematic)

    - Keys marked as "not typematic" generate one stream of bytes
      without corresponding break scan code bytes (actually the
      break codes are part of the make code).

            Normal Mode or
            Shift w/Numlock
    Key		 Make	 Break	   |----- Numlock on ------.
                          Make	    Break
    Del		 E0 53	 E0 D3	   E0 2A E0 53	 E0 D3 E0 AA
    Down arrow	 E0 50	 E0 D0	   E0 2A E0 50	 E0 D0 E0 AA
    End		 E0 4F	 E0 CF	   E0 2A E0 4F	 E0 CF E0 AA
    Home		 E0 47	 E0 C7	   E0 2A E0 47	 E0 C7 E0 AA
    Ins		 E0 52	 E0 D2	   E0 2A E0 52	 E0 D2 E0 AA
    Left arrow	 E0 4B	 E0 CB	   E0 2A E0 4B	 E0 CB E0 AA
    PgDn		 E0 51	 E0 D1	   E0 2A E0 51	 E0 D1 E0 AA
    PgUp		 E0 49	 E0 C9	   E0 2A E0 49	 E0 C9 E0 AA
    Right arrow	 E0 4D	 E0 CD	   E0 2A E0 4D	 E0 CD E0 AA
    Up arrow	 E0 48	 E0 C8	   E0 2A E0 48	 E0 C8 E0 AA

    Key	      |--Left Shift Pressed--.	  |--Right Shift Pressed--.
             Make	       Break	      Make	    Break
    Del	      E0 AA E0 53   E0 D3 E0 2A    E0 B6 E0 53	 E0 D3 E0 36
    Down arrow    E0 AA E0 50   E0 D0 E0 2A    E0 B6 E0 50	 E0 D0 E0 36
    End	      E0 AA E0 4F   E0 CF E0 2A    E0 B6 E0 4F	 E0 CF E0 36
    Home	      E0 AA E0 47   E0 C7 E0 2A    E0 B6 E0 47	 E0 C7 E0 36
    Ins	      E0 AA E0 52   E0 D2 E0 2A    E0 B6 E0 52	 E0 D2 E0 36
    Left arrow    E0 AA E0 4B   E0 CB E0 2A    E0 B6 E0 4B	 E0 CB E0 36
    PgDn	      E0 AA E0 51   E0 D1 E0 2A    E0 B6 E0 51	 E0 D1 E0 36
    PgUp	      E0 AA E0 49   E0 C9 E0 2A    E0 B6 E0 49	 E0 C9 E0 36
    Right arrow   E0 AA E0 4D   E0 CD E0 2A    E0 B6 E0 4D	 E0 CD E0 36
    Up arrow      E0 AA E0 48   E0 C8 E0 2A    E0 B6 E0 48	 E0 C8 E0 36
    /	      E0 AA E0 35   E0 B5 E0 2A    E0 B6 E0 35	 E0 B5 E0 36

    - The PS/2 models have three make/break scan code sets.  The first
      set matches the PC & XT make/break scan code set and is the one
      listed here.	Scan code sets are selected by writing the value F0
      to the keyboard via the 8042 (port 60h).  The following is a brief
      description of the scan code sets (see the PS/2 Technical Reference
      manuals for more information on scan code sets 2 and 3):

    /  set 1, each key has a base scan code.  Some keys generate
       extra scan codes to generate artificial shift states.  This
       is similar to the standard scan code set used on the PC and XT.
    /  set 2, each key sends one make scan code and two break scan
       codes bytes (F0 followed by the make code).	This scan code
       set is available on the IBM AT also.
    /  set 3, each key sends one make scan code and two break scan
       codes bytes (F0 followed by the make code) and no keys are
       altered by Shift/Alt/Ctrl keys.
    /  typematic scan codes are the same as the make scan code

    - Some Tandy 1000's do not handle Alt key combinations when multiple
      shift keys are pressed.  The Alt-Shift-H combination loses the Alt.
    - extended keys like (F11, F12) can only be read with systems that
      have extended keyboard BIOS support (or INT 9 extensions);  to
      read these special keys on these systems INT 16,10 must be used

******************************************************************************
***                         GRLDR  Error messages                          ***
******************************************************************************

1. Missing MBR-helper.

    The helper function in the sectors that immediately follow the MBR is
    not present, or it has been erased by a virus or by Windows XP/Vista.

    Run the bootlace.com utility to fix the problem.

2. Buggy BIOS!

    Your BIOS is too buggy. It even has no support for INT13/AH=8.

    No solution except flashing your BIOS. Buggy BIOSes will encounter
    more and more problems with grub4dos in the future.

3. This partition is NTFS but with unknown boot record. Please install
Microsoft NTFS boot sectors to this partition correctly, or create an
FAT12/16/32 partition and place the same copy of GRLDR and MENU.LST there.

    The boot record was changed or erased by Microsoft Windows XP Service
    Pack 2.

    You may install the old boot record introduced with the	original clean
    Windows 2K/XP. As another solution, you may create an FAT partition
    for your system, and copy GRLDR and your MENU.LST to its root dir.

    While the startup code of grldr might fail to load GRLDR in NTFS
    partitions, it always successfully loads GRLDR in FAT partitions(and
    even in ext2/ext3 partitions).

    Note that NTLDR only loads the startup code of grldr(i.e., the leading
    16 sectors of grldr), not the whole grldr file.

    Thus, C:\GRLDR must exist(here C: can be NTFS), since it is used for
    BOOT.INI and NTLDR. If C: is NTFS, X:\GRLDR should exist as well,
    where X: stands for a certain FAT partition.

******************************************************************************
***                             Known BIOS bugs                            ***
******************************************************************************

1. Some newer Dell machines have no int13/AH=43h support. You may encounter
    failure when trying to write-access an emulated disk.

    Note: This bug is serious! The old "root+setup" installation method
    (in real mode grub environment) uses INT13 to write the first sector
    of stage2. It will fail for the buggy DELL machine when stage2 is
    accessed with LBA mode.

2. Some buggy BIOSes won't boot bootable.iso(See above).(qemu can boot it fine)

3. Some newer Dell machines violently destroyed the interrupt vectors for
    hardware IRQs and will hang the machine when running GRUB.EXE
    from DOS. You may try again with BADGRUB.EXE.

4. Reports say some BIOSes will function abnormally after GRUB.EXE is started
    by kexec of Linux. Some machines reportedly hang. Some others
    reportedly cannot access USB drives.

******************************************************************************
***                             Known Problems                             ***
******************************************************************************

1.	Running GRUB.EXE from a DOS box of Windows 9x/Me could hang the
    machine, especially for some systems with USB support. You may
    encounter the same problem when running GRUB.EXE through KEXEC under
    Linux.

Note:	You don't have to run GRUB.EXE from protected mode of Win9x, which
    could hang the machine; Instead, you usually want to run GRUB.EXE
    after you have done a "Restart the computer in MS-DOS mode", which
    is safe enough.

2.	The default chainloader action will keep A20 on. Some buggy DOS XMS
    memory managers could hang the machine. You may use the --disable-a20
    option in the chainloader line and try again. Anyway, you should avoid
    using those buggy memory managers.

3.	THTF BIOS L4S5M Ver 1.1a(dated 2002-1-10) has a buggy int15 which
    causes hang at the boot of a multi boot kernel(memdisk for example).

4.	A Chinese DOS system software, the TechWay SCS, will not work with
    newer versions of GRUB.EXE. In general, TSRs that take antitracking
    measures will not work with GRUB.EXE any more.

******************************************************************************
***        List of binary files and their corresponding source files       ***
******************************************************************************

binary file	main source file	other included source or binary files
-------------   ----------------	-------------------------------------

bootlace.com	bootlacestart.S		bootlace.inc, grldrstart.S

grldr		grldrstart.S		pre_stage2(binary, See note below)

grldr.mbr	mbrstart.S		grldrstart.S

grub.exe	dosstart.S		pre_stage2(binary, See note below)

hmload.com	hmloadstart.S

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

Note: pre_stage2 is the main body of GNU GRUB and it is simply appended to
grldrstart/dosstart in binary format to form our grldr/grub.exe.

Note: The GRUB file(WITHOUT .EXE suffix) is a static-linked ELF executable
program for Linux, normally called the GRUB Shell. The GRUB Shell is a boot-
manager, but not a boot-loader(the "boot" command won't work in GRUB Shell).
GRUB.EXE(with KEXEC) can be used as a bootloader running directly under Linux.

******************************************************************************
***             Memory Layout for Quiting to DOS from GRUB.EXE             ***
******************************************************************************

The quit command is implemented to return to DOS in the instance that GRUB.EXE
is started off DOS.

1. Before GRUB.EXE transfers control to pre_stage2, it will copy 640KB of
conventional memory to physical address 0x200000(i.e., 2MB), and write 4 long
integers immediately follows the backup copy of the conventional memory:
    At 0x2A0000:	0x50554B42, it is the "BKUP" signature.

    At 0x2A0004:	Gate A20 status under DOS: non-zero means A20 on;
            zero means A20 off. Update: A20 always on, see below.

    At 0x2A0008:	high word is boot-CS, low word is boot-IP. The quit
            command uses this entry point to return to DOS.

    At 0x2A000C:	CheckSum: the sum of all long integers in the memory
            range from 0x200000 to 0x2A000F is 0.

2. If the above memory structure is corrupted by a grub command, the quit
command will issue an error message and refuse to exit from grub.

3. Because GRUB may corrupt extended memory, you should better avoid using
extended memory under DOS before running GRUB.EXE.

4. Gate A20 will be enabled by GRUB.EXE. Hopefully this would hurt nothing.

******************************************************************************
***             Memory usage in conventional/low memory area               ***
******************************************************************************

1. boot.c, fsys_reiserfs.c: 8K below 0x68000.

2. fsys_ext2fs.c, fsys_minix.c: 1K below 0x68000.

3. fsys_jfs.c: 4K + 256 bytes below 0x68000.

4. fsys_reiserfs.c: 202 bytes at 0x600.

5. fsys_xfs.c: 188 bytes at 0x600.

6. fsys_xfs.c: (logical block size) bytes below 0x68000.

7. geometry tune: 0x50000 - 0x5ffff.

******************************************************************************
***                Command-line Length about GRUB.EXE                      ***
******************************************************************************

GRUB.EXE now can be started in CONFIG.SYS with the **DEVICE** command:

    DEVICE=grub.exe [--config-file="FILENAME_OR_COMMANDS"]

1. If GRUB.EXE is invoked with DEVICE command and FILENAME_OR_COMMANDS is a
collection of some GRUB commands separated by semi-colon, then the length of
FILENAME_OR_COMMANDS can be nearly 4KB ----Supprise? But true!  MS-DOS 7+
even allows a much longer line, but 4KB seems enough for our use of GRUB.EXE.
This is very useful when we want to embed a big menu into the command line.
Note that GRLDR hasn't yet supported any command-line arguments.

2. If GRUB.EXE is invoked with INSTALL command, the option length has a limit
of 80 characters(including the leading "--config-file=" part). An overflow may
hang up MS-DOS immediately.

3. If GRUB.EXE is invoked with SHELL command, the option length has a limit of
126 characters(including the leading "--config-file=" part). Overflow won't
hang up MS-DOS, but the line will be cut short. This limit is the same as that
in the console-DOS-prompt or in a BAT file.

4. The DOS editor EDIT does not allow to create a line of 4KB long. So use
another editor, for example, vi for Linux, please.

5. The DEVICE=GRUB.EXE line can be used together with other DEVICE commands
such as DEVICE=HIMEM.SYS and DEVICE=EMM386.EXE. The GRUB.EXE line should
occur before the EMM386.EXE line in order to avoid the rejection by EMM386.
Update: Since 0.4.2, GRUB.EXE works well even after EMM386.EXE is loaded.

6. In any case mentioned above, you can return back to DOS by quit command.

7. Memory usage about command-line menu: The 4KB command-line menu starts at
physical address 0x0800 and ends at 0x17FF.

******************************************************************************
***          New Syntax for the DEFAULT/SAVEDEFAULT Commands               ***
******************************************************************************

In addition to the original usage of "default NUM" and "default saved", now
there is a new usage of "default FILE", like this:

        default (hd0,0)/default

Note that FILE must have a valid DEFAULT file format. A sample DEFAULT file
is included in the release. You may copy it to wherever you like, but you
should avoid modifying its content manually. The DEFAULT file may be used
in this way:

(1) First, you should copy a default file with valid format to somewhere in
your operating system.

(2) Secondly, you should use the "default FILE" command of GRUB to announce
the use of FILE as our new default file for being written by "savedefault".

(3) Then, you may use "savedefault" command to save the desired entry number
into this new default file.

(4) OK, at next boot, you may read the saved entry number by using the same
"default FILE" command as mentioned in above (2).

And the SAVEDEFAULT command now accept an options `--wait=T', like this:

        savedefault --wait=5

If `--wait=T' is specified and T is non-zero, savedefault will prompt
the user with a message just before it writes to disk. The write operation
will be cancelled in T seconds if the `Y' key was not pressed.

Here is a sample menu.lst file:

#--------------------begin menu.lst---------------------------------------
color black/cyan yellow/cyan
timeout 30
default /default

title find and load NTLDR of Windows NT/2K/XP
find --set-root /ntldr
chainloader /ntldr
savedefault --wait=2

title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
fallback 2
find --set-root /cmldr
chainloader /cmldr
#####################################################################
# write string "cmdcons" to memory 0000:7C03 in 2 steps:
#####################################################################
# step 1. Write 4 chars "cmdc" at 0000:7C03
write 0x7C03 0x63646D63
# step 2. Write 3 chars "ons" and an ending null at 0000:7C07
write 0x7C07 0x00736E6F
savedefault --wait=2

title find and load IO.SYS of Windows 9x/Me
find --set-root /io.sys
chainloader /io.sys
savedefault --wait=2

title floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
savedefault --wait=2

title find and boot Linux with menu.lst already installed
find --set-root /sbin/init
savedefault --wait=2
configfile /boot/grub/menu.lst

title find and boot Mandriva with menu.lst already installed
find --set-root /etc/mandriva-release
savedefault --wait=2
configfile /boot/grub/menu.lst

title back to dos
savedefault --wait=2
quit

title commandline
savedefault --wait=2
commandline

title reboot
savedefault --wait=2
reboot

title halt
savedefault --wait=2
halt
#--------------------end menu.lst---------------------------------------

Note 1:	The file DEFAULT must exist and have a proper format as stated above.
    Or else, the default/savedefault commands won't function well.

Note 2:	The file DEFAULT which is in the same dir as a certain MENU.LST file
    is called associated with the MENU.LST file.

Note 3:	The associated DEFAULT file will take effect automatically if there
    are no `default' commands present.

Note 4:	Just before a menu file gains control(e.g., it is the associated
    MENU.LST of a GRLDR file, or it was specified via
    `grub.exe --config-file=(DEVICE)/PATH/YOUR_MENU_FILE', or it was
    specified by the `configfile' command of grub), its associated
    DEFAULT file will be used if present, until an explicit `default'
    command is encountered.

******************************************************************************
***                   The New `cdrom' Command Syntax                       ***
******************************************************************************

1. Initialize the ATAPI CDROM devices:

    grub> cdrom --init

   This will display the number of atapi cdroms found: atapi_dev_count

2. Stop the ATAPI CDROM devices:

    grub> cdrom --stop

   This will set atapi_dev_count to 0.

3. Add IO ports for searching the atapi cdrom devices. For example:

    grub> cdrom --add-io-ports=0x03F601F0

After running `cdrom --init' and `map --hook', the cdroms can be accessed
through devices (cd0), (cd1), ...

Note 1: If the system does not fully support the ATAPI CD-ROM specifications,
    you will encounter failure when trying to access the (cdX) devices.

Note 2: After doing a `cdrom --stop', you should do a `map --unhook'. Of
    course you may `map --hook' again if there are mapped drives.

Note 3: After adding IO ports, you should do a `map --unhook' followed by a
    `cdrom --init' and then followed by a `map --hook'.

    By default, these ports are used for searching cdroms(so they needn't
    be added):

        0x03F601F0, 0x03760170, 0x02F600F0,
        0x03860180, 0x6F006B00, 0x77007300.

Note 4: The BIOS might have offered a cdrom interface. It would be (cd). After
    `cdrom --init' and `map --hook', we might have our (cd0), (cd1), ...
    available. It is likely that one of them could access the same media
    as the BIOS-offered (cd).

Note 5: You may access the (cd) and (cdX)'es in the blocklist way. Example:

        cat --hex (cd0)16+2

    The cdrom sectors are big sectors with a size of 2048 bytes.

Note 6:	The iso9660 filesystem driver has Rock-Ridge extension support, but
    has no Joliet extension support. So you may encounter failure when
    you attempt to read files on a Joliet CD.

Note 7: The (cd) or (cdX)'es can be booted now. Examples:

        chainloader (cd)
        boot

        chainloader (cd0)
        boot

        chainloader (cd1)
        boot

    You should already have access to the CD sectors before you can
    chainload it.

******************************************************************************
***                   About the New `setvbe' Command                       ***
******************************************************************************

Gerardo Richarte contributed the `setvbe' code and the following comment:

    New command is `setvbe', and can be used to change the video mode
    before executing the kernel.

    For example, you can do

        setvbe 1024x768x32

    this will scan the list of available modes and set it, and
    automatically append a `video=' option to each subsequent kernel
    command-line. The appended `video=' option is like this:

        video=1024x768x32@0xf0000000,4096

    where 0xf0000000 is the video framebuffer address as reported by vbe,
    and 4096 is the size of a scanline in bytes (also as reported by vbe).

    This is really useful if you want to give some graphics support to your
    OS, but you don't want to implement any video functionality other than
    writing a pixel to video memory.

******************************************************************************
***                   About the DOS utility `hmload'                       ***
******************************************************************************

This program was written by John Cobb (Queen Mary, University of London).

John Cobb's note:

    To make use of the ram drive feature I wrote a program `hmload' to load
    an arbitrary file to an arbitrary address in high memory. The program
    is not very sophisticated and relies on XMS to turn on the A20 line.
    (Also one must be very careful to steer clear of any areas of memory
    already in use).

    Under Linux we generated a disk image `dskimg' (with the kernel and
    Initrd and a partition table).

    Using this our boot procedure looked something like this:

    hmload -fdskimg -a128
    fixrb
    <unload network drivers>
    grub

        map --ram-drive=0x81
        map --rd-base=0x8000000
        map --rd-size=0x400000
        root (rd,0)
        kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
        initrd /initrd
        boot

See http://sysdocs.stu.qmul.ac.uk/sysdocs/Comment/GrubForDOS/ for details.

Update 2007-12-05:

    Now the MAP command can handle gzipped (rd) image. One can use this
    feature with the hmload utility. For example,

    step 1. Load the gzipped image under DOS at a relatively low address:

        hmload -fdskimg.gz -a16

    step 2. Unload network drivers.

    step 3. Run GRUB.EXE.

    step 4. At the grub prompt, run these commands:

        map --rd-base=0x1000000	# set rd-base address to be 16M
        map --rd-size=<the accurate size of dskimg.gz in bytes>
        map (rd)+1 (hd0)	# This will decompress (rd) and place
                    # the decompressed image at the top end
                    # of the extended memory. The (rd)+1
                    # here has special meaning and stands
                    # for the whole (rd) device. You must
                    # use (rd)+1 instead of (rd).
        map --hook
        root (hd0,0)
        kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
        initrd /initrd
        map --unhook
        map (hd0) (hd0)		# Delete the map; this is needed.
        boot

******************************************************************************
***                      Notes on the use of stack                         ***
******************************************************************************

The protected-mode and real-mode stack are merged at physical address 0x2000.

All functions should use at most 2K stack space(0x1800-0x2000). So each
subfunction should use as little stack as possible to avoid stack-overflow.

Don't use recursive functions because they could expend too much stack space.

The original protected mode stack at 0x68000(expand-down) is free now and can
be reused for any purposes.

******************************************************************************
***                  A bug was found in the CDROM driver                   ***
******************************************************************************

It seems the cdrom must be connected as the master device of an IDE controller.

If cdrom is slave, the driver will fail to read the cdrom sectors. Hope someone

could fix this problem.

******************************************************************************
***                        BIOS and the (cd) drive                         ***
******************************************************************************

When BIOS boots a no-emulation-mode bootable CD-ROM, it allocates a BIOS drive
number to the CD. If the boot image of the CD-ROM is grldr or stage2_eltorito,
then GRUB can access the CD-ROM media through the drive number allocated by
BIOS. The device name of the CD-ROM is (cd).

BIOS can allocate a BIOS drive number to a no-emulation-mode CDROM even when
the CDROM is not bootable. QEMU has done so. At boot time, GRUB4DOS will
search drives 0x80-0xFF for a possible no-emulation-mode CDROM drive allocated
by BIOS. So if BIOS offered a CDROM interface of int13 EBIOS functions 41h-4Eh,
then the (cd) device will be automatically available in GRUB4DOS.

******************************************************************************
***              The way of disk emulation changed greatly                 ***
******************************************************************************

The way of disk emulation has changed greatly since 0.4.2 final. Please don't
mix newer versions with older versions when disk emulation features are used.

The newer versions won't automatically unhook emulations established in a
previous grub4dos environment. The GRUB.EXE of an older version will
automatically dismiss emulations established earlier, before transferring
control to the main grub program(i.e., pre_stage2).

******************************************************************************
***            FreeDOS EMM386 v2.26 (2006-08-27) VCPI problem              ***
******************************************************************************

The VCPI function "AX=DE0Ch - Switch From Protected Mode to V86 Mode" of
FreeDOS EMM386 v2.26 was not implemented properly(it always hangs). As an
alternative, you can use Microsoft's EMM386 instead.

Even while emm386 is running, grub.exe can be started. But if you try to quit
to DOS from grub4dos by using the `quit' command, the VCPI function DE0C will
be called. If EMM386 is of Microsoft, everything goes ok. If EMM386 is of
FreeDOS, the machine will hang.

******************************************************************************
***                 New options for map were added                         ***
******************************************************************************

Along with 0.4.2 final, there are two new options for the map command. They
are --safe-mbr-hook=SMH and --int13-scheme=SCH. Both are related with disk
emulation for use(as smoothly as possible) in the Win9x environment.

SMH can take either of the two values 0 and 1. By default, SMH is 1. If you
encountered problems of disk emulation under Win9x, you may insert a line of

    map --safe-mbr-hook=0

before the `boot' command and try again.

Also SCH may take either 0 or 1 at present. By default, SCH is 1. If you
encountered disk emulation problems under Win9x, you may insert a line of

    map --int13-scheme=0

before the `boot' command and try again.

Note by the way. Like --safe-mbr-hook and --int13-scheme, the MAP command has
a few other options that are used for setting global variables. They are here:

    map --floppies=M

M can be 0, 1, or 2. MAP will set a proper value at 0040:0010 by using M.

    map --harddrives=N

N can be between 0 and 127(inclusive). MAP will set 0040:0075 to N.

    map --memdisk-raw=RAW

RAW default to 1. If RAW=0, `int15/ah=87h' will be used to access memdrives.

    map --ram-drive=RD

RD default to 0x7F which is a floppy. If the RAM DRIVE is a hard drive image
(with partition table in the first sector), you should set RD >= 0x80 and RD
< 0xFF.

    map --rd-base=ADDR

    map --rd-size=SIZE

ADDR specifies the physical base address of the ramdisk image. SIZE specifies
the size in bytes of the ramdisk image. ADDR default to 0. SIZE is also default
to 0, but a size of 0 means 4GB, not a zero-long disk. The RAM DRIVE can be
accessed in the GRUB environment using the (rd) device.

******************************************************************************
***                   About the new map option --in-situ                   ***
******************************************************************************

--in-situ is used with hard drive images or hardrive partitions. With an
in-situ map, we can typically use a logical partition as a primary partition.

In-situ map is a whole drive map. It only virtualize the partition table and
the number of hidden sectors in the BPB of the DOS Boot Record.

While disk emulation may encounter various problems with win9x, the in-situ map
works fine with win9x.

Note that --in-situ will not change the real partition table.

Example:

    map --in-situ (hd0,4)+1 (hd0)

******************************************************************************
***                      The PARTNEW Command Syntax                        ***
******************************************************************************

Besides the mappings in the above section, you may instead choose to create a
new primary partition with the PARTNEW command. PARTNEW can generate a primary
partition entry (in the partition table) for a logical partition.

For example,

    partnew (hd0,3) 0x07 (hd0,4)+1

where the file (hd0,4)+1 stands for the whole partition (hd0,4). This command
will create a new primary partition (hd0,3) whose type is 0x07 and whose
contents/data is the same as that of the logical partition (hd0,4).

Just like a whole logical partition, a contiguous partition image file can
also be used with PARTNEW:

    partnew (hd0,3) 0x00 (hd0,0)/my_partition.img

The type 0x00 indicates a type-auto-detection of the image MY_PARTITION.IMG.
The above command will create a new primary partition (hd0,3) with a proper
type and with contents/data being exactly that of the contiguous file
(hd0,0)/my_partition.img.

PARTNEW will automatically correct the "hidden sectors" in the BPB and the
modification will be permanent. And PARTNEW modifies the partition table
permanently.

In addition to creating new partition entries, PARTNEW can also be used to
delete(erase, or wipe) a primary partition entry. For example,

    partnew (hd0,3) 0 0 0

which will empty the last entry in the partition table in MBR. Generally,
you should use the form of "partnew PARTITION 0 0 0" to erase the entry.
Note that only the entry would be erased, and the data stored in the partition
will not be touched.

******************************************************************************
***              Newly implemented operators `&&' and `||'                 ***
******************************************************************************

This implementation is very simple. It does not handle operator nesting.

Usage of `&&':

    command1 && command2

Description:

    If command1 returns true, then command2 will be executed.

Usage of `||':

    command1 || command2

Description:

    If command1 returns false, then command2 will be executed.

Examples:

    is64bit && default 0
    is64bit || default 1

******************************************************************************
***          Three new commands is64bit, errnum and errorcheck             ***
******************************************************************************

is64bit and errnum retrieve the value of is64bit and errnum respectively.

errorcheck controls whether or not the error will be handled. By default,
errorcheck is on, and menu script execution will stop on error. If errorcheck
is off, the script will continue to execute upto a boot command. A boot command
will turn the errorcheck on.

******************************************************************************
***              Use numeric keys to select a menu entry                   ***
******************************************************************************

If, for example, you intend to goto entry #25, you may press 2 followed by 5.

******************************************************************************
***           Use the INSERT key to debug step by step at startup          ***
******************************************************************************

Some buggy machines could fail to enter grub4dos environment. They might hang
or reboot unexpectedly. Press INSERT as quickly as possible on startup, and
you can get a chance to single-step the boot process and see how far it can
go, and then report bugs.

******************************************************************************
***             The debug command syntax has been changed                  ***
******************************************************************************

The DEBUG command now can be used to control the verbosity of command output:

        debug [ on | off | normal | status | INTEGER ]

0 or off for silent
1 or normal for normal
2 to 0x7FFFFFFF or on for verbose

******************************************************************************
***                     GRUB4DOS and Windows Vista                         ***
******************************************************************************

First, use the following command to create a boot entry:

    bcdedit /create /d "GRUB for DOS" /application bootsector

The result will look like this:

The entry {05d33150-3fde-11dc-a457-00021cf82fb0} was successfully created.

The long string {05d33150-3fde-11dc-a457-00021cf82fb0} is the id for this
entry.

Then, use the following commands to set boot parameters:

    bcdedit /set {id} device boot
    bcdedit /set {id} path \grldr.mbr
    bcdedit /displayorder {id} /addlast

Please replace {id} with the actual id returned from the previous command.

Finally, copy GRLDR.MBR to C:\ or wherever your boot drive is, and copy GRLDR
and menu.lst to the root directory of any FAT16/FAT32/EXT2/NTFS partition.

Note: A boot partition should be the active primary partition with BOOTMGR
      inside. The `device boot' indicates grldr.mbr should be in the boot
      partition.

Lianjiang has written down a script to automate the tasks:

    @echo off
    rem by lianjiang
    cls
    echo.
    echo   Please run as administrator
    echo.
    pause
    set gname=GRUB for DOS
    set vid=
    set timeout=5
    bcdedit >bcdtemp.txt
    type bcdtemp.txt | find "\grldr.mbr" >nul && echo. && echo  BCD entry existing, no need to install. && pause && goto exit
    bcdedit  /export "Bcd_Backup" >nul
    bcdedit  /create /d "%gname%" /application bootsector >vid.ini
    for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do (
                  set vida=%%i
    )
    for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do (
                  set vid={%%i}
    )
    echo %vid%>vid.ini
    bcdedit  /set %vid% device boot >nul
    bcdedit  /set %vid% path \grldr.mbr >nul
    bcdedit  /displayorder %vid% /addlast >nul
    bcdedit  /timeout  %timeout% >nul
    if exist grldr.mbr copy grldr.mbr %systemdrive%\ /y && goto exit
    echo.
    echo   Please copy grldr.mbr to %systemdrive%\
    echo.
    pause
    :exit
    del bcdtemp.txt >nul
-------------------------------------------------------------------
Update: Fujianabc pointed out that

    bcdedit  /set %vid% device boot >nul

should be changed to

    bcdedit  /set %vid% device partition=%SystemDrive% >nul
-------------------------------------------------------------------

You still need to copy grldr yourself.

Notice: It's possible to modify the BCD entry from a different OS, you just
need to specify the location of BCD:

    bcdedit /store D:\boot\BCD ...

Notice: These commands need elevated privileges, they should be used inside
cmd.exe which is started with "Run as administrator".

Notice: People has reported that some version of Vista doesn't support
creating file in C:\ with no extension, even with administrator privileges.
This means grldr can't be placed in C:\. You can solve this by either copy
grldr to another partition, or rename grldr to something like grub.bin. Please
see the following section on how to do this.

******************************************************************************
***                      How to rename grldr                               ***
******************************************************************************

grldr and grldr.mbr use internal boot file name to decide which file to load,
so if you want to change the name, you must also change the embeded setting.
You can do this with the help of grubinst, which can be downloaded at:

http://download.gna.org/grubutil/

grubinst can generate customized grldr.mbr:

    grubinst -o -b=mygrldr C:\mygrldr.mbr

grubinst can also edit existing grldr/grldr.mbr:

    grubinst -e -b=mygrldr C:\mygrldr

    grubinst -e -b=mygrldr C:\mygrldr.mbr

In this case, you must use a grubinst that is compatible with the version of
grub4dos, otherwise the edit will fail.

So, in order to load mygrldr instead of grldr, you can use one of the
following methods:

1. Use customized grldr.mbr to load mygrldr. In this case, you need to change
the embeded boot file name in grldr.mbr. The name of grldr.mbr can be changed
at will.

2. Use mygrldr directly. In this case, you need to change the embeded boot
file name in mygrldr to match its new name.

Notice: The boot file name must conform to the 8.3 naming convention.

******************************************************************************
***                          PXE device                                    ***
******************************************************************************

If PXE service is found at startup, GRUB4DOS will create a virtual device
(pd), through which files from the tftp server can be accessed. You can setup
a diskless boot environment using the following steps:

Client side

You need to boot from PXE ROM.

Server side

You need to configure a dhcp server and a tftp server. In the dhcp server, use
grldr as boot file.

You may also want to load a different menu.lst for different client. GRUB4DOS
will scan the following location for configuration file:

    [/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD
    [/mybootdir]/menu.lst/C000025B
    [/mybootdir]/menu.lst/C000025
    [/mybootdir]/menu.lst/C00002
    [/mybootdir]/menu.lst/C0000
    [/mybootdir]/menu.lst/C000
    [/mybootdir]/menu.lst/C00
    [/mybootdir]/menu.lst/C0
    [/mybootdir]/menu.lst/C
    [/mybootdir]/menu.lst/default

Here, we assume the network card mac for the client machine is
88:99:AA:BB:CC:DD, and the ip address is 192.0.2.91 (C000025B). /mybootdir is
the directory of the boot file, for example, if boot file is /tftp/grldr, then
mybootdir=tftp.

If none of the above files is present, grldr will use its embeded menu.lst.

This is a menu.lst to illstrate how to use files from the tftp server.

    title Create ramdisk using map
    map --mem (pd)/floppy.img (fd0)
    map --hook
    rootnoverify (fd0)
    chainloader (fd0)+1

    title Create ramdisk using memdisk
    kernel (pd)/memdisk
    initrd (pd)/floppy.img

You can see that the menu.lst is very similar to normal disk boot, you just
need to replace device like (hd0,0) with (pd).

There are some differences between disk device and pxe device:

1. You can't list files in the pxe device.

2. The blocklist command will not work with a file in the pxe device.

3. You must use --mem option if you want to map a file in the pxe device.

When you use chainloader to load file from the pxe device, there is a option
you can use:

    chainloader --raw (pd)/BOOT_FILE

Option --raw works just like --force, but it load file in one go. This can
improve performance in some situation.

You can use the pxe command to control the pxe device.

1. pxe

    If used without any parameter, pxe command will display current
    settings.

2. pxe blksize N

    Set the packet size for tftp transmission. Minimum value is 512,
    maximum value is 1432. This parameter is used primarily for very old
    tftp server where packet larger than 512 byte is not supported.

3. pxe basedir /dir

    Set the base directory for files in the tftp server. If

        pxe basedir /tftp

    then all files in the pxe device is related to directory /tftp, for
    example, (pd)/aa.img correspond to /tftp/aa.img in the server.

    The default value of base directory is the directory of the boot file,
    for example, if boot file is /tftp/grldr, then default base directory
    is /tftp.

4. pxe keep

    Keep the PXE stack. The default behaviour of GRUB4DOS is to unload
    the PXE stack just before it exits.

5. pxe unload

    Unload the PXE stack immediately.

******************************************************************************
***                  New Feature of Relative Path Support                  ***
******************************************************************************

Use the `root' or `rootnoverify' command to specify the `working directory'.

For example:

        root  (hd0,0)/boot/grub

This specifies that the working dir is (hd0,0)/boot/grub. So all subsequent
filenames of the form "/..." will actually refer to (hd0,0)/boot/grub/...

That is to say:

        cat  /menu.lst

will be equivalent to

        cat  (hd0,0)/boot/grub/menu.lst

******************************************************************************
***                 Notation For The Current Root Device                   ***
******************************************************************************

The notation `()' can be used to access the current root device. You may use
`find --set-root ...' to set the current root device, but the find command
does not set the `working dir' of the root device. In this case you should
use `()' to set the working dir after the find command:

        root  ()/boot/grub

Update 2008-05-01:

    FIND can also set the `working directory' now. For example:

        find  --set-root=/tmp  /boot/grub/menu.lst

    It is equivalent to this pair of commands:

        find  --set-root  /boot/grub/menu.lst
        root  ()/tmp

******************************************************************************
***                   The new map option --a20-keep-on                     ***
******************************************************************************

Along with 0.4.3 final, map has a new option --a20-keep-on which is related to
A20 control after a memdrive sector access. Usage:

    map --a20-keep-on=0

It should be used before the "map --hook" command.

By default, A20 will be always on after an RAM INT13 sector access. If
"map --a20-keep-on=0" is used, the A20 status after the INT13 call will be the
same as that before the INT13 call.

******************************************************************************
***                  The CDROM emulation (virtualization)                  ***
******************************************************************************

The CDROM emulation is sometimes called ISO emulation. Here is an example:

    map  (hd0,0)/myiso.iso  (hd32)
    map  --hook
    chainloader  (hd32)
    boot

if myiso.iso is not contiguous and you have enough memory, add a --mem option:

    map  --mem  (hd0,0)/myiso.iso  (hd32)
    map  --hook
    chainloader  (hd32)
    boot

Note: (hd32) is a grub drive number equivalent to (0xA0). If a virtual drive is
specified with a drive number greater than or equal to 0xA0, then it will be
treated as a cdrom (i.e., with 2048-byte big sectors).

Like normal disk emulations, the CDROM emulation also (mainly) works with
real-mode OSes. After a protected-mode OS kernel (such as
WinNT/2K/XP/VISTA/LINUX) gains control, the OS would have no ability to access
the virtual CDROM through BIOS int13.

DOS/Win9x users may google for ELTORITO.SYS and use it in CONFIG.SYS as a
device driver for the virtual cdrom.

Example usage of eltorito.sys in CONFIG.SYS:

    device=eltorito.sys /D:oemcd001

Corresponding MSCDEX command which can be placed in AUTOEXEC.BAT:

    MSCDEX /D:oemcd001 /L:D

Due to some bugs found in eltorito.sys, the driver could fail to load. If you
encounter such problems, then you may replace (hd32) with (0xFF) for the
virtual cdrom drive number and try again.

******************************************************************************
***                  The New Command CHECKRANGE                            ***
******************************************************************************

Checkrange checks whether or not the return value of a command is in the
specified range or ranges.

Usage:		checkrange  RANGE  COMMAND

Here are some examples for RANGE:

    3 is a range containing only the number 3
    3:3 is equivalent to 3
    3:8 is a range containing the numbers 3, 4, 5, 6, 7, 8
    3,4,5,6,7,8 is equivalent to 3:8
    3:5,6:8 is also equivalent to 3:8
    3,4:7,8 is also equivalent to 3:8

Note: You should not insert spaces into a range.

Here is an example showing where the checkrange can be used:

    checkrange 0x05,0x0F,0x85 parttype (hd0,1) || hide (hd0,1)

which means: if (hd0,1) is not an extended partition, then hide it.

******************************************************************************
***                       The New Command TPM                              ***
******************************************************************************

The "tpm --init" uses 512-byte data at 0000:7C00 as buffer to initialise TPM.

Before you boot VISTA's BOOTMGR, you might have to use the "tpm --init"
command on some machines. Normally you want to issue the "tpm --init" command
after a CHAINLOADER command.

******************************************************************************
***               Delimitors or comments between titles                    ***
******************************************************************************

It is possible to use titles as delimitors or comments. A title(or menu item)
is called unbootable if all of its menu commands are not boot-sensitive.

The following commands are boot-sensitive(and others are not boot-sensitive):

    boot
    bootp
    chainloader
    configfile
    embed
    commandline
    halt
    install
    kernel
    pxe
    quit
    reboot
    setup

An unbootable title will be skipped when the user presses the Up Arrow or Down
Arrow keys. Even the unbootable menu item can get accessed(and executed) by
using the Left Arrow and/or Right Arrow keys. Examples:

    title This is an UNBOOTABLE entry(so this line is also a comment)
        pause --wait=0 This title is a comment. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        help
        help root
        help chainloader
        help parttype
        clear
    title ------------------------------------------------------------
        pause --wait=0 This title is a delimitor. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        clear
        help
        help boot
    title ============================================================
        pause --wait=0 This title is a delimitor. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        help
        clear
        help pause
    title ************************************************************
        pause --wait=0 This title is a delimitor. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        help kernel
        help
        clear

Note: An unbootable menu item must contain at least one command. If there
are no commands for a title, the title will be simply discarded and disappear.

******************************************************************************
***                           Bifurcate drives                             ***
******************************************************************************

Some machines apply different actions to a drive between CHS and LBA mode.
When you read sectors using standard BIOS call int13/AH=02h, you might find
out the drive is a floppy. But when you read sectors using extended BIOS
call(EBIOS) int13/AH=42h, you could know the drive is a cdrom. Such a drive
is called bifurcate.

A bifurcate drive can have two drive numbers: one is the normal BIOS drive
number between 00 and FF in hexa, and this drive uses only CHS mode disk
access(standard BIOS int13/AH=02h); the other is the normal BIOS drive number
(Bitwise) OR'ed by 0x100(i.e., 256 in decimal), and this drive uses only
LBA mode disk access(EBIOS int13/AH=42h). For example, if the drive 0x00
(i.e., the first floppy) is bifurcate, then the drive (0x00) uses CHS mode
to access its sectors, and the drive (0x100) uses LBA (meaning EBIOS) mode
to access its sectors.

The geometry command can report the disk access mode for bifurcate drives as
BIF instead of the conventional CHS or LBA.

Known bifurcate drives. Virtual PC and some real machines are found to create
a bifurcate floppy drive when they boot from a floppy-emulation mode bootable
cdrom. The "geometry (fd0)" will show

    drive 0x00(BIF): C/H/S=...Sector Count/Size=.../512

and "geometry (0x100)" will show

    drive 0x100(BIF): C/H/S=...Sector Count/Size=.../2048

Actually (0x100) can access the whole cdrom, you may "ls (0x100)/" and find
your files on the cdrom(not the files inside the booted floppy image). Of
course "ls (fd0)/" will list the files inside the booted floppy image.

Note that only some (real or virtual) machines have this action, others
will not produce bifurcate drives.

******************************************************************************
***                       GRLDR as PXE boot file                           ***
******************************************************************************

GRLDR can be used as the PXE boot file on a remote/network server. The (pd)
device is used to access files on the server. When GRLDR is booted through
network, it will use its preset menu as the config file. However, you may use
a "pxe detect" command, which acts the same way as PXELINUX:

    * First, it will search for the config file using the hardware type (using
      its ARP type code) and address, all in hexadecimal with dash separators;
      for example, for an Ethernet (ARP type 1) with address 88:99:AA:BB:CC:DD
      it would search for the filename 01-88-99-AA-BB-CC-DD.

    * Next, it will search for the config file using its own IP address in
      upper case hexadecimal, e.g. 192.0.2.91 -> C000025B. If that file is not
      found, it will remove one hex digit and try again. At last, it will try
      looking for a file named default (in lower case). As an example, if the
      boot file name is /mybootdir/grldr, the Ethernet MAC address is
      88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will try following
      files (in that order):

       /mybootdir/menu.lst/01-88-99-AA-BB-CC-DD
       /mybootdir/menu.lst/C000025B
       /mybootdir/menu.lst/C000025
       /mybootdir/menu.lst/C00002
       /mybootdir/menu.lst/C0000
       /mybootdir/menu.lst/C000
       /mybootdir/menu.lst/C00
       /mybootdir/menu.lst/C0
       /mybootdir/menu.lst/C
       /mybootdir/menu.lst/default

You cannot directly map an image file on (pd). You must map it in memory using
the --mem option. For example,

    map --mem (pd)/images/floppy.img (fd0)
    map --hook
    chainloader (fd0)+1
    rootnoverify (fd0)
    boot

One more example,

    map --mem (pd)/images/cdimage.iso (0xff)
    map --hook
    chainloader (0xff)
    boot

******************************************************************************
***                       New program badgrub.exe                          ***
******************************************************************************

The new program badgrub.exe is intended to serve 'bad' machines(typically some
DELL models) that cannot run the normal grub.exe.

******************************************************************************
***                           Conditional find                             ***
******************************************************************************

The new find syntax allows to find a device conditionally.

    find [OPTIONS] [FILENAME] [CONDITION]

CONDITION is a normal grub command which returns TRUE or FALSE.

    Example 1:

        find

    This will list all partitions, all floppies and the (cd).

    Example 2:

        find +1

    This will list all devices with a known filesystem.

    Example 3:

        find checkrange 0xAF parttype

    This will list all partitions with ID=0xAF.

    Example 4:

        find /ntldr checkrange 0x07 parttype

    This will list all partitions with ID=0x07 and existing /ntldr.

******************************************************************************
***                    How to build grldr boot images                      ***
******************************************************************************

1. build 1.44M floppy image ext2grldr.img

    dd if=/dev/zero of=ext2grldr.img bs=512 count=2880
    mke2fs ext2grldr.img
    mkdir ext2tmp
    mount -o loop ext2grldr.img ext2tmp
    cp default ext2tmp
    cp menu.lst ext2tmp
    cp grldr ext2tmp
    umount ext2tmp
    bootlace.com --floppy --chs --sectors-per-track=18 --heads=2 --start-sector=0 --total-sectors=2880 ext2grldr.img

2. build 1.44M floppy image fat12grldr.img

    dd if=/dev/zero of=fat12grldr.img bs=512 count=2880
    mkdosfs fat12grldr.img
    mkdir fat12tmp
    mount -o loop fat12grldr.img fat12tmp
    cp default fat12tmp
    cp menu.lst fat12tmp
    cp grldr fat12tmp
    umount fat12tmp
    bootlace.com --floppy --chs fat12grldr.img

3. build iso9660 CDROM image grldr.iso

    mkdir iso_root
    cp grldr iso_root
    cp menu.lst iso_root
    mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

******************************************************************************
***           Use bootlace.com to install partition boot record            ***
******************************************************************************

Since bootlace.com has not implemented the --install-partition option, you
need to use the already implemented --floppy=PartitionNumber option instead.

Hear is a way you might want to follow:

Step 1. Get the boot sectors of the partition and save to a file MYPART.TMP.
    For NTFS, you need to get the beginning 16 sectors. For other type of
    filesystems, you only need to get one sector, but getting more sectors
    is also ok.

Step 2. Run this:

    bootlace.com --floppy=Y --sectors-per-track=S --heads=H --start-sector=B --total-sectors=C --vfat --ext2 --ntfs MYPART.TMP

    where we suppose MYPART.TMP is for (hdX,Y) and the partition number Y
    should be specified as in the --floppy=Y option.

    Note that for FAT12/16/32/NTFS partitions, you can omit these options:

         --sectors-per-track, --heads, --start-sector, --total-sectors,
         --vfat and --ext2.

    For NTFS partitions, you must specify --ntfs option.

    For ext2 partitions, you can omit --vfat, --ntfs and --ext2 options,
    but other options should be specified.

Step 3. Put MYPART.TMP back on to the boot sector(s) of your original partition
    (hdX,Y).

Note: Only a few file systems(FAT12/16/32/NTFS/ext2/ext3) are supported by now.

Note2: Under Linux you may directly write the partition. That is to say, Step
    1 and Step 3 are not needed. Simply use its device name instead of
    MYPART.TMP.

Note3: grubinst has the feature of installing grldr boot code onto a
    partition boot area.

******************************************************************************
***                Use a single key to select menu item                    ***
******************************************************************************

Some machines have a simplified keyboard. The keyborad might have only the
number keys 0 .. 9 plus a few other keys. When the menu displayed, the user
can strike a key for 8 times. When the menu handler detects the continuous
single keypress, it will assume the user want to use this key to select a menu
item and boot. This single key will act as the RIGHT-ARROW key for the user to
select a menu item. And 5 seconds later after the user stops the keypress,
the selected menu item will automatically boot. Any normal keys can be used as
a single key for this purpose, except for a few functional keys like b, e,
Enter, etc. Once another key is pressed, the feature of Single-Key-Selection
will disappear immediately.

******************************************************************************
***             Parameter file for bootlace running under DOS              ***
******************************************************************************

You may move all or part of the command-line arguments into a file. The file
can have multi lines. Just like SPACEs and TABs, the CRs and LFs can also
delimit the commandline arguments in the parameter file.

Example:

        bootlace < my_parafile
        bootlace --read-only my_mbr < my_other_options

Note:	Pipes do not work. You have to use the input-redirection operator(<).

******************************************************************************
***                  Use bootlace to create a triple MBR                   ***
******************************************************************************

This is typically used for USB drives, though it also works with hard drives.

Steps to create triple MBR:

1. Do a fresh FDISK to create a FAT12/16/32 partition starting at sector 95
(in LBA, that is, the begginning sector(MBR) is sector 0).

2. Install grldr boot sector onto the boot sector of this partition. See
section "Use bootlace.com to install partition boot record" above.

3. Get 96 sectors of the drive starting at sector 0(MBR), and save to file
MYMBR96.TMP.

4. Run bootlace.com:

    bootlace.com MYMBR96.TMP

5. Put MYMBR96.TMP back onto the drive starting at MBR(sector 0).

Note: If the drive already has a triple MBR, then bootlace will cancel it
and restore the original partition layout.

******************************************************************************
***                    Use 'pxe detect' in preset-menu                     ***
******************************************************************************

Now the "pxe" command has a new subcommand "detect":

        pxe detect [BLOCK_SIZE] [MENU_FILE]

BLOCK_SIZE specifies the block size for PXE. If it is not specified or it is
0, then grub4dos will go through a probing process and get a proper value
for data transfer.

MENU_FILE specifies the config file on the PXE server. If omitted, a standard
config file in the menu.lst sub-dir will gain control. For a description on
the config files in the menu.lst sub-dir, please refer to the section
"GRLDR as PXE boot file" above.
If MENU_FILE starts in a "/", then the MENU_FILE on the PXE server will gain
control, else(if MENU_FILE does not start in a "/") no menu will be executed.

Normally you want to use a "pxe blksize ..." or a "pxe detect ..." command
before you access the (pd) device, since the default blocksize of 512 might
not work on your system.

******************************************************************************
***                    Use 'configfile' in preset-menu                     ***
******************************************************************************

Now the preset menu holds the highest priority. It will gain control prior to
the menu.lst on the boot device. If a 'configfile' command(without specifying
any file as the parameter) occurs in the menu init command group of the preset
menu, then control will go to the menu.lst on the boot device.

Note: You should better not use "configfile ANOTHER_MENU" frequently in your
menu.lst file, because it could create infinite loop and thus hang your
computer.

******************************************************************************
***                    New command 'dd' to copy files                      ***
******************************************************************************

Usage:

dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]

Copy file IF to OF. BS is blocksize in bytes, default to 512. C is blocks to
copy, default is total blocks in IF. IN specifies number of blocks to skip
when read, default is 0. OUT specifies number of blocks to skip when write,
default is 0. Skipped blocks are not touched. Both IF and OF must exist.

Both IF and OF must have a leading device name, i.e.,  of the form `(...)'.
You may use `()' for the current root device.

dd can neither enlarge nor reduce the size of OF, the leftover tail of IF
will be discarded. OF cannot be a gzipped file. If IF is a gzipped file,
it will be decompressed automatically when copying.

dd is dangerous, use at your own risk. To be on the safe side, you should
only use dd to write a file in memory.

In some cases when writing a file in a NTFS volume, dd might fail.

If you attempt to write a device or a block file that is not in memory by
starting dd in a menu, you will safely be refused :-) (Update: no restrictions
now)

Update: New options are implemented for user defined buffer. By default,
the buffer is at address 0x50000, and length is 0x10000(=64KB). You cannot
specify ADDR to be lower than 0x100000(=1MB). Besides, you must specify SIZE
larger than 0x10000(=64KB). Normally you want ADDR >= 0x1000000(=16MB), and
SIZE also >= 16MB. A large SIZE could speed up the progression of dd.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
!!!!    Caution! Both IF and OF can be a device name which stands for     !!!!
!!!!    all the sectors on the device. Take utmost care!                  !!!!
!!!!______________________________________________________________________!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

******************************************************************************
***              New command 'uuid' to identify partitions                 ***
******************************************************************************

Usage:

    uuid [DEVICE] [UUID]

If DEVICE is not specified, search for filesystem with UUID in all partitions
and set the partition containing the filesystem as new root (if UUID is
specified), or just list uuid's of all filesystems on all devices (if UUID is
not specified). If DEVICE is specified, return true or false according to
whether or not the DEVICE matches the specified UUID (if UUID is specified),
or just list the uuid of DEVICE (if UUID is not specified).

Example 1:

    find --set-root uuid () 7f95820f-5e33-4e6c-8f50-0760bf06d79c

which will find a partition with uuid=7f95820f-5e33-4e6c-8f50-0760bf06d79c
and set the partition as root if found.

Example 2:

    uuid ()

which will print the uuid of the current root device.

******************************************************************************
***                     gfxmenu support in grub4dos                        ***
******************************************************************************

Gfxmenu support has been added to grub4dos. To use it, you must first find the
message file you need, then load it in menu.lst with command like this:

    gfxmenu /message

This should be a gloabl command, that is, not inside any menu item. Also, it
can only be used in configure file, running it in console mode does not work.

gfxmenu does not work in conjunction with the password feature.

There are two major format of message file. Old format is created with gfxboot
3.2.* or older (size of message file is normally about 150K), while new format
is created with gfxboot 3.3.* and later (size of message file is normally above
300K). Both format are supported in grub4dos.

******************************************************************************
***           Use 'write' to write a string into a device or file          ***
******************************************************************************

Usage:

    write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING

SKIP is an integer and defaults to 0.

If ADDR_OR_FILE is an integer, then it is treated as a memory address, and
INTEGER_OR_STRING must be an integer value. The integer INTEGER_OR_STRING
will be written to address (ADDR_OR_FILE + SKIP).

If ADDR_OR_FILE is a device or a file, then INTEGER_OR_STRING is treated as
a string which will be written to ADDR_OR_FILE at offset SKIP (in bytes).

The string is quoted with nothing, that is, neither with the single quote
char(') nor with the double quote char(").

Space char must be quoted with back slash(\). (Update: need not now)

Single quote char(') and double quote char(") are not interpreted specially
and can be used directly in the string.

Some C-style quote sequences are interpreted as follows:

    \NNN	character with octal value NNN (1 to 3 digits)

    \\	backslash

    \a	alert (BEL)

    \b	backspace

    \f	form feed

    \n	new line

    \r	carriage return

    \t	horizontal tab

    \v	vertical tab

    \xHH	byte with hexadecimal value HH (1 to 2 digits)

Just like dd, the write can neither enlarge nor reduce the size of the
destination file, the leftover tail of the string will be discarded.
The destination file cannot be a gzipped file.

Again like dd, the write command is also dangerous, use at your own risk.
And to be on the safe side, you should only write to memory files.

In some cases when writing a file in a NTFS volume, the write might fail.

If you attempt to write a device or a block file that is not in memory by
using write in a menu, you will safely be refused :-) (Update: no restrictions
now)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
!!!!    Caution! The file to write can be a device name which stands      !!!!
!!!!    for all the sectors on the device. Take utmost care!              !!!!
!!!!______________________________________________________________________!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

******************************************************************************
***                 Item-by-item help text for menu entries                ***
******************************************************************************

The help message at the bottom of the screen will vary as you choose the menu.

You may append your help text to the title line. The help text must begin
with "\n", for example:

    title This is the title\nThis is the help text.\nAnd this is the 2nd line of the help text.

Some C-style quote sequences are interpreted as stated in the section above.

******************************************************************************
***        initrd can load multiple cpio files for Linux 2.6 kernels       ***
******************************************************************************

Usage:

    initrd FILE [FILE ...]

Note 1: You should not load more than one oldstyle disk images in this way,
because this is not supported by Linux kernel.

Note 2: The FILEs should be specified in the same order as with syslinux.

******************************************************************************
***            access some internel variables at a fixed location          ***
******************************************************************************

Address		Length		Description
=========	========	==============================================
0000:8208	4 (DWORD)	install_partition (the boot partition)
0000:8280	4 (DWORD)	boot_drive (the boot drive)
0000:8284	4 (DWORD)	pxe_yip (your ip)
0000:8288	4 (DWORD)	pxe_sip (server ip)
0000:828C	4 (DWORD)	pxe_gip (gateway ip)
0000:8290	8 (QWORD)	filesize (file size by last "cat --length=0")
0000:8298	4 (DWORD)	saved_mem_upper (extended memory size in KB)
0000:829C	4 (DWORD)	saved_partition (current root partition)
0000:82A0	4 (DWORD)	saved_drive (current root drive)
0000:82A4	4 (DWORD)	no_decompression (no auto gunzip)

Note 1: Filesize can be initialised/modified by using "cat --length=0 FILE".
Note 2: You should not write these variables by hand(should read only).
Note 3: You may use 1K at 6000:0000 for your own varibles(See note 4).
Note 4: The read command now returns the integer value at the given address.
Note 5: Grub4dos does not have the variable expansion feature. You can only
    use integer variables. You need not declare them, but use the memory
    address directly. Usually you want to use variables as a logical
    value or in a command for conditional test, e.g., of this form:
         "checkrange RANGE read ADDR"
Note 6: no_decompression, saved_drive and saved_partition are writable.

******************************************************************************
***            possibility to run another menu.lst after gfxmenu           ***
******************************************************************************

Notice the use of CONFIGFILE after GFXMENU in the following example:

    # The menu.lst file for gfxmenu
    default=0
    timeout=5
    gfxmenu /message
    configfile /another.lst
    title 0..........
    ................
    title 1..........
    ................
    title 2..........
    ................
    # End of menu.lst

    # Begin another.lst
    default=0
    timeout=5
    title 0..........
    ................
    title 1..........
    ................
    title 2..........
    ................
    # End of another.lst

This will try gfxmenu command first. On exit(or on failure) control will go
to another.lst file.

******************************************************************************
***                   a range of drives can be unmapped                    ***
******************************************************************************

Usage:

    map --unmap=RANGE

RANGE is a range of BIOS drive numbers to be unmapped. BIOS drive number 0
is for the first floppy, 1 is for the second floppy; 0x80 is for the first
hard drive, 0x81 is for the second hard drive, etc; virtual cdrom (hd32)
corresponds to BIOS drive number 0xA0, (hd33) corresponds to 0xA1, etc.

For description on RANGE, please refer to section `The New Command CHECKRANGE'
above.

Example 1:

    map --unmap=0,0x80,0xff

This will unmap virtual floppy (fd0), virtual hard drive (hd0) and virtual
cdrom (0xff).

Example 2:

    map --unmap=0:0xff

This will unmap all virtual floppies, all virtual hard drives and all virtual
cdroms.

Note 1: Normally a `map' command will add an item in the drive map table for
    a virtual drive. But `--unmap' means items in the drive map table
    (for the specified virtual drives) will be deleted.
Note 2:	The --unhook option only breaks the INT13 hook(to the inerrupt
    vector table). It will not affect the drive map table. And later on
    execution of a `boot' command, the INT13 disk emulation routine will
    automatically get hooked(to the interrupt vector table) when needed
    (e.g., the drive map table is non-empty) even if it has been unhooked.
Note 3: Usually you want to do a `map --rehook' after you have changed the
    drive map table.

******************************************************************************
***                         geometry tune and sync                         ***
******************************************************************************

When a USB storage device is connected to a (or another) machine, the geometry
in the partition table or in the BPB of the volume could be invalid, and the
machine could hang at boot time. So you need to find out the correct geometry
for the drive (use `geometry --tune'), and then update the geometry in
partition table and BPB of the drive(use `geometry --sync').

The above steps are required if you are going to boot DOS, because DOS
requires the right geometry in the partition table and BPB. Windows/Linux may
also require it, since the boot process could run in real-mode.


Please refer to http://grub4dos.sourceforge.net/wiki/ for DOCs on GRUB4DOS.
请参考在网址 http://grub4dos.sourceforge.net/wiki/ 处的 GRUB4DOS 有关文档。

Main project page:	https://gna.org/projects/grub4dos/
项目主页

Download site:		http://download.gna.org/grub4dos/
下载网址

Download site:		http://grub4dos.sourceforge.net/
下载网址

Download site:		http://sarovar.org/projects/grub4dos/
下载网址

Download site:		http://grub4dos.nufans.net/
下载网址

Download site:		http://sites.google.com/site/grubdos/
下载网址

Download site:		ftp://grub4dos.sarovar.org/pub/grub4dos/
下载网址

Get the latest source code by using anonymous svn in this way:
通过匿名 svn 服务器获取最新源代码的方法：

    svn co svn://svn.gna.org/svn/grub4dos/trunk grub4dos

or in this way:
或通过以下方法：

    svn co http://svn.gna.org/svn/grub4dos/trunk grub4dos

View the source code online with your web browser at:
通过你的 web 浏览器在线查看源代码：

    http://svn.gna.org/viewcvs/grub4dos/trunk/

GRUB4DOS mailing list:
GRUB4DOS 邮件列表：

    grub4dos-devel@gna.org

Subscription page:
订阅页面：

    https://mail.gna.org/listinfo/grub4dos-devel/

Discussion forum(Official technical support site):
论坛（官方技术支持站点）：

    http://www.boot-land.net/forums/index.php?showforum=66

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

Usage:
用法：
        GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE]
                        旁路       暂停时间        热键         配置文件

        The FILE, for example, can be (hd0,0)/menu.lst
        这里的 FILE ，例如，可以是 (hd0,0)/menu.lst

        In CONFIG.SYS, the line looks like:
                在 CONFIG.SYS 中，其配置行类似于：

            install=c:\some\where\grub.exe --config-file=FILE

        If no options present, GRUB.EXE simply uses
                如果没有使用选项，GRUB.EXE简单的使用

            (hd0,0)/menu.lst

        as the configure file, if it exists. (Notice! We finally
        changed the default file from (hd0,0)/boot/grub/menu.lst to
        (hd0,0)/menu.lst) (Changed 2006-12-23. See Update 3 below.)
        来作为配置文件，只要它存在的话。（注意！我们最终将默认的配
                置文件从 (hd0,0)/boot/grub/menu.lst 变更为 (hd0,0)/menu.lst）
                （更新于2006-12-23。参见更新3）

        The partition (hd0,0) can be of a Windows partition or a Linux
        partition, or any other partition type supported by GRUB.
                这里的分区(hd0,0)可以是一个Windows分区或者是一个linux分区，
                或者是被 GRUB 支持的其他任意分区。

        Only GRUB-style filename is acceptable here for FILE. A DOS
        filename won't work(it is certain we should use GRUB-style
        filenames because DOS-filenames won't access a file in a
        Linux ext2 partition for example).(See Update 2 below)
                这里的FILE只接受GRUB风格的文件名。DOS风格的文件名不被调用
                （很明显，我们应该使用GRUB风格的文件名，原因是比如在Linux
                ext2分区中不能使用DOS风格的文件名来访问文件 ）。
                （参见更新2）

        Update: FILE can be the contents of a menu. Use semi-colon
        to delimitate the embedded commands here in FILE. The FILE
        can be enclosed with a pair of double-quotes. For example:
                更新：FILE 可以是菜单的内容。使用分号来分隔嵌入 FILE 中的命
                令。FILE 可以被一对双引号括起来，示例：

            GRUB --config-file="root (hd0,0);chainloader +1"

        This command will boot the system in (hd0,0).
                这条命令将启动(hd0,0)上的系统。

        Another example:
                另一个例子：

            GRUB --config-file="reboot"

        This command will reboot the machine.
                这条命令将令机器重启。

        One more example:
                再例如：

            GRUB --config-file="halt"

        This command will halt the machine.
                这条命令将令机器关闭。

        if --bypass is specified, GRUB will exit to DOS when
        timeout reached.
                如果选项--bypass 被指定，GRUB将在暂停时间截止后从DOS退出。

        The option `--time-out=T' specifies the timeout value in
        seconds. T defaults to 5 if --bypass is specified and defaults
        to 0 if --bypass is not specified.
                选项'--time-out=T' 指定了以秒计时的暂停值。如果指定了--bypass
                则T的默认值为5 ，而--bypass选项没有被指定时默认值为0 。

        The default hot key value is 0x3920(for space bar). If this
        key is pressed, GRUB will boot normally. If another key is
        pressed, GRUB will terminate immediately and return back to
        DOS. See "int 16 keyboard scan codes" below.
                默认的热键值是 0x3920 (即空格键)。如果此键被按下，GRUB将正常
                启动。如果其他键被按下，GRUB 将立即终止并返回到DOS。参见下面
                的“int16 键盘扫描码”

        Each option can be specified only once at most.
                每个选项最多只能被指定一次。

        Update 2: DOS filenames have been supported(patched by John
        Cobb). If the beginning two characters of FILE are "#@", then
        the rest of FILE is taken as a DOS filename. Example:
                更新 2：DOS风格的文件名已经被支持（由John Cobb先生提供此补丁）。
                如果 FILE 的起始两个字符是“ #@ ”,那么 FILE 中其余的部分将被视
                为一个DOS风格的文件名。例如:

            GRUB --config-file="#@c:\menu.lst"

        Only the beginning 4KB of the DOS file will be used. The file
        should be an uncompressed text file.
                DOS风格的文件只有起始的4kB被使用。此文件应当是一个未被压缩的文
                本文件。

        Note: You may also use the `direct DOS file access' with the
        SHELL or INSTALL line in CONFIG.SYS, but should not use it
        with the DEVICE line. The DOS document said that a DOS device
        driver should not call the `open file' DOS call.
                注意：你也可以在SHELL或者在CONFIG.SYS的INSTALL配置行使用‘DOS
                风格文件直接访问’。但不要在DEVICE 配置行使用它。DOS文档中表述
                了DOS设备驱动不能使用'打开文件'的DOS调用。

        Update 3(2006-12-23): By default, GRUB.EXE will locate its
        config file in the following order:
                更新 3(2006-12-23): 作为默认，GRUB.EXE将按以下顺序查找它的配置文件：

                        (DOS file) .\menu.lst, the MENU.LST in the current dir.
                       （DOS风格文件） .\menu.lst, 当前目录下的MENU.LST。

            (DOS file) \menu.lst, the MENU.LST in the root dir of
                        the current drive.
                       （DOS风格文件） .\menu.lst, 当前驱动器根目录下的MENU.LST

            (GRUB file) /menu.lst, the MENU.LST in the root dir of
                        the boot device.
                       （GRUB风格文件） /menu.lst, 启动设备根目录下的MENU.LST

        The default boot device is still (hd0,0).
                默认的启动设备还是(hd0,0)。

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

Update 1:	Version 0.2.0 also brings out a new thing, GRUB for NTLDR,
        which could be used to boot into GRUB from the boot menu
        of Windows NT/2000/XP. Copy GRLDR to the root directory of
        drive C: of Windows NT/2000/XP and append to C:\BOOT.INI
        this line:
更新 1 ：       版本0.2.0 同时带来一个新的东西。GRUB for NTLDR ，它能够从
                Windows NT/2000/XP的启动菜单启动到GRUB。复制GRLDR到Windows
                NT/2000/XP的C盘根目录，并在C:\BOOT.INI中加入这样一行：

            C:\GRLDR="Start GRUB"

        That will be done. The GRLDR should be in the same directory
        as BOOT.INI and NTLDR. Note that BOOT.INI is usually hidden
        and you must unhide it before you can see it. The filename
        GRLDR shouldn't be changed. If GRLDR is in a NTFS partition,
        it should be copied to the root directory of another non-NTFS
        partition(and likewise should the menu.lst file be). If GRLDR
        is compressed, e.g., in a NTFS partition, it will not work.
                这样就完成了安装。GRLDR应该与 BOOT.INI及NTLDR 位于相同的目录。
                注意 BOOT.INI 通常是隐藏的因而你要看见它必须取消隐藏。如果GRLDR
                在一个NTFS分区，应该将它复制到一个非NTFS分区的根目录（并且menu.lst
                文件应当同样这样做）。假如GRLDR被压缩了，比如在NTFS分区中对它启
                用了压缩的情况下，它将不能运行。

        Even if the drive letter of this disk has been changed to
        other than C by the Windows device manager, it seems you still
        have to use the letter C here in BOOT.INI, otherwise, NTLDR
        will fail to locate the GRLDR file.
                即使这个磁盘的驱动器号已经被Windows设备管理器改变为另外的不同
                于 C 的盘号 ，你仍然需要在 BOOT.INI 中使用盘符 C ，否则，NTLDR
                将查找不到 GRLDR 文件。

        And what's more, if you are booting NTLDR from a floppy, you
        will have to write the GRLDR line in A:\BOOT.INI like this:
                也就表示，如果你从一个软盘上启动NTLDR，你也需要把A:\BOOT.INI
                中的 GRLDR 的所在行这样写：

            C:\GRLDR="Start GRUB"

        and shouldn't use the letter A like this:
                 而不能象下面这样使用盘符 A :

            A:\GRLDR="Start GRUB"

        (Note that in the case when BOOT.INI is on floppy A, the
        notation "C:\GRLDR" actually refer to the file A:\GRLDR).
               （注意在 BOOT.INI 位于软盘 A 的这个例子中，标记“C:\GRLDR”
                实际将访问 A:\GRLDR ）

Update 2:	GRUB for Linux is also introduced along with 0.2.0. You can
        boot grub using a linux loader KEXEC, LILO, SYSLINUX or another
        GRUB. (GRUB4LIN has merged into GRUB.EXE)
更新 2：        GRUB for linux 也一起被引入到版本0.2.0。
                你可以使用使用linux的引导程序 KEXEC,LILO,SYSLINUX 或者别的
                GRUB来启动它。（GRUB4LIN 已经合并到 GRUB.EXE 中）

        To boot GRUB off Linux, use this pair of commands:
                从Linux中直接启动到GRUB ，使用这样一组命令：

            kexec -l grub.exe
            kexec -e

        To boot GRUB via GRUB, use commands like the following:
                经由GRUB启动到GRUB，使用如下的命令：

            kernel (hd0,0)/grub.exe
            boot

        To boot GRUB via LILO, use these lines in lilo.conf:
                经由LILO启动到GRUB，在lilo.conf中加入这样几行：

            image=/boot/grub.exe
            label=grub.exe

        To boot GRUB via SYSLINUX, use these lines in syslinux.cfg:
                  经由syslinux启动到GRUB,在syslinux.cfg中加入这样几行：

            label grub.exe
                kernel grub.exe

        LOADLIN may encounter problems when loading grub.exe, because
        grub.exe requires some unchanged original BIOS interrupt
        vectors, but DOS has destroyed them, and loadlin does not
        recover them before it transfers control to grub.exe.
                LOADLIN在引导GRUB.EXE时可能会遇到问题，原因是grub.exe需要一些
                未更改的原始的BIOS中断向量，但是DOS破坏了这些中断向量，而loadlin
                在将控制权交给grub.exe前并没有恢复它们。

Update 3:	Beginning at version 0.4.0, GRUB for DOS supports memdrives.
        Example:
更新 3：        从版本0.4.0开始，DOS下的GRUB支持内存驱动器。示例:

            # boot into a floppy image
            map --mem (hd0,0)/floppy.img (fd0)
            map --hook
            chainloader (fd0)+1
            rootnoverify (fd0)
            map --floppies=1
            boot

        Because the image will be copied to a memory area, the image
        itself can be non-contiguous and even gzipped.
                由于镜像将被拷贝到一个内存区域，所以镜像本身可以是非连续的，
                甚至可以是被gzip压缩过的。

        Another Example:
                另一个例子：

            map --mem=-2880 (hd0,0)/floppy.img (fd0)

        This memdrive (fd0) will occupy at least 1440 KB of memory.
        This is useful when the size of a 1.44M-floppy image is less
        than 1440 KB.
                这个内存驱动器(fd0)将占用至少1440 KB的内存。
                这也对那些小于1440 KB的1.44M 软盘镜像有用。

        One more example:
                再例如：

            map --mem --read-only (hd0,0)/hd.img (hd1)

        This memdrive is a hard drive, and read-only. That means you
        will not be able to write data to the memdrive (hd1).
                这个内存驱动器成为了一个硬盘驱动器，并且只读。
                这表示你不能向这个(hd1)中写入数据。

        You can use many memdrives and many ordinary virtual emulated
        disk-based drives at the same time.
                你可以同时使用多个内存驱动器和多个原来的基于磁盘虚拟的仿真驱动器。

        If the BIOS does not support int15/EAX=e820h, you will not be
        able to use any memdrives.
                如果BIOS不支持中断int15/EAX=e820h，你将不能使用任何内存驱动器。

Update 4:	For memdrive emulation, a single-partition image can be used
        instead of a whole-harddrive image. Example:
更新 4：        对于内存驱动器仿真，一个单一的分区镜像可以被转换为整个硬盘镜像来
                使用。例如：

            map --mem (hd0,7)/win98.img (hd0)
            map --hook
            chainloader (hd0)+1
            rootnoverify (hd0)
            map --harddrives=1
            boot

        Here win98.img is a partition image without the leading MBR
        and partition table in it. Surely GRUB for DOS will build an
        MBR and partition table for the memdrive (hd0).
                这里的win98.img是一个头部不含主引导记录和分区表的分区镜像。
                GRUB for DOS 确实会为这个内存驱动器(hd0)建立一个MBR和分区表。

Update 5:	Now GRLDR can be used as a no-emulation-mode bootable CD-ROM
        boot image. Example for Linux users:
更新 5：        现在GRLDR可以作为一个非模拟模式的可启动光盘的启动映像文件来使
                用。Linux用户使用示例：

            mkdir iso_root
            cp grldr iso_root
            mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root

        As an alternative, grldr can also be used the same way as
        stage2_eltorito. The -boot-info-table option is allowed but you
        can omit it:
                另一种选择是，grldr也可以用同样的方法作为stage2_eltorito来使用。
                -boot-info-table选项是被允许使用的，但你可以省略它：

            mkdir iso_root
            cp grldr iso_root
            mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

        Also note that the bootable.iso above must be created with the
        -boot-load-seg 0xHHHH option where HHHH is greater than or
        equal to 1000(hex). If HHHH < 1000(hex), QEMU will hang. This
        is a bug in QEMU. The grldr.iso can be created with or without
          -boot-load-seg 0xHHHH option.
                也要注意上面的可启动iso镜像是使用-boot-load-seg 0xHHHH选项来建立的话，
                就必须令HHHH大于或者等于1000(十六进制)
                如果HHHH小于1000(十六进制),虚拟机 QEMU 会死机。这是QEMU的一个缺陷。一
                个grldr.iso镜像可以使用也可以不使用-boot-load-seg 0xHHHH选项来创建。

        The menu.lst file should be placed in the root dir of the CD.
                menu.lst文件应该被放置在光盘的根目录。

Update 6:	The Chinese special build is in the "chinese" subdirectory.
        (patched by Gandalf, 2005-06-27)
更新 6：        中文专用版被建立在"chinese"子目录中。
               （ 由Gandalf先生提供此补丁,2005-06-27）

        The Chinese special build also has scdrom builtin.
        (update: scdrom has been dropped since 2006-07-20)
                中文专用版同时内附了scdrom 功能。
                （更新：scdrom 从2006-07-20起已被删除）

Update 7:	Added memory drive (md). Like (nd) for network drive and (cd)
        for CD-ROM drive, a new drive (md) is implemented for accessing
        the whole memory as a disk drive. (md) only works for systems
        with BIOS int15/EAX=E820h support.
更新 7：        增加了内存驱动器(md) 。就像(nd)代表网络驱动器 (cd) 代表光驱一样，
                新的驱动器(md)实现了将整个内存作为一个磁盘驱动器来访问。
                (md)只工作在支持BIOS中断int15/EAX=E820h的系统上。

        The cat command now has a few new options: --hex for hexdump,
        and --locate=STRING for string search in file.
                现在，cat命令已经有了一个十六进制转储的新选项：--hex
                以及通过--locate=STRING 在文件中找查找字符串。

        Typical examples:
                典型示例：

            cat --hex (hd0)+1

        It will display the MBR sector in hex form.
                这将用十六进制的表格显示 MBR 扇区。

            cat --hex (md)+2

        It will display 1KB of your memory(in fact, it is the real-mode
        IDT table), also in hexdump form.
                这将显示你内存起始处的1 KB内容(实际，这就是实模式的IDT表),也是
                使用十六进制的转储表。

            cat --hex (md)0x800+1

        It will display 1 sector of your extended memory.
                这将显示你的扩展内存的第一个扇区。

            cat --hex (hd0,0)+1

        It will display the first sector of partition (hd0,0). Usually
        this sector contains the boot record of an operating system.
                这将显示(hd0,0)分区的第一扇区。通常这个扇区包含操作系统的引导记录。

Update 8:	Added ram drive (rd). The (md) device accesses the memory
        starting at physical address 0. But (rd) accesses memory
        starting at any base address. The base and length of the ram
        drive can be specified through the map command. "help map" for
        details. You can even specify the BIOS drive number used for
        the (rd) drive, e.g., map --ram-drive=0xf0. The default drive
        number for (rd) is 0x7F which is a floppy. If (rd) is a hard
        drive image, you should change the drive number to a value
        greater than or equal to 0x80(but should avoid using 0xffff,
        because 0xffff is for the (md) device).
更新 8：        增加了随机存贮驱动器 (rd) 。(md) 设备访问内存是从物理地址 0
                开始，而 (rd) 可以访问起始于任何基地址的内存。随机存贮器的基
                址与长度可以通过 map 命令指定。详情请使用 "help map" 命令。
                你甚至能够为(rd)驱动器指定一个BIOS驱动器号。比如：
                map --ram-drive=0xf0。默认的 (rd) 驱动器号是使用0x7F的软驱号。
                如果 (rd) 是硬盘驱动器镜像，你应该用大于或等于0x80的值来改变
                它的驱动器号。（但应防止使用0xffff，因为0xffff是预留给(md)设
                备的。）

        The notation (rd)+1 always represents the file which contains
        all the bytes stored in (rd).
                (rd)+1这个标志始终代表文件，它包含存储在(rd)中的所有字节。

Update 9:	Directly boot NTLDR of WinNT/2K/XP and IO.SYS of Win9x/ME and
        KERNEL.SYS of FreeDOS. Examples:
更新 9：        直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及
        FreeDOS 的 KERNEL.SYS. 例如：

            chainloader --edx=0xPPYY (hd0,0)/ntldr
            boot

            chainloader --edx=0xYY (hd0,0)/io.sys
            boot

            chainloader --ebx=0xYY (hd0,0)/kernel.sys
            boot

        Hex YY specifies the boot drive number, and hex PP specifies
        the boot partition number of NTLDR. If the boot drive is
        floppy, PP should be the hex value ff, i.e., decimal 255.
                十六进制的YY 指定了启动驱动器号，十六进制的PP指定了 NTLDR 的
                启动分区号。如果启动驱动器是软驱，PP应该是一个十六进制的值ff,
                即十进制的255.

        For KERNEL.SYS of FreeDOS, the --edx won't work,
        use --ebx please.
                对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行，请使用--ebx 。

        The option --edx ( --ebx ) can be omitted if the file is in
        its normal place. But in some cases, those options are needed.
                当文件位于它们平常的位置时，选项 --edx (--ebx)可以省略。但某些
                情况下，这些选项是必需的。

        If, e.g., the ntldr file is in an ext2 partition called
        (hd2,8) while you want it to think of the Windows partition
        (hd0,7) as the boot partition, then --edx is required:
                例如，假设被调用的ntldr文件在ext2分区(hd2,8)中，而你又希望它认
                为(hd0,7)的 windows 分区是启动分区，那么--edx就是必需的：

            chainloader --edx=0x0780 (hd2,8)/ntldr

        For DOS kernels(i.e., IO.SYS and KERNEL.SYS), the boot
        partition number is meaningless, so you only need to specify
        the correct boot drive number YY(but specifying the boot
        partition number is harmless).
                对于DOS核心（即，IO.SYS和KERNEL.SYS）,启动分区号是没有意义的，
                因此你只需指定恰当的启动驱动器号YY（不过指定了启动分区号也是
                无害的）。

        The above PPYY can also be specified by using a root or
        rootnoverify command after the chainloader command. Examples:
                上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命
                令来指定。例如：

            chainloader (hd2,6)/kernel.sys
            rootnoverify (hd0)	<-------- YY=80
            boot

            chainloader (hd0,0)/ntldr
            rootnoverify (hd0,5)	<-------- YY=80, PP=05
            boot

        Tip: CMLDR (the ComMand LoaDeR, which is used to load the
        Windows Fault Recovery Console) can be chainloaded as well
        as NTLDR.
                提示：CMLDR （the ComMan LoaDeR,它被用于加载Windows的故障
                恢复控制台）可以像NTLDR一样被良好的加载。

        Bean has successfully decompressed and booted IO.SYS of WinME.
        Thanks for the great job!
                Bean 先生成功地解压和启动了WinME的IO.SYS，感谢这个出色的工作。

Update 10:	isolinux.bin (version 3.73) can be chainloaded as with build
        2009-02-09.
更新 10：       isolinux.bin (版本 3.73) 可以被自2009-02-09 起建立的版本加载。

            chainloader (cd)/isolinux.bin

        isolinux.bin must reside in a real or virtual cdrom.
                isolinux.bin必须是存在于在真实或虚拟的光驱之中的。

Update 11:	stage2 of Grub Legacy can be chainloaded in this way:
更新 11：       Grub 传统版的 stage2 文件可以通过下面的方法加载：

            chainloader --force --load-segment=0 --load-offset=0x8000 --boot-cs=0 --boot-ip=0x8200 (...)/.../stage2

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

    There is no full documentation in English at present. Here are some
    examples showing the usage of disk emulation commands:
        由于目前还没有完整的英文文档。这里用一些示例来演示磁盘仿真命令的用法：

1.	Emulates HD partition C: as floppy drive A: and boot win98 from C:
        仿真硬盘分区C:为软驱A:并从C:中启动win98：

        map --read-only (hd0,0)+1 (fd0)
        chainloader (hd0,0)+1
        rootnoverify (hd0)
        boot

    In the above example, (hd0,0) is drive C: with win98 on it. After win98
    boot complete, you will find that A: contains all files of C:, and if
    you delete files in A:, the files in C: will also disappear.
        在上面的示例中，(hd0,0)是一个装有win98的C:盘 。当win98启动完成后，你会发
        现A:中包含了C:的所有文件，而且如果你删除A:中的文件，C:上的相应文件也会消
        失。

    At the map command line, the notation (hdm,n)+1 is interpreted to
    represent the whole partition (hdm,n), not just the first sector of the
    partition.
        在map命令行中，(hdm,n)+1式的写法被解释成代表整个(hdm,n)分区，而不仅仅是
        此分区的第一扇区。

2.	Emulates HD partition C: as floppy drive A: and boot win98 from A:
        将硬盘分区C:仿真为软驱A:并从A:中启动win98：

        map --read-only (hd0,0)+1 (fd0)
        map --hook
        chainloader (fd0)+1
        rootnoverify (fd0)
        map --floppies=1
        boot

    After the "map --hook" command, the emulation takes effect instantly
    even in the GRUB command line.
        在“map --hook”命令之后，仿真立即生效，即使是在GRUB的命令行模式中。

    Note that the (fd0) in "chainloader (fd0)+1" is the emulated virtual
    floppy A:, not the real floppy diskette(because map is hooked now).
        注意“chainloader (fd0)+1” 中的(fd0)是仿真后的虚拟软驱 A：，而不是真
        实的软盘（因为映射现在已经被挂载了）。

3.	Emulates an image file as floppy drive A: and boot win98 from C
        仿真镜像文件为软驱A:并从C:盘中启动win98:

        map --read-only (hd0,0)/floppy.img (fd0)
        chainloader (hd0,0)+1
        rootnoverify (hd0)
        map --floppies=1
        map --harddrives=1
        boot

4.	Emulates an HD partition as the first hard disk and boot DOS from it:
        仿真硬盘分区为第一硬盘并从中启动DOS:

        map --read-only (hd2,6)+1 (hd0)
        map --hook
        chainloader (hd0,0)+1
        rootnoverify (hd0)
        map --harddrives=1
        boot

    In this example, (hd2,6)+1 represents an extended logical DOS partition
    of the third BIOS hard disk (hd2).
        在这个示例中，(hd2,6)+1代表BIOS序号为3的(hd2)硬盘中的，扩展的DOS逻辑分区。

    If a DOS partition is used to emulate a hard disk, GRUB for DOS will
    first try to locate the partition table, usually 63 sectors ahead of
    the DOS partition. GRUB for DOS will refuse the emulation if the
    partition table is not there.
        如果一个DOS分区被仿真为一个硬盘，GRUB for DOS将首先定位分区表，通常，
        是在DOS分区的开头63个扇区中。如果那里没有分区表，GRUB for DOS将拒绝仿真。

5.	Emulates an image file as the first hard disk and boot DOS from it:
        仿真一个镜像文件为第一硬盘然后从中启动DOS:

        map --read-only (hd0,0)/harddisk.img (hd0)
        chainloader --load-length=512 (hd0,0)/harddisk.img
        rootnoverify (hd0)
        map --harddrives=1
        boot

    If an image file is used to emulate a hard disk, the image file must
    contain an MBR. In other word, the first sector of HARDDISK.IMG must
    contain the partition table of the emulated virtual hard disk.
        如果一个镜像文件被仿真为硬盘，此镜像文件必须包含MBR。也就是说，
        HARDDISK.IMG的第一扇区必须包含被仿真的虚拟硬盘的分区表。

Note:	Counters for floppies and harddrives in the BIOS Data Area remain
    unchanged during the mapping. You should manually set them to proper
    values with `map --floppies=' and/or `map --harddrives=', especially,
    e.g., when there is no real floppy drive attached to the mother board.
    If not doing so, DOS might fail to start.
注意：  BIOS数据区中的软盘和硬盘的总数在映射期间没有被改变。当主板上没有配置真
        实的软驱时，你通常应该专门使用诸如‘map --floppioes=’以及
       ‘ map --harddrives=’来设置它们。如果不这样做，DOS可能会启动失败。

    `map --status' can report the values. Note also that `map --floppies='
    and `map --harddrives=' can be used independently without the
    appearance of mappings.
        ‘map --status’可以报告出一些有价值的东西。同时要注意‘map --floppies=’
        和‘map --harddrives=’需要在没有执行映射前单独使用。

    0.4.2 has introduced a new variable, memdisk_raw, to simulate the
    memdisk-like raw mode. If the BIOS has no int15/87h, or if it has
    buggy int15/87h support, you should set this variable before any
    memdrives are used. Here is an example:
        版本0.4.2引入了一个新参数，memdisk_raw,用以模拟和内存驱动器类似的原生模式。
        如果BIOS不支持中断int15/87h,或者int18/87h的支持有缺陷，你应该在任何内
        存盘被使用前设置这个变量。这里是一个示例：

        map --memdisk-raw=1
        map --mem (hd0,0)/floppy.img (fd0)
        map --hook
        chainloader (fd0)+1
        rootnoverify (fd0)
        boot

    If you encountered a memdrive failure without using
    map --memdisk-raw=1, you should have a try with `map --memdisk-raw=1'.
        如果你碰到内存驱动器故障而又没有使用map --memdisk-raw=1时,你应当用
        ‘map --memdisk-raw=1’来尝试一次。

    If you `map --memdisk-raw=0' later, you should afterwards do a
    `map --unhook'(and followed by a `map --hook' if needed).
        你一执行‘map --memdisk-raw=0’之后，就应该执行一次‘map --unhook’
        （如果需要的话在这之后再执行‘map --hook’）。

    Update: memdisk_raw now defaults to 1. You should `map --memdisk-raw=0'
    if you want to use int15/87h to access memdrives.
        更新：memdisk_raw 现在默认值为1 。如果你希望使用中断int15/87h来访问内存
        驱动器，你应当令‘map --memdisk-raw=0 ’。

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

    Floppies/harddisks of any size can be emulated with GRUB for DOS 0.2.0.

    Image file must be contiguous, or else GRUB for DOS will refuse it.

    The `blocklist' command can list fragments or pieces of a file.

    Type "help map" at the GRUB prompt to get a brief description of the
    command.
        任意大小的软盘或硬盘可以被 GRUB for DOS 0.2.0 版仿真。
        镜像文件必须是连续的，否则GRUB for DOS 将拒绝执行。
       ‘blocklist’命令可以列举一个文件的碎片或者分块。
        在GRUB提示符下输入“help map”可以获得简要的命令说明。

    The form
        这样的形式

        map ... (fd?)

    is a floppy emulation, and the form
        是一个软盘仿真，而下面的形式

        map ... (hd?)

    is a hard disk emulation.
        是一个硬盘仿真。

    When a HARD DISK emulation is used, better not start Windows for
    security reasons. Windows may even destroy all data and all information
    on all your real hard disks!!!!!!!!
        使用硬盘仿真时，基于安全因素最好不要去启动Windows 。
        Windows甚至可能会破坏掉所有的数据和你硬盘上的所有资料!!!!!!!!

    Update for --mem: when --mem is used, it seems rather safe even after
    entering Windows. Win98 can operate the memdrive normally.
        关于--mem的更新 ：当使用--mem时，甚至是在进入Windows的时候，它看
        来都相当安全。Win98可以正常运行内存驱动器。

    Windows NT/2000/XP does not recognize the emulated drives no matter
    whether the --mem option is present.
        Windows NT/2000/XP不能识别仿真的驱动器，不管是否使用了--mem选项。

******************************************************************************
***   Explanation of the grldr-bootable floppies or harddisk partitions    ***
******************************************************************************
      grldr可启动的软盘或硬盘分区的说明

1. Ext2 Boot Sector/Boot Record Layout (for loading grldr)
1. Ext2 引导扇区/引导记录的布局 （用于载入grldr）

------------------------------------------------------------------------------
An EXT2/EXT3 volume can be GRUB-bootable. Copy grldr and an optional menu.lst
to the root dir of the EXT2/EXT3 volume, and build the boot sector based on the
fifth sector of grldr(some fields need to be changed as detailed in the
following table). And then the EXT2/EXT3 volume is GRUB-bootable.
一个EXT2/EXT3的卷可以是GRUB可启动的。复制grldr和可选的menu.lst文件到这个EXT2/EXT3
卷的根目录，并按照grldr的第五扇区建立它的引导扇区(一些需要更改的字段在下面的表
中做了详细注释)。那么，这个EXT2/EXT3的卷就是GRUB可启动的。

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the first sector of an EXT2/EXT3 volume.
更新:   bootlace.com是一个dos/linux下的工具，它可以把GRLDR的引导记录安装到一个
        EXT2/EXT3卷的第一扇区。

Offset	Length	Description
偏移    长度    说明
======	======	==============================================================
00h	2	Machine code for short jump over the data.
                近转移指令的机器码

02h	1	LBA indicator. Valid values are 0x02 for CHS mode, or 0x42 for
        LBA mode.
                LBA指示码。CHS模式时，有效值是0x02；LBA模式时有效值为0x42。

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x42.
                如果BIOS的int13支持LBA，此字节可以安全地设置为0x42。

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x42. It seems that
        (generally) all USB BIOSes have LBA support.
                某些 USB 设备的BIOS在使用CHS寻址模式时可能有缺陷，所以格式化程
                序应当设置这个字节为0X42 。似乎所有（多数）的USB BIOS都能支持LBA 。

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:
                如果格式化程序不知道BIOS是否具有LBA支持，它可以采用以下方法：

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x42,
        otherwise, set to 0x02.
                如果（分区的起始地址加上分区的总扇区）超过了CHS的寻址能力。
        （特别是当它大于1024*256*63时），调用程序应当设置此字节为0x42,
        否则，要设为0x02。

        Note that Windows98 uses the value 0x0e as the LBA indicator.
                注意 Windows98 使用0x0e作为LBA指示码。

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.
                更新：LBA指示码这个字节已被忽略。引导记录能够探测BIOS的LBA支持。

03h	10	OEM name string (of OS which formatted the disk).
        Update: this field is now used for error message of "I/O error"
                OEM 名称字符串（对该磁盘进行格式化的操作系统的名字）。
                更新：此字段现在被用于错误提示信息“I/O error”

0Dh	1	Sectors per block. Valid values are 2, 4, 8, 16 and 32.
                每块扇区数。有效值是2, 4, 8, 16 和 32。

0Eh	2	Bytes per block. Valid values are 0x400, 0x800, 0x1000, 0x2000
        and 0x4000.
                每块字节数。有效值是0x400, 0x800, 0x1000, 0x2000 和 0x4000。

10h	4	Pointers in pointers-per-block blocks, that is, number of
        blocks covered by a double-indirect block.
                在pointers-per-block块中的指针数，即一个二级间接块包含的块数。

        Valid values are 0x10000, 0x40000, 0x100000, 0x400000 and
        0x1000000.
                有效值是0x10000, 0x40000, 0x100000, 0x400000 和	0x1000000。

14h	4	Pointers per block, that is, number of blocks covered by an
        indirect block.
                每块指针数，即一个间接块包含的块数。

        Valid values are 0x100, 0x200, 0x400, 0x800, 0x1000.
                有效值是0x100, 0x200, 0x400, 0x800, 0x1000 。

18h	2	Sectors per track.
                每磁道的扇区数。

1Ah	2	Number of heads/sides.
                磁头数/面数

1Ch	4	Number of hidden sectors (those preceding the boot sector).
                隐藏扇区数（它们位于引导扇区之前）

        Also referred to as the starting sector of the partition.
                也被成为是分区的起始扇区。

        For floppies, it should be 0.
                对于软盘，它应当为0 。

20h	4	Total number of sectors in the filesystem(or in the partition).
                文件系统中的扇区总数（或者是分区的扇区总数）。

24h	1	BIOS drive number of the boot device.
                启动设备的 BIOS 驱动器号码。

        Actually this byte is ignored for read. The boot code will
        write DL onto this byte. The BIOS or the caller should set
        drive number in DL.
                实际此字节在读入时被忽略。引导代码将把DL的值写入到此字节中。
                BIOS或者调用程序应当在DL中设置磁盘号码。

        We assume all BIOSes pass correct drive number in DL.
        Buggy BIOSes are not supported!!
                我们假定所有的BIOS在DL中能传递正确的磁盘号码。
                糟糕的BIOS不被支持!!

25h	1	Partition number of this partition on the boot drive.
                此分区在启动驱动器上的分区号

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.
                0, 1, 2, 3 是主分区 。4, 5, 6, ... 等等是扩展分区中的逻辑分区。

        0xff is for whole drive. So for floppies, it should be 0xff.
                0xff代表整个磁盘。所以对于软盘，其分区号码应当是0xff 。

26h	2	inode size in bytes. (Notice! We use the formerly reserved
        word here for inode size!)
                字节计数的索引节点大小。（注意!我们在此处为索引节点大小使用
                了以前被保留的一个字，即两个字节）

28h	4	Number of inodes per group.
                每组的i节点数

        Normally a 1.44M floppy has only one group, and the total
        number of inodes is 184. So the value should be	184 or
        greater.
                通常，1.44M软盘只有一个组，并且总的i节点数是184。所以此值
                应为184或者更大。

2Ch	4	The block number for group descriptors.
                组描述符的块号码。

        Valid values are 2 for 1024-byte blocks, and 1 otherwise.
                对于1024字节的块有效值是2 ，否则是1 。

        The value here is equal to (s_first_data_block + 1).
                这里的值等于（s_first_data_block + 1）。

30h	1	code for "cld"(0xFC).
                指令“cld”（即0xFC）。

31h	2	code for "xor ax,ax"(0x31, 0xC0).
                指令“xor ax,ax”（即0x31,0xC0）

33h	1	code for "nop"(0x90) or "cwd"(0x99)
                指令“nop”（即0x90）或“cwd”（即0x99）

34h	458	The rest of the machine code.
                机器码部分。

1FEh	2	Boot Signature AA55h.
                引导签名AA55h 。

2. FAT12/FAT16 Boot Sector/Boot Record Layout (for loading grldr)
2. FAT12/FAT16 引导扇区/引导记录的布局 （用于载入grldr）

------------------------------------------------------------------------------
A FAT12/16 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the FAT12/16 volume, and build the boot sector based on the
fourth sector of grldr(some fields need to be changed as detailed in the
following table). And then the FAT12/16 volume is GRUB-bootable.
一个FAT12/16的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT12/16 卷
的根目录，并按照grldr的第四扇区建立它的引导扇区（一些需要更改的字段在下面的表中
做了详细注释）。然后这个FAT12/16的卷就是GRUB可启动的。

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the boot sector of an FAT12/16 volume.
更新:   bootlace.com 是一个dos/linux下的工具，而它能把GRLDR的引导记录安装到一个
        FAT12/16卷的引导扇区。

Offset	Length	Description
偏移    长度    说明

======	======	==============================================================
00h	2	Machine code for short jump over the data.
                近转移指令的机器码

02h	1	LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
        LBA mode.
                LBA指示码。CHS模式时，有效值为0x90；LBA模式时，有效值为0x0e 。

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x0e.
                如果BIOS int13支持LBA，此字节可以安全地设置为0x0e 。

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x0e. It seems that
        (generally) all USB BIOSes have LBA support.
                某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷，所以格式化程序
                应当设置这个字节为0X0e 。似乎所有的（多数）USB BIOS都能支持 LBA 。

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:
                如果格式化程序不知道BIOS是否具有LBA支持，它可以采用以下方法：

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x0e,
        otherwise, set to 0x90.
                如果（分区的起始地址加上分区的总扇区）超过了CHS 的寻址能力。
        （特别是当它大于1024*256*63），调用程序应当设置此字节为0x0e,
        否则，要设为0x90。

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.
                更新：LBA 指示码这个字节已被忽略。引导记录能探测BIOS的LBA支持。

        Update(2006-07-31): Though GRLDR won't use this LBA-indicator
        byte, Windows 98 uses it. Usually this byte should be 0x90 for
        CHS mode(especially for floppies). If this byte is not set
        properly, Windows 98 will not recognize the floppy or
        partition. This problem was reported by neiljoy. Many thanks!
                更新 （2006-07-31）：尽管GRLDR不再使用LBA指示码这个字节，
                但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
               （软盘尤其如此）。如果此字节未被正确设置，Windows 98将不能识别
                软盘或分区。这一问题由neiljoy先生报告。非常感谢!

03h	8	OEM name string (of OS which formatted the disk).
                OEM名称字符串 （对该磁盘进行格式化的操作系统的名称）

0Bh	2	Bytes per sector. Must be 512.
                每扇区字节数。必须为512 。

0Dh	1	Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
        and 128. But a cluster size larger than 32K should not occur.
                每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64和128 。但是簇大小
        大于32K的情况不应发生。

0Eh	2	Reserved sectors(number of sectors before the first FAT,
        including the boot sector), usually 1.
                保留的扇区数（第一文件分配表之前的扇区数，包括引导扇区），通常是1。

10h	1	Number of FATs(nearly always 2).
                文件分配表数（几乎总是2）。

11h	2	Maximum number of root directory entries.
                根目录项的最大个数。

13h	2	Total number of sectors (for small disks only, if the disk is
        too big this is set to 0 and offset 20h is used instead).
                扇区总数（仅用于小磁盘，如果磁盘太大此处被设置为0，而偏移 20h 处
        则替代它使用）。

15h	1	Media descriptor byte, pretty meaningless now (see below).
                媒体描述符字节，现在该此节已经没有太大意义了（参见后面）。

16h	2	Sectors per FAT.
                每个文件分配表的扇区数。

18h	2	Sectors per track.
                每个磁道的扇区数

1Ah	2	Total number of heads/sides.
                磁头或面的总数。

1Ch	4	Number of hidden sectors (those preceding the boot sector).
                隐藏扇区数（位于引导扇区之前）。

        Also referred to as the starting sector of the partition.
                也被称为是分区的开始扇区。

        For floppies, it should be 0.
                对于软盘，它应当为0 。

20h	4	Total number of sectors for large disks.
                大磁盘的扇区总数。

24h	1	BIOS drive number of the boot device.
                引导设备的BIOS磁盘号。

        Actually this byte is ignored for read. The boot code will
        write DL onto this byte. The BIOS or the caller should set
        drive number in DL.
                实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
                BIOS或者调用程序应当在DL中设置磁盘号码。

        We assume all BIOSes pass correct drive number in DL.
        Buggy BIOSes are not supported!!
                我们假定所有的BIOS在DL中能传递正确的磁盘号码。
                糟糕的BIOS不被支持!!

25h	1	Partition number of this filesystem in the boot drive.
                启动驱动器上此文件系统的分区号码。

        This byte is ignored for read. The boot code will write
        partition number onto this byte. See offset 41h below.
                此字节在读入时被忽略。引导代码将分区号码写到此字节。
        见下述偏移41h 。

26h	1	Signature (must be 28h or 29h to be recognised by NT).
                签名（必须是28h或者29h以便能被 NT 识别）

27h	4	Volume serial number.
                卷的序列号。

2Bh	11	Volume label.
                卷标签。

36h	8	File system ID. "FAT12   ", "FAT16   " or "FAT     ".
                文件系统ID。“FAT12”, “FAT16”或 “FAT”。

3Eh	1	code for "cli".
                指令“cli”。

3Fh	1	code for "cld".
                指令“cld”。

40h	1	code for "mov dh, imm8".
                指令“mov dh, imm8”。

41h	1	Partition number of this partition on the boot drive.
                此分区在启动驱动器的分区号。

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.
                0, 1, 2, 3 是主分区。4, 5, 6, ... 等等是扩展分区中的逻辑分区。

        0xff is for whole drive. So for floppies, it should be 0xff.
                0xff代表整个磁盘。所以对于软盘，其分区号码应当是0xff 。

42h	442	The rest of the machine code.
                机器码部分。

1FCh	4	Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
                引导签名AA550000h 。（Win9x 使用4字节作为魔数值。）

3. FAT32 Boot Sector/Boot Record Layout (for loading grldr)
3. FAT32 引导扇区/引导记录的布局 （用于载入grldr）

------------------------------------------------------------------------------
A FAT32 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the FAT32 volume, and build the boot sector based on the
third sector of grldr(some fields need to be changed as detailed in the
following table). And then the FAT32 volume is GRUB-bootable.
一个FAT32的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT32卷的根
目录，并按照grldr的第三扇区建立它的引导扇区(一些需要更改的字段在下面的表中
做了详细注释)。然后这个FAT32的卷就是GRUB可启动的。

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the boot sector of an FAT32 volume.
更新:   bootlace.com 是一个dos及linux下的工具而它能把 GRLDR 的引导记录安装
        到一个FAT32卷的引导扇区。

Offset	Length	Description
偏移    长度    说明

======	======	==============================================================
00h	2	Machine code for short jump over the data.
                近转移指令的机器码。

02h	1	LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
        LBA mode.
                LBA指示码。CHS模式时，有效值为0x90,而LBA模式时，有效值为0x0e。

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x0e.
                如果BIOS的int13支持LBA，此字节可以安全地设置为0x0e。

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x0e. It seems that
        (generally) all USB BIOSes have LBA support.
                某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷，所以格式化程
                序应当设置这个字节为0X0e。似乎所有（多数）的USB BIOS都能支持LBA 。

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:
                如果格式化程序不知道BIOS是否具有LBA支持，它可以采用以下方法：

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x0e,
        otherwise, set to 0x90.
                如果（分区的起始地址加上分区的总扇区）超过了CHS 的寻址能力。
           （特别是当它大于1024*256*63），调用程序应当设置此字节为0x0e,
        否则，要设为0x90。

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.
                更新: LBA 指示码这个字节已被忽略。引导记录能探测BIO的LBA支持。

        Update(2006-07-31): Though GRLDR won't use this LBA-indicator
        byte, Windows 98 uses it. Usually this byte should be 0x90 for
        CHS mode(especially for floppies). If this byte is not set
        properly, Windows 98 will not recognize the floppy or
        partition. This problem was reported by neiljoy. Many thanks!
                更新 （2006-07-31）：尽管GRLDR不再使用 LBA 指示码这个字节，
                但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
               （软盘尤其如此）。如果此字节未被正确设置，Windows 98 将不能识别
                软盘或分区。这一问题由neiljoy先生报告。非常感谢!

03h	8	OEM name string (of OS which formatted the disk).
                OEM名称字符串 （对该磁盘进行格式化的操作系统的名称）

0Bh	2	Bytes per sector. Must be 512.
                每扇区字节数。必须为512 。

0Dh	1	Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
        and 128. But a cluster size larger than 32K should not occur.
                每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
                但是簇大小大于32K的情况不应发生。

0Eh	2	Reserved sectors(number of sectors before the first FAT,
        including the boot sector), usually 1.
                保留的扇区数（第一文件分配表之前的扇区数，包括引导扇区），
                通常是1 。

10h	1	Number of FATs(nearly always 2).
                文件分配表数（几乎总是2）。

11h	2	(Maximum number of root directory entries)Must be 0.
               （根目录项的最大个数）必须为0 。

13h	2	(Total number of sectors for small disks only)Must be 0.
               （仅用于小磁盘的扇区总数）必须为0 。

15h	1	Media descriptor byte, pretty meaningless now (see below).
                媒体描述符字节，现在该此节已经没有太大意义了（参见后面）。

16h	2	(Sectors per FAT)Must be 0.
               （每个文件分配表的扇区数）必须为0 。

18h	2	Sectors per track.
                每个磁道的扇区数

1Ah	2	Total number of heads/sides.
                磁头或面的总数。

1Ch	4	Number of hidden sectors (those preceding the boot sector).
                隐藏扇区数（它们位于引导扇区之前）。

        Also referred to as the starting sector of the partition.
                也被称作是分区的起始扇区。

        For floppies, it should be 0.
                对于软盘，它应当为0 。

20h	4	Total number of sectors for large disks.
                大磁盘的扇区总数。

24h	4	FAT32 sectors per FAT.
                每个文件分配表的 FAT32 扇区数。

28h	2	If bit 7 is clear then all FATs are updated, otherwise bits
        0-3 give the current active FAT, all other bits are reserved.
                如果第7位被清零，所有文件分配表将被更新，否则0-3位给出当前活
                动的文件分配表，所有其它位被保留。

2Ah	2	High byte is major revision number, low byte is minor revision
        number, currently both are 0.
                高字节是主修订号码，低字节是小修订号码，现在都是0 。

2Ch	4	Root directory starting cluster.
                根目录起始簇。

30h	2	File system information sector.
                文件系统信息扇区。

32h	2	If non-zero this gives the sector which holds a copy of the
        boot record, usually 6.
                如果非零它给出具有引导记录的备份扇区，通常是6。

34h	12	Reserved, set to 0.
                保留，设为0 。

40h	1	BIOS drive number of the boot device.
                启动设备的 BIOS 驱动器号码。

        80h is first HDD, 00h is first FDD.
                第一硬盘是80h，第一软盘是00h。

        Actually this byte is ignored for read. The boot code will
        write DL onto this byte. The BIOS or the caller should set
        drive number in DL.
                实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
                BIOS或者调用程序应当在DL中设置磁盘号码。

        We assume all BIOSes pass correct drive number in DL.
        Buggy BIOSes are not supported!!
                我们假定所有的 BIOS 在DL中能传递正确的磁盘号码。
                糟糕的BIOS不被支持!!

41h	1	Partition number of this filesystem in the boot drive.
                启动驱动器上此文件系统的分区号码。

        This byte is ignored for read. The boot code will write
        partition number onto this byte. See offset 5Dh below.
                此字节在读入时被忽略。引导代码将分区号码写到此字节。
        见下述的偏移5Dh 。

42h	1	Signature (must be 28h or 29h to be recognised by NT).
                签名（必须是 28h 或者 29h 以便能被 NT 识别）

43h	4	Volume serial number.
                卷的序列号。

47h	11	Volume label.
                卷标签。

52h	8	File system ID. "FAT32   ".
                文件系统标识。“FAT32 ”。

5Ah	1	opcode for "cli".
                指令 “cli”。

5Bh	1	opcode for "cld".
                指令 “cld” 。

5Ch	1	opcode for "mov dh, imm8".
                指令 “mov dh, imm8”。

5Dh	1	Partition number of this partition on the boot drive.
                此分区在启动驱动器上的分区号。

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.
                0, 1, 2, 3 是主分区。4, 5, 6, ...等等是扩展分区中的逻辑分区。

        0xff is for whole drive. So for floppies, it should be 0xff.
                0xff 代表整个磁盘。所以对于软盘，其分区号码应当是0xff 。

5Eh	414	The rest of the machine code.
                机器码部分。

1FCh	4	Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
                引导签名AA550000h 。（Win9x 使用4字节作为魔数值。）

4. NTFS Boot Sector/Boot Record Layout (for loading grldr)
   NTFS 引导扇区/引导记录的布局 （用于载入grldr）

------------------------------------------------------------------------------
An NTFS volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
the root dir of the NTFS volume, and build the boot sector based on the
6th-9th sectors of grldr(some fields need to be changed as detailed in the
following table). And then the NTFS volume is GRUB-bootable.
一个FAT32的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT32卷的根
目录，并按照grldr的第6至9扇区建立它的引导扇区（一些需要更改的字段在下面的表
中做了详细注释)。然后这个FAT32的卷就是GRUB可启动的。

Update:	bootlace.com is a DOS/Linux utility that can install the GRLDR boot
record onto the leading 4 sectors of an NTFS volume.
更新:   bootlace.com是一个在dos/linux下的工具，而它能把GRLDR的引导记录安装到
        一个NTFS卷的开头4个扇区。

Offset	Length	Description
偏移    长度    说明

======	======	==============================================================
00h	2	Machine code for short jump over the data.
                近转移指令的机器码。

02h	1	LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
        LBA mode.
                LBA指示码。CHS模式时,有效值为0x90；LAB模式时，有效值为0x0e。

        If the BIOS int13 supports LBA, this byte can be safely set to
        0x0e.
                如果BIOS的int13支持LBA，此字节可以安全地设置为0x0e 。

        Some USB BIOSes might have bugs when using CHS mode, so the
        format program should set this byte to 0x0e. It seems that
        (generally) all USB BIOSes have LBA support.
                某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷，所以格式化程
                序应当设置这个字节为0X0e 。似乎所有（多数）的USB BIOS 都能支持LBA。

        If the format program does not know whether the BIOS has LBA
        support, it may operate this way:
                如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法：

        if (partition_start + total_sectors_in_partition) exceeds the
        CHS addressing ability(especially when it is greater than
        1024*256*63), the caller should set this byte to 0x0e,
        otherwise, set to 0x90.
                如果（分区的起始地址加上分区的总扇区）超过了CHS 的寻址能力。
           （特别是当它大于1024*256*63），调用程序应当设置此字节为0x0e,
        否则，要设为0x90。

        Update: this byte of LBA indicator is ignored. The boot
        record can probe the LBA support of BIOS.
                更新: LBA 指示码这个字节已被忽略。引导记录能探测BIOS的LBA支持。

        Update(2006-07-31): Though GRLDR won't use this LBA-indicator
        byte, Windows 98 uses it. Usually this byte should be 0x90 for
        CHS mode(especially for floppies). If this byte is not set
        properly, Windows 98 will not recognize the floppy or
        partition. This problem was reported by neiljoy. Many thanks!
                更新 （2006-07-31）：尽管GRLDR不再使用 LBA 指示码这个字节，但
                Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
               （软盘尤其如此）。如果此字节未被正确设置，Windows 98 将不能识别
                软盘或分区。这一问题由neiljoy先生报告。非常感谢!

03h	8	OEM name string (of OS which formatted the disk).
                OEM名称字符串 （对该磁盘进行格式化的操作系统的名称）

0Bh	2	Bytes per sector. Must be 512.
                每扇区字节数。必须为512 。

0Dh	1	Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
        and 128. But a cluster size larger than 32K should not occur.
                每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
                但是簇大小大于32K的情况不应发生。

0Eh	2	(Reserved sectors)Unused.
               （保留的扇区数）未被使用。

10h	1	(Number of FATs)Must be 0.
               （文件分配表数）必须为 0 。

11h	2	(Maximum number of root directory entries)Must be 0.
               （根目录项的最大个数）必须为0 。

13h	2	(Total number of sectors for small disks only)Must be 0.
               （仅用于小磁盘的扇区总数）必须为0 。

15h	1	Media descriptor byte, pretty meaningless now (see below).
                媒体描述符字节，现在该此节已经没有太大意义了（参见后面）。

16h	2	(Sectors per FAT)Must be 0.
               （每个文件分配表的扇区数）必须为0 。

18h	2	Sectors per track.
                每个磁道的扇区数。

1Ah	2	Total number of heads/sides.
                磁头/面的总数。

1Ch	4	Number of hidden sectors (those preceding the boot sector).
                隐藏扇区数（它们位于引导扇区之前）。

        Also referred to as the starting sector of the partition.
                也被称作是分区的起始扇区。

        For floppies, it should be 0.
                对于软盘，它应当为0 。

20h	4	(Total number of sectors for large disks)Must be 0.
               （大磁盘的扇区总数）必须为 0 。

24h	4	(FAT32 sectors per FAT) - Usually 80 00 80 00, A value of
        80 00 00 00 has been seen on a USB thumb drive which is
        formatted with NTFS under Windows XP. Note this is removable
        media and is not partitioned, the drive as a whole is NTFS
        formatted.
               （每个文件分配表的 FAT32 扇区数）- 通常是 80 00 80 00 ，值
                为80 00 00 00将被看作是由Windows XP格式化为NTFS的USB拇指碟

28h	8	Number of sectors in the volume.
                此卷的扇区号。

30h	8	LCN of VCN 0 of the $MFT.
                $MFT的逻辑簇号。

38h	8	LCN of VCN 0 of the $MFTMirr.
                $MFTMirr的逻辑簇号。

40h	4	Clusters per MFT Record.
                每个MFT记录的簇数。

44h	4	Clusters per Index Record.
                每个索引的簇数。

48h	8	Volume serial number.
                卷序列号

50h	4	Checksum, usually 0.
                校验和，通常为 0 。

54h	1	opcode for "cli".
                指令 “cli”。

55h	1	opcode for "cld".
                指令 “cld”。

56h	1	opcode for "mov dh, imm8".
                指令 “mov dh, imm8”。

57h	1	Partition number of this partition on the boot drive.
                此分区在启动驱动器上的分区号。

        0, 1, 2, 3 are primary partitions.
        4, 5, 6, ... are logical partitions in the extended partition.
                0, 1, 2, 3 是主分区。4, 5, 6, ...等等是扩展分区中的逻辑分区。

        0xff is for whole drive. So for floppies, it should be 0xff.
                0xff 代表整个磁盘。所以对于软盘，其分区号码应当是0xff 。

58h	420	The rest of the machine code in the first sector.
                机器码部分。

1FCh	4	Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
                引导签名AA550000h 。（Win9x 使用4字节作为魔数值。）

200h	1536	The rest of the machine code in the last 3 sectors.
                末尾 3 个扇区为机器码部分。

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

Appendix A: File System Information Sector of FAT32(not used by grldr)
附录A：FAT32 的文件系统信息扇区（不用于引导grldr）

Offset	Length	Description
偏移    长度    说明
======	======	==============================================================
0h	4	Leading Signature 41615252h.
                起始处签名 41615252h 。

4h	480	Reserved, set to 0.
                被保留,设为 0 。

1E4h	4	FSI structure signature 61417272h.
                故障征兆指数结构签名 61417272h

1E8h	4	Contains the last known count of free clusters, if this is
        equal to FFFFFFFFh, then the count is unknown.
                最后已知的空闲簇数，如果它等于FFFFFFFFh，簇数是未知的。

1ECh	4	Cluster number at which you should begin a search for a free
        cluster, if this is equal to FFFFFFFFh then the field has not
        been set.
                假如它等于FFFFFFFFh的话，你应当去寻找一个空闲簇的簇号码 。
        此字段没有被设置。

1F0h	12	Reserved, set to 0.
                被保留,设为 0 。

1FCh	4	Trailing Signature AA550000h.
                结尾签名AA550000h 。

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

Appendix B: Media Descriptor Byte(not used by grldr)
附录B：媒体描述字节（非用于grldr）

The Media descriptor byte is meaningless because of the duplications, F0h for
example.
此媒体描述字节没有意义，因为有些字节具有多重意义，例如 F0h 。

Byte	Type of disk	Sectors	Heads	Tracks	Capacity
字节    磁盘种类        扇区    头      磁道    容量
----	------------	-------	-----	------	--------
FFh	5 1/4"		8	2	40	320KB
FEh	5 1/4"		8	1	40	160KB
FDh	5 1/4"		9	2	40	360KB
FCh	5 1/4"		9	1	40	180KB
FBh	both		9	2	80	640KB
FAh	both		9	1	80	320KB
F9h	5 1/4"		15	2	80	1200KB
F9h	3 1/2"		9	2	80	720KB
F0h	3 1/2"		18 	2	80	1440KB
F0h	3 1/2"		36 	2	80	2880KB
F8h	hard disk	NA	NA	NA	NA

******************************************************************************
***   grldr.mbr - How to write it to Master Boot Track of the hard disk    ***
******************************************************************************
      grldr.mbr - 怎样将grldr.mbr写到硬盘的主引导磁道

grldr.mbr contains code that can be used as Master Boot Record. The code is
responsible for searching all partitions for grldr and when found, loading it.
Currently supported partition types are: FAT12/FAT16/FAT32, NTFS, EXT2/EXT3.
Logical partitions in the extended partition are supported, provided that the
extended partition type is Microsoft-compatible. In fact, the Linux extended
partition type(0x85) is not fully tested for the search mechanism.
  grldr.mbr包含能够用作主引导记录的代码。此代码负责搜索所有分区的grldr，并且在发现
  它后装载它。现在被支持的分区种类是：FAT12/FAT16/FAT32,NTFS,EXT2/EXT3。在扩展分区
  上的逻辑分区也被支持，条件是此扩展分区与微软兼容。实际上，搜索机制没有充分地测试
  分区类型（0x85 ）的Linux 的扩展分区。

How to write GRLDR.MBR to the Master Boot Track of a hard disk?
怎样将 GRLDR.MBR 写到硬盘的主引导磁道？

First, read the Windows disk signature and partition information bytes
(72 bytes in total, from offset 0x01b8 to 0x01ff of the MBR sector), and put
them on the same range from offset 0x01b8 to 0x01ff of the beginning sector of
GRLDR.MBR.
  首先，读入 Windows 磁盘签名及分区信息字节（总共72字节，从主引导记录的偏移
  0x01b8到0x01ff处），并且放置到GRLDR.MBR的开始扇区的相同范围的偏移0x01b8
  到0x01ff处。

Optionally, if the MBR in the hard disk is a single sector MBR created by
Microsoft FDISK, it may be copied onto the second sector of GRLDR.MBR.
  可以选择的是，如果硬盘上的主引导记录是由微软的FDISK产生的单一的扇区主引导记录，
  它可以被复制到GRLDR.MBR的第二扇区。

The second sector of GRLDR.MBR is called "previous MBR". When GRLDR not found,
"previous MBR" will be started.
  GRLDR.MBR的第二扇区叫作“原先的主引导记录”。当找不到GRLDR后，将从“原先的主引
  导记录”开始引导。

No other steps needed, after all necessary changes stated above have been made,
now simply write GRLDR.MBR on to the Master Boot Track. That's all.
  不需要其它的步骤，当所有的上述的必要的改变已经完成后，现在只要将GRLDR.MBR写到
  主引导磁道。这就全部完成了。

Note: The Master Boot Track means the first track of the hard drive.
注意：主引导磁道表示的是硬盘的第一条磁道。

Note: The bootstrap code of GRLDR.MBR only finds GRLDR file in the root dir of
a partition. You'd better place menu.lst file accompanying with GRLDR(i.e., in
the same root dir of the same partition as GRLDR).
注意：GRLDR.MBR 的自举代码只在分区的根目录寻找GRLDR。你最好把menu.lst文件和GRLDR
放置在一起。（就是说，放在和 GRLDR 相同分区的相同根目录下。）

The filename "grldr" in an ext2 partition must be in lower case letters, and
the file type of grldr must be plain regular. Other types, e.g., a symbolic
link, won't work.
“grldr” 文件名在ext2分区中必须是小写字母，而且grldr的文件种类必须是纯普通文件。
其它种类，例如，符号链接文件是不行的。

Update:	bootlace.com is a DOS/Linux utility for installing grldr.mbr to MBR.
The whole grldr.mbr is embedded in the body of the bootlace.com utility, so
bootlace.com can be used independently. See below.
  更新： bootlace.com 是一个在 DOS/LINUX 下的能把 grldr.mbr 安装到主引导记录
  的工具。整个grldr.mbr被嵌入到bootlace.com工具内部，因此 bootlace.com可以独
  立使用。参见后面。

******************************************************************************
***               grldr.mbr - Details about the control bytes              ***
******************************************************************************
                  grldr.mbr - 其控制字节的详述

Six bytes can be used to control the boot process of GRLDR.MBR.
有六个字节可以控制GRLDR.MBR引导过程。

Offset	Length	Description
偏移量  长度    说明

======	======	==============================================================
02h	1	bit0=1: disable the search for GRLDR on floppy
        bit0=0: enable the search for GRLDR on floppy
                  第 0 位＝1 ：允许搜索软盘上的GRLDR 。
                  第 0 位＝0 ：禁止搜索软盘上的GRLDR 。

        bit1=1: disable the boot of PREVIOUS MBR with invalid
            partition table(usually an OS boot sector)
        bit1=0: enable the boot of PREVIOUS MBR with invalid
            partition table(usually an OS boot sector)
                  第 1 位＝1 ：禁止引导分区表无效的原主引导记录
                            （通常是一个操作系统的引导扇区）
                  第 1 位＝0 ：允许引导分区表无效的原主引导记录
                            （通常是一个操作系统的引导扇区）

        bit2=1: disable the feature of unconditional entrance to
            the command-line(See below `--duce')
        bit2=0: enable the feature of unconditional entrance to
            the command-line(See below `--duce')
                  第 2 位 = 1 ：禁止无条件进入命令行 （见下面的`--duce'）
                  第 2 位 = 0 ：允许无条件进入命令行（见下面的`--duce'）

        bit3=1: disable geometry tune(See below `--chs-no-tune')
        bit3=0: enable geometry tune(See below `--chs-no-tune')
                  第 3 位= 1 ：禁止改变磁盘几何参数（见下面的 `--chs-no-tune'）
                  第 3 位= 0 ：允许改变磁盘几何参数（见下面的 `--chs-no-tune'）

        bit4 - bit6: reserved
                  第 4 位到第 6 位：被保留

        bit7=1: try to boot PREVIOUS MBR after the search for GRLDR
        bit7=0: try to boot PREVIOUS MBR before the search for GRLDR
                  第 7 位=1：在搜索 GRLDR 之后尝试引导原先的主引导记录
          第 7 位=0：在搜索 GRLDR 之前尝试引导原先的主引导记录

03h	1	timeout in seconds to wait for a key press. 0xff stands for
        waiting all the time(endless).
                等待键被按下时的暂停秒数。0xff代表始终暂停（即无休止的）。

04h	2	hot-key code. high byte is scan code, low byte is ASCII code.
        the default value is 0x3920, which stands for the space bar.
        if this key is pressed, GRUB will be started prior to the boot
        of previous MBR. See "int 16 keyboard scan codes" below.
                热键代码。高字节是扫描码，低字节是ASCII码。默认值是0x3920，代
                表的是空格键。如果此键被按下，GRUB将在引导原先的主引导记录之前
        启动。见“ int16 键盘扫描码”。

06h	1	preferred boot drive number, 0xff for no-drive
                优先引导的驱动器号，0xff 代表没有。

07h	1	preferred partition number, 0xff for whole drive
                优先引导的分区号，0xff 代表整个驱动器。

        if the preferred boot drive number is 0xff, the order of the
        search for GRLDR will be:
                如果优先引导的驱动器号是0xff,搜索 GRLDR 的顺序是：

            (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
            (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
            ... ... ... ... ... ... ... ...
            (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
                               (X=max harddrive number)
            (fd0)

        otherwise, if the preferred boot drive number is Y(not equal to
        0xff) and the preferred partition number is K, then the order of
        the search for GRLDR will be:
                否则，如果优先引导的驱动器号假定为Y （且不等于0xff），而优先引导
                的分区号为K,那么搜索 GRLDR 的顺序是：

            (Y) if K=0xff; or (Y,K) otherwise
            (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
            (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
            ... ... ... ... ... ... ... ...
            (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
                               (X=max harddrive number)
            (fd0)

        Note: if Y < 0x80, then (Y) is floppy, else (Y) is harddrive,
              and (Y,K) is partition number K on harddrive (Y).
                注意：如果Y小于0x80 ,那么这个（Y）驱动器代表软驱，否则就是硬盘驱动器。
                      而（Y,K）代表Y号硬盘驱动器上的 k 号分区。

******************************************************************************
***        bootlace.com - Install GRLDR.MBR bootstrap code to MBR          ***
******************************************************************************
           bootlace.com - 安装GRLDR.MBR自举代码到MBR

BOOTLACE.COM installs GRLDR.MBR boot record to the MBR of a harddrive or of a
harddrive image file, or to the boot sector of a floppy or a floppy image.
BOOTLACE.COM 能将GRLDR的引导记录安装到硬盘驱动器或硬盘映像文件的主引导记录中，
或者安装到软盘或者软盘映像的引导扇区。

Usage:
用法：
    bootlace.com  [OPTIONS]  DEVICE_OR_FILE
                       选项      设备或文件

OPTIONS:
选项：

    --read-only		do everything except the actual write to the
                specified DEVICE_OR_FILE.
                                对指定的设备或文件执行所有操作，但是并不不真正地写入。

    --restore-mbr		restore the previous mbr.
                                恢复原先的主引导记录。

    --mbr-no-bpb		do not copy BPB in the boot sector of the
                leading FAT partition to MBR.
                                即使最靠前的是一个FAT分区，也不复制BPB表到主引导记录。

    --no-backup-mbr		do not copy the old MBR to the second sector of
                DEVICE_OR_FILE.
                                不复制旧的主引导记录到设备或文件的第二扇区。

    --force-backup-mbr	force the copy of old MBR to the second sector
                of DEVICE_OR_FILE.
                                强行复制主引导记录到设备或文件的第二扇区。

    --mbr-enable-floppy	enable the search for GRLDR on floppy.
                                允许搜索软盘上的GRLDR 。

    --mbr-disable-floppy	disable the search for GRLDR on floppy.
                                禁止搜索软盘上的GRLDR 。

    --mbr-enable-osbr	enable the boot of PREVIOUS MBR with invalid
                partition table(usually an OS boot sector).
                                允许引导分区表无效的原先的主引导记录（通常是
                                操作系统的引导扇区）

    --mbr-disable-osbr	disable the boot of PREVIOUS MBR with invalid
                partition table(usually an OS boot sector).
                                禁止引导分区表无效的原先的主引导记录（通常是
                                操作系统的引导扇区）

    --duce			disable the feature of unconditional entrance
                            to the command-line.
                                禁止无条件进入命令行功能。

                Normally one can unconditionally get the
                command-line console by a keypress of `C',
                bypassing all config-files(including the
                preset-menu). This is a security hole. So we
                need this option to disable the feature.

                                任何人按‘C’键都可以正常取得命令行控制台，绕
                                过了所有的配置文件。（包括预置的配置文件）。
                                这是一种安全漏洞。所以我们需要这一选项来禁止这
                                种情况。

                DUCE is for Disable Unconditional Command-line
                Entrance.
                                DUCE 即 Disable Unconditional Command-line Entrance
                                的缩写，意为无条件的（或不受控的）命令行入口。

    --chs-no-tune		disable the feature of geometry tune.
                                禁止磁盘几何参数修正功能。

    --boot-prevmbr-first	try to boot PREVIOUS MBR before the search for
                GRLDR.
                                在搜索GRLDR之前，先尝试引导原先的主引导记录。

    --boot-prevmbr-last	try to boot PREVIOUS MBR after the search for
                GRLDR.
                                在搜索GRLDR之后，再尝试引导原先的主引导记录。

    --preferred-drive=D	preferred boot drive number, 0 <= D < 255.
                                优先引导的驱动器号，驱动器号D应大于0而小于255 。

    --preferred-partition=P	preferred partition number, 0 <= P < 255.
                                优先引导的分区号，分区号P应大于0 而小于255 。

    --serial-number=SN	setup a new serial number for the hard drive.
                SN must be non-zero.
                                为硬盘驱动器设置一个新的序列号码。SN必须是非零的数。

    --time-out=T		wait T seconds before booting PREVIOUS MBR. if
                T is 0xff, wait forever. The default is 5.
                                在引导原先的主引导记录前等待 T 秒钟。如果T是0xff，
                则始终等待。默认值是 5 。

    --hot-key=K		if the desired key K is pressed, start GRUB
                before booting PREVIOUS MBR. K is a word
                value, just as the value in AX register
                returned from int16/AH=1. The high byte is the
                scan code and the low byte is ASCII code. The
                default is 0x3920 for space bar. See "int 16
                keyboard scan codes" below.
                                如果热键被按下，在引导原先的主引导记录之前启动
                                GRUB 。K 是一个双字节的值，如同 int16/AH=1 返回
                                到AX寄存器的值一样。高字节是扫描码，低字节是ASCII
                                码。默认值是 0x3920，即空格键。参见“int16键盘扫描码”。

    --floppy		if DEVICE_OR_FILE is floppy, use this option.
                                如果设备或文件是软盘，使用这一选项。

    --floppy=N		if DEVICE_OR_FILE is a partition on a hard
                drive, use this option. N is used to specify
                the partition number: 0,1,2 and 3 for the
                primary partitions, and 4,5,6,... for the
                logical partitions.
                                如果设备或文件是一个硬盘驱动器上的分区，使用此选项。
                                N用于指定分区号码：0 ，1，2 和 3 为主分区，而 4，5，
                                6，...等等为逻辑分区。

    --sectors-per-track=S	specifies sectors per track for --floppy.
                1 <= S <= 63, default is 63.
                                为--floppy 选项指定每磁道扇区数。S 应大于1且小于63,
                默认值是63 。

    --heads=H		specifies number of heads for --floppy.
                1 <= H <= 256, default is 255.
                                为--floppy选项指定磁头数，H应大于1且小于256 。默认值是255 。

    --start-sector=B	specifies hidden sectors for --floppy=N.
                                为--floppy=N 选项指定隐藏扇区。

    --total-sectors=C	specifies total sectors for --floppy.
                default is 0.
                                为--floppy 选项指定总扇区数。默认值是 0 。

    --lba			use lba mode for --floppy. If the floppy BIOS
                has LBA support, you can specify --lba here.
                It is assumed that all floppy BIOSes have CHS
                support. So you would rather specify --chs.
                If neither --chs nor --lba is specified, then
                the LBA indicator(i.e., the third byte of the
                boot sector) will not be touched.
                                对--floppy 选项使用 lba 模式。如果软盘BIOS支持LBA，
                                你可以在这里指定--lba选项。理论上所有的软盘BIOS 都
                                支持CHS。因此你指定--chs选项更适当。如果--chs和--lba
                                选项都未被指定，那么LBA指示码（即引导扇区的第三字节）
                                将不被修改。

    --chs			use chs mode for --floppy. You should specify
                --chs if the floppy BIOS does not support LBA.
                We assume all floppy BIOSes have CHS support.
                So it is likely you want to specify --chs.
                If neither --chs nor --lba is specified, then
                the LBA indicator(i.e., the third byte of the
                boot sector) will not be touched.
                                为--floppy选项使用chs模式。如果软盘BIOS不支持
                                LBA，你应当指定--chs选项。我们假定所有的软盘BIOS
                                都能支持CHS。所以你需要指定--chs 选项更为恰当。
                                如果既不指定--chs选项又不指定--lba选项，那么LBA
                                指示码（即，引导扇区的第三字节）将不被改变。

    --fat12			FAT12 is allowed to be installed for --floppy.
                                --floppy选项使用时，确认安装到FAT12系统。

    --fat16			FAT16 is allowed to be installed for --floppy.
                                --floppy选项使用时，确认安装到FAT16系统。

    --fat32			FAT32 is allowed to be installed for --floppy.
                                --floppy选项使用时，确认安装到FAT32系统。

    --vfat			FAT12/16/32 are allowed to be installed for
                --floppy.
                                --floppy选项使用时，确认安装到FAT12/16/32等系统。

    --ntfs			NTFS is allowed to be installed for --floppy.
                                --floppy选项使用时，确认安装到NTFS系统。

    --ext2			EXT2 is allowed to be installed for --floppy.
                                --floppy选项使用时，确认安装到EXT2系统。

    --install-partition=I	Install the boot record onto the boot area of
                partition number I of the specified hard drive
                or harddrive image DEVICE_OR_FILE.
                                将引导记录安装到指定的硬盘驱动器或硬盘映像（设备或文件）
                                的第 I 号分区的引导区中。

DEVICE_OR_FILE:	Filename of the device or the image file. For DOS, a BIOS drive
number(hex 0xHH or decimal DDD) can be used to access the drive. BIOS drive
number 0 is for the first floppy, 1 is for the second floppy; 0x80 is for the
first hard drive, 0x81 is for the second hard drive, etc.
DEVICE_OR_FILE： 设备或者映像文件的文件名。对于DOS，BIOS驱动器号（两位的十六进制
或三位的十进制数）可以被用来访问驱动器。BIOS驱动器号0表示第一软盘，1表示第二硬盘；
0x80 表示第一硬盘驱动器，0x81表示第二硬盘驱动器，等等。

Note: BOOTLACE.COM writes only the boot code to MBR. The boot code needs to
load GRLDR as the second(and last) stage of the GRUB boot process. Therefore
GRLDR should be copied to the root directory of one of the supported
partitions, either before or after a successful execution of BOOTLACE.COM.
Currently only partitions with filesystem type of FAT12, FAT16, FAT32, NTFS,
EXT2 or EXT3 are supported.
注意：BOOTLACE.COM 仅仅是把引导代码写到MBR中。引导代码需要加载GRLDR作为GRUB启动
过程的第二（最后）阶段。因而在BOOTLACE.COM成功执行前或者是执行后，GRLDR应当被复
制到任一受支持分区的根目录下，当前受支持分区的文件系统类型仅有FAT12,FAT16,FAT32,
NTFS,EXT2以及EXT3 。

Note 2: If DEVICE_OR_FILE is a harddisk device or a harddisk image file, it
must contain a valid partition table, otherwise, BOOTLACE.COM will fail. If
DEVICE_OR_FILE is a floppy device or a floppy image file, then it must contain
a supported filesystem(i.e., either of FAT12/FAT16/FAT32/NTFS/EXT2/EXT3).
注意 2：如果DEVICE_OR_FILE是硬盘设备或是硬盘映像文件，它必须包含有效的分区表，
否则，BOOTLACE.COM 将安装失败。如果设备或文件是指向软驱或者软盘映像文件，那么
他必须包含一个受支持的文件系统（FAT12/FAT16/FAT32/NTFS/EXT2/EXT3 等之一）。

Note 3: If DEVICE_OR_FILE is a floppy device or a floppy image file, and it
was formated EXT2/EXT3, then you should specify --sectors-per-track and
--heads explicitly.
注意 3：如果DEVICE_OR_FILE是软驱或软盘映像文件，而它又被格式化为EXT2或EXT3，
那么你必须明确指定--sectors-per-track 和 --heads 选项。

Important!! If you install GRLDR Boot Record to a floppy or a partition, the
floppy or partition will boot solely grldr, and your original
IO.SYS(DOS/Win9x/Me) and NTLDR(WinNT/2K/XP) will become unbootable. This is
because the original boot record of the floppy or partition was overwritten.
There is no such problem when installing GRLDR Boot Record onto the MBR.
Update: Some NTLDR/IO.SYS/KERNEL.SYS files can be directly chainloaded in the
latest GRUB4DOS.
重要!! 如果你安装grldr的引导代码到一个软盘或者一个分区，此软盘或分区将只能从
grldr引导 ，而你原本的IO.SYS（DOS/Win9x/Me）和NTLDR（WinNT/2K/XP）将变为不能
引导。这是由于软盘或分区的原始引导记录被覆盖了。而把GRLDR的引导记录安装到MBR
则没有这个问题。
更新：在最新版本的GRUB4DOS中NTLDR，IO.SYS或KERNEL.SYS等文件，可以被直接加载。

Tip: If the filename begins in a dash(-) or a digit, you may prefix a dirname
(./) or (.\) to it.
提示：如果文件名的开始是短划线(-)或数字，你可以在它前面加上目录名(./) 或 (.\)。

Examples:
示例：

    Installing GRLDR boot code to MBR under Linux:
        在Linux下安装GRLDR的引导代码到MBR：

        bootlace.com  /dev/hda

    Installing GRLDR boot code to MBR under DOS:
        在DOS下安装GRLDR的引导代码到MBR：

        bootlace.com  0x80

    Installing GRLDR boot code to a harddisk image under DOS or Linux:
        在DOS或Linux下安装GRLDR的引导代码到硬盘映像：

        bootlace.com  hd.img

    Installing GRLDR boot code to floppy under Linux:
        在Linux下安装GRLDR的引导代码到软盘：

        bootlace.com  --floppy --chs /dev/fd0

    Installing GRLDR boot code to floppy under DOS:
        在DOS下安装GRLDR的引导代码到软盘：

        bootlace.com  --floppy --chs 0x00

    Installing GRLDR boot code to a floppy image under DOS or Linux:
        在DOS或Linux下安装GRLDR的引导代码到软盘映像：

        bootlace.com  --floppy --chs floppy.img

BOOTLACE.COM cannot function well under Windows NT/2000/XP/2003. It is expected
(and designed) to run under DOS/Win9x and Linux. Update: For image FILES,
bootlace.com function well under Windows NT/2000/XP/2003. For devices,
bootlace.com will not work under Windows NT/2000/XP/2003 because bootlace.com
is a DOS utility and Windows NT/2000/XP/2003 does not allow bootlace.com to
access devices.
BOOTLACE.COM 在Windows NT/2000/XP/2003下不能很好的运行。它被希望（和设计）用于
DOS/Win9x和Linux中。更新：对于映像文件，在Windows NT/2000/XP/2003下，
bootlace.com 运行得非常好。bootlace.com不能在 Windows NT/2000/XP/2003
中运行的原因是，bootlace.com是一个DOS工具而 Windows NT/2000/XP/2003
不认可它对设备的访问。

******************************************************************************
***        kexec-tools should be patched for the 1.101 release             ***
******************************************************************************
           kexec-tools 应当打上1.101发布的补丁

The file kexec-tools-1.101-patch is a patch to the kexec-tools-1.101 release.
Kexec might fail to load grub.exe without this patch.
kexec-tools-1.101-patch 是为kexec-tools-1.101发布的补丁。没有这个补丁Kexec 加载
grub.exe 会失败。

The home page of kexec-tools is:
kexec-tools 的主页是:

    http://www.xmission.com/~ebiederm/files/kexec/

Note: The Linux kernel should be KEXEC enabled before kexec can be run.
注意: 在使用 kexec 前应该使 Linux 核心支持 KEXEC 系统调用。

            !! Important Update !!
                           重要更新

The patch `kexec-tools-1.101-patch' is not needed now and has been deleted.
Even worse, it fails in `kexec -l grub.exe --initrd=imgfile'. So please
do not use it any more.
现在不再需要`kexec-tools-1.101-patch'补丁而且它已经被删除了。很糟糕的是，执行
`kexec -l grub.exe --initrd=imgfile'竟会失败。所以请不要再使用它。

******************************************************************************
***           Direct transition to DOS/Win9x from within Linux             ***
******************************************************************************
              从Linux直接转换到DOS/Win9x

By using kexec, we can easily boot into DOS/Win9x from a running Linux system.
使用kexec，我们能够轻易地从运行中的 Linux 系统启动到 DOS/Win9x 。

If WIN98.IMG is a bootable hard-disk image, do as follows:
假如 WIN98.IMG 是一个可引导的硬盘映像，按照如下操作：

kexec -l grub.exe --initrd=WIN98.IMG --command-line="--config-file=map (rd) (hd0); map --hook; chainloader (hd0)+1; rootnoverify (hd0)"

kexec -e

If DOS.IMG is a bootable floppy image, do this way:
如果DOS.IMG是一个可引导的软盘映像，按照以下方法：

kexec -l grub.exe --initrd=DOS.IMG --command-line="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"

kexec -e

Note that in this manner, we can boot DOS/Win9x without using a real DOS/Win9x
disk. We need no FAT partition but an image file.
注意，按照这种方式，我们可以不用使用真实的 DOS/Win9x 磁盘就启动到 DOS/Win9x 。
我们不需要FAT分区而只需要一个映像文件。

We have noticed that Linux itself can act as a big boot manager by using kexec
and grub.exe. This may be convenient to developers who write installation or
bootstrap or initialization programs.
我们已经注意到通过使用 kexec 和 grub.exe，Linux本身就能够成为一个大的引导管理器。
这给安装程序或者引导程序或者初始化程序的开发者带来了方便。

Certainly, grub.exe and the bootable disk image can also be loaded by a running
GRUB or LILO or syslinux. Examples:
当然，grub.exe和可引导的磁盘映像也能够被运行中的GRUB 或LILO 或syslinux 加载。例如：

1. Loaded by GRUB:
   通过 GRUB 加载：

    kernel (hd0,0)/grub.exe --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
    initrd (hd0,0)/DOS.IMG
    boot

2. Loaded by LILO:
   通过 LILO 加载：

    image=/boot/grub.exe
        label=grub.exe
        initrd=/boot/DOS.IMG
        append="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"

3. Loaded by SYSLINUX:
   通过 SYSLINUX 加载：

    label grub.exe
        kernel grub.exe
        append initrd=DOS.IMG --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"

Note: If the above `map (rd) (...)' failed, you may use `map (rd)+1 (...)'
instead and try again.
注意：如果使用上面的‘map (rd) (...)’失败，你可以使用‘map (rd)+1 (...)’代替，
然后再试一次。

******************************************************************************
***               Keyboard BIOS Scan Code/ASCII code tables                ***
******************************************************************************
                  键盘 BIOS 扫描码和 ASCII 码表

Keyboard bios scan code and ascii character code tables can be obtained from
the web by, for example, googling for "3920 372A 4A2D 4E2B 352F". Here are 2
main results:
键盘 bios 扫描码和 ASCII 字符码表能够通过 web 网获取,例如，使用 google 查找
"3920 372A 4A2D 4E2B 352F"。这里有两项主要的结果：

1. From "http://heim.ifi.uio.no/~stanisls/helppc/scan_codes.html":
   转自“http://heim.ifi.uio.no/~stanisls/helppc/scan_codes.html”:

INT 16 - Keyboard Scan Codes
INT 16 - 键盘扫描码

       Key	 Normal    Shifted   w/Ctrl    w/Alt
       键位      常态      上档态    控制态    变更态

    A	  1E61	    1E41      1E01	1E00
    B	  3062	    3042      3002	3000
    C	  2E63	    2E43      2E03	2E00
    D	  2064	    2044      2004	2000
    E	  1265	    1245      1205	1200
    F	  2166	    2146      2106	2100
    G	  2267	    2247      2207	2200
    H	  2368	    2348      2308	2300
    I	  1769	    1749      1709	1700
    J	  246A	    244A      240A	2400
    K	  256B	    254B      250B	2500
    L	  266C	    264C      260C	2600
    M	  326D	    324D      320D	3200
    N	  316E	    314E      310E	3100
    O	  186F	    184F      180F	1800
    P	  1970	    1950      1910	1900
    Q	  1071	    1051      1011	1000
    R	  1372	    1352      1312	1300
    S	  1F73	    1F53      1F13	1F00
    T	  1474	    1454      1414	1400
    U	  1675	    1655      1615	1600
    V	  2F76	    2F56      2F16	2F00
    W	  1177	    1157      1117	1100
    X	  2D78	    2D58      2D18	2D00
    Y	  1579	    1559      1519	1500
    Z	  2C7A	    2C5A      2C1A	2C00

       Key	 Normal    Shifted   w/Ctrl    w/Alt
       键位      常态      上档态    控制态    变更态

    1	  0231	    0221		7800
    2	  0332	    0340      0300	7900
    3	  0433	    0423		7A00
    4	  0534	    0524		7B00
    5	  0635	    0625		7C00
    6	  0736	    075E      071E	7D00
    7	  0837	    0826		7E00
    8	  0938	    092A		7F00
    9	  0A39	    0A28		8000
    0	  0B30	    0B29		8100

       Key	 Normal    Shifted   w/Ctrl    w/Alt
       键位      常态      上档态    控制态    变更态

    -	  0C2D	    0C5F      0C1F	8200
    =	  0D3D	    0D2B		8300
    [	  1A5B	    1A7B      1A1B	1A00
    ]	  1B5D	    1B7D      1B1D	1B00
    ;	  273B	    273A		2700
    '	  2827	    2822
    `	  2960	    297E
    \	  2B5C	    2B7C      2B1C	2600 (same as Alt L)
    ,	  332C	    333C
    .	  342E	    343E
    /	  352F	    353F

    Key	 Normal    Shifted   w/Ctrl    w/Alt
       键位      常态      上档态    控制态    变更态

    F1	  3B00	    5400      5E00	6800
    F2	  3C00	    5500      5F00	6900
    F3	  3D00	    5600      6000	6A00
    F4	  3E00	    5700      6100	6B00
    F5	  3F00	    5800      6200	6C00
    F6	  4000	    5900      6300	6D00
    F7	  4100	    5A00      6400	6E00
    F8	  4200	    5B00      6500	6F00
    F9	  4300	    5C00      6600	7000
    F10	  4400	    5D00      6700	7100
    F11	  8500	    8700      8900	8B00
    F12	  8600	    8800      8A00	8C00

    Key	    Normal    Shifted	w/Ctrl	  w/Alt
        键位        常态      上档态    控制态    变更态

    BackSpace    0E08      0E08	 0E7F	  0E00
    Del	     5300      532E	 9300	  A300
    Down Arrow   5000      5032	 9100	  A000
    End	     4F00      4F31	 7500	  9F00
    Enter	     1C0D      1C0D	 1C0A	  A600
    Esc	     011B      011B	 011B	  0100
    Home	     4700      4737	 7700	  9700
    Ins	     5200      5230	 9200	  A200
    Keypad 5		4C35	 8F00
    Keypad *     372A		 9600	  3700
    Keypad -     4A2D      4A2D	 8E00	  4A00
    Keypad +     4E2B      4E2B		  4E00
    Keypad /     352F      352F	 9500	  A400
    Left Arrow   4B00      4B34	 7300	  9B00
    PgDn	     5100      5133	 7600	  A100
    PgUp	     4900      4939	 8400	  9900
    PrtSc				 7200
    Right Arrow  4D00      4D36	 7400	  9D00
    SpaceBar     3920      3920	 3920	  3920
    Tab	     0F09      0F00	 9400	  A500
    Up Arrow     4800      4838	 8D00	  9800

- Some key combinations are not available on all systems.  The PS/2
  includes many that aren't available on the PC, XT and AT.
  一些组合键不是在所有系统中都能获取。PS/2 包括了很多不能在PC, XT和
  AT上获取的组合键。

- To retrieve the character from a scan code logical AND the word
  with 0x00FF.
  由扫描码检索出字符可以用 0x00FF 和该字符进行逻辑与。

- see  INT 16  MAKE CODES
  参见INT16 通码

2. From "http://www.hoppie.nl/ivan/keycodes.txt":
   转自“http://www.hoppie.nl/ivan/keycodes.txt”:

     Keystroke                  Keypress code
--------------------------------------------------
     Esc                        011B
     1                          0231
     2                          0332
     3                          0433
     4                          0534
     5                          0635
     6                          0736
     7                          0837
     8                          0938
     9                          0A39
     0                          0B30
     -                          0C2D
     =                          0D3D
     Backspace                  0E08
     Tab                        0F09
     q                          1071
     w                          1177
     e                          1265
     r                          1372
     t                          1474
     y                          1579
     u                          1675
     i                          1769
     o                          186F
     p                          1970
     [                          1A5B
     ]                          1B5D
     Enter                      1C0D
     Ctrl                         **
     a                          1E61
     s                          1F73
     d                          2064
     f                          2166
     g                          2267
     h                          2368
     j                          246A
     k                          256B
     l                          266C
     ;                          273B
     '                          2827
     `                          2960
     Shift                        **
     \                          2B5C
     z                          2C7A
     x                          2D78
     c                          2E63
     v                          2F76
     b                          3062
     n                          316E
     m                          326D
     ,                          332C
     .                          342E
     /                          352F
     Gray *                     372A
     Alt                          **
     Space                      3920
     Caps Lock                    **
     F1                         3B00
     F2                         3C00
     F3                         3D00
     F4                         3E00
     F5                         3F00
     F6                         4000
     F7                         4100
     F8                         4200
     F9                         4300
     F10                        4400
     F11                        8500
     F12                        8600
     Num Lock                     **
     Scroll Lock                  **
     White Home                 4700
     White Up Arrow             4800
     White PgUp                 4900
     Gray -                     4A2D
     White Left Arrow           4B00
     Center Key                 4C00
     White Right Arrow          4D00
     Gray +                     4E2B
     White End                  4F00
     White Down Arrow           5000
     White PgDn                 5100
     White Ins                  5200
     White Del                  5300
     SysReq                       **
     Key 45 [1]                 565C
     Enter (number keypad)      1C0D
     Gray /                     352F
     PrtSc                        **
     Pause                        **
     Gray Home                  4700
     Gray Up Arrow              4800
     Gray Page Up               4900
     Gray Left Arrow            4B00
     Gray Right Arrow           4D00
     Gray End                   4F00
     Gray Down Arrow            5000
     Gray Page Down             5100
     Gray Insert                5200
     Gray Delete                5300

     Shift Esc                  011B
     !                          0221
     @                          0340
     #                          0423
     $                          0524
     %                          0625
     ^                          075E
     &                          0826
     * (white)                  092A
     (                          0A28
     )                          0B29
     _                          0C5F
     + (white)                  0D2B
     Shift Backspace            0E08
     Shift Tab (Backtab)        0F00
     Q                          1051
     W                          1157
     E                          1245
     R                          1352
     T                          1454
     Y                          1559
     U                          1655
     I                          1749
     O                          184F
     P                          1950
     {                          1A7B
     }                          1B7D
     Shift Enter                1C0D
     Shift Ctrl                   **
     A                          1E41
     S                          1F53
     D                          2044
     F                          2146
     G                          2247
     H                          2348
     J                          244A
     K                          254B
     L                          264C
     :                          273A
     "                          2822
     ~                          297E
     |                          2B7C
     Z                          2C5A
     X                          2D58
     C                          2E43
     V                          2F56
     B                          3042
     N                          314E
     M                          324D
     <                          333C
     >                          343E
     ?                          353F
     Shift Gray *               372A
     Shift Alt                    **
     Shift Space                3920
     Shift Caps Lock              **
     Shift F1                   5400
     Shift F2                   5500
     Shift F3                   5600
     Shift F4                   5700
     Shift F5                   5800
     Shift F6                   5900
     Shift F7                   5A00
     Shift F8                   5B00
     Shift F9                   5C00
     Shift F10                  5D00
     Shift F11                  8700
     Shift F12                  8800
     Shift Num Lock               **
     Shift Scroll Lock            **
     Shift 7 (number pad)       4737
     Shift 8 (number pad)       4838
     Shift 9 (number pad)       4939
     Shift Gray -               4A2D
     Shift 4 (number pad)       4B34
     Shift 5 (number pad)       4C35
     Shift 6 (number pad)       4D36
     Shift Gray +               4E2B
     Shift 1 (number pad)       4F31
     Shift 2 (number pad)       5032
     Shift 3 (number pad)       5133
     Shift 0 (number pad)       5230
     Shift . (number pad)       532E
     Shift SysReq                 **
     Shift Key 45 [1]           567C
     Shift Enter (number pad)   1C0D
     Shift Gray /               352F
     Shift PrtSc                  **
     Shift Pause                  **
     Shift Gray Home            4700
     Shift Gray Up Arrow        4800
     Shift Gray Page Up         4900
     Shift Gray Left Arrow      4B00
     Shift Gray Right Arrow     4D00
     Shift Gray End             4F00
     Shift Gray Down Arrow      5000
     Shift Gray Page Down       5100
     Shift Gray Insert          5200
     Shift Gray Delete          5300

     Ctrl Esc                   011B
     Ctrl 1                       --
     Ctrl 2 (NUL)               0300
     Ctrl 3                       --
     Ctrl 4                       --
     Ctrl 5                       --
     Ctrl 6 (RS)                071E
     Ctrl 7                       --
     Ctrl 8                       --
     Ctrl 9                       --
     Ctrl 0                       --
     Ctrl -                     0C1F
     Ctrl =                       --
     Ctrl Backspace (DEL)       0E7F
     Ctrl Tab                   9400
     Ctrl q (DC1)               1011
     Ctrl w (ETB)               1117
     Ctrl e (ENQ)               1205
     Ctrl r (DC2)               1312
     Ctrl t (DC4)               1414
     Ctrl y (EM)                1519
     Ctrl u (NAK)               1615
     Ctrl i (HT)                1709
     Ctrl o (SI)                180F
     Ctrl p (DEL)               1910
     Ctrl [ (ESC)               1A1B
     Ctrl ] (GS)                1B1D
     Ctrl Enter (LF)            1C0A
     Ctrl a (SOH)               1E01
     Ctrl s (DC3)               1F13
     Ctrl d (EOT)               2004
     Ctrl f (ACK)               2106
     Ctrl g (BEL)               2207
     Ctrl h (Backspace)         2308
     Ctrl j (LF)                240A
     Ctrl k (VT)                250B
     Ctrl l (FF)                260C
     Ctrl ;                       --
     Ctrl '                       --
     Ctrl `                       --
     Ctrl Shift                   **
     Ctrl \ (FS)                2B1C
     Ctrl z (SUB)               2C1A
     Ctrl x (CAN)               2D18
     Ctrl c (ETX)               2E03
     Ctrl v (SYN)               2F16
     Ctrl b (STX)               3002
     Ctrl n (SO)                310E
     Ctrl m (CR)                320D
     Ctrl ,                       --
     Ctrl .                       --
     Ctrl /                       --
     Ctrl Gray *                9600
     Ctrl Alt                     **
     Ctrl Space                 3920
     Ctrl Caps Lock               --
     Ctrl F1                    5E00
     Ctrl F2                    5F00
     Ctrl F3                    6000
     Ctrl F4                    6100
     Ctrl F5                    6200
     Ctrl F6                    6300
     Ctrl F7                    6400
     Ctrl F8                    6500
     Ctrl F9                    6600
     Ctrl F10                   6700
     Ctrl F11                   8900
     Ctrl F12                   8A00
     Ctrl Num Lock                --
     Ctrl Scroll Lock             --
     Ctrl White Home            7700
     Ctrl White Up Arrow        8D00
     Ctrl White PgUp            8400
     Ctrl Gray -                8E00
     Ctrl White Left Arrow      7300
     Ctrl 5 (number pad)        8F00
     Ctrl White Right Arrow     7400
     Ctrl Gray +                9000
     Ctrl White End             7500
     Ctrl White Down Arrow      9100
     Ctrl White PgDn            7600
     Ctrl White Ins             9200
     Ctrl White Del             9300
     Ctrl SysReq                  **
     Ctrl Key 45 [1]            --
     Ctrl Enter (number pad)    1C0A
     Ctrl / (number pad)        9500
     Ctrl PrtSc                 7200
     Ctrl Break                 0000
     Ctrl Gray Home             7700
     Ctrl Gray Up Arrow         8DE0
     Ctrl Gray Page Up          8400
     Ctrl Gray Left Arrow       7300
     Ctrl Gray Right Arrow      7400
     Ctrl Gray End              7500
     Ctrl Gray Down Arrow       91E0
     Ctrl Gray Page Down        7600
     Ctrl Gray Insert           92E0
     Ctrl Gray Delete           93E0

     Alt Esc                    0100
     Alt 1                      7800
     Alt 2                      7900
     Alt 3                      7A00
     Alt 4                      7B00
     Alt 5                      7C00
     Alt 6                      7D00
     Alt 7                      7E00
     Alt 8                      7F00
     Alt 9                      8000
     Alt 0                      8100
     Alt -                      8200
     Alt =                      8300
     Alt Backspace              0E00
     Alt Tab                    A500
     Alt q                      1000
     Alt w                      1100
     Alt e                      1200
     Alt r                      1300
     Alt t                      1400
     Alt y                      1500
     Alt u                      1600
     Alt i                      1700
     Alt o                      1800
     Alt p                      1900
     Alt [                      1A00
     Alt ]                      1B00
     Alt Enter                  1C00
     Alt Ctrl                     **
     Alt a                      1E00
     Alt s                      1F00
     Alt d                      2000
     Alt f                      2100
     Alt g                      2200
     Alt h                      2300
     Alt j                      2400
     Alt k                      2500
     Alt l                      2600
     Alt ;                      2700
     Alt '                      2800
     Alt `                      2900
     Alt Shift                    **
     Alt \                      2B00
     Alt z                      2C00
     Alt x                      2D00
     Alt c                      2E00
     Alt v                      2F00
     Alt b                      3000
     Alt n                      3100
     Alt m                      3200
     Alt ,                      3300
     Alt .                      3400
     Alt /                      3500
     Alt Gray *                 3700
     Alt Space                  3920
     Alt Caps Lock                **
     Alt F1                     6800
     Alt F2                     6900
     Alt F3                     6A00
     Alt F4                     6B00
     Alt F5                     6C00
     Alt F6                     6D00
     Alt F7                     6E00
     Alt F8                     6F00
     Alt F9                     7000
     Alt F10                    7100
     Alt F11                    8B00
     Alt F12                    8C00
     Alt Num Lock                 **
     Alt Scroll Lock              **
     Alt Gray -                 4A00
     Alt Gray +                 4E00
     Alt 7 (number pad)           #
     Alt 8 (number pad)           #
     Alt 9 (number pad)           #
     Alt 4 (number pad)           #
     Alt 5 (number pad)           #
     Alt 6 (number pad)           #
     Alt 1 (number pad)           #
     Alt 2 (number pad)           #
     Alt 3 (number pad)           #
     Alt Del                      --
     Alt SysReq                   **
     Alt Key 45 [1]               --
     Alt Enter (number pad)     A600
     Alt / (number pad)         A400
     Alt PrtSc                    **
     Alt Pause                    **
     Alt Gray Home              9700
     Alt Gray Up Arrow          9800
     Alt Gray Page Up           9900
     Alt Gray Left Arrow        9B00
     Alt Gray Right Arrow       9D00
     Alt Gray End               9F00
     Alt Gray Down Arrow        A000
     Alt Gray Page Down         A100
     Alt Gray Insert            A200
     Alt Gray Delete            A300

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

Footnotes
脚注
        [1]   In the United States, the 101/102-key keyboard is shipped
              with 101 keys. Overseas versions have an additional key
              sandwiched between the left Shift key and the Z key. This
              additional key is identified by IBM (and in this table) as
              "Key 45."
              在美国，101/102键键盘有101 个键。海外版本有一个附加的键，夹在
          左上档键和Z 键之间。此附加键是由IBM 确定的（在本表中是 45 键）。

        [**]  Keys and key combinations marked ** are used by the ROM BIOS
              but do not put values into the keyboard buffer.
              键及键组合若有 ** 标记，则被ROM BIOS所使用，但不会将键值放入键盘
          缓冲区。

        [--]  Keys and key combinations marked -- are ignored by the ROM
              BIOS.
              键及键组合若有 -- 标记，则被ROM BIOS所忽略。

3. From "http://heim.ifi.uio.no/~stanisls/helppc/make_codes.html":
   转自“http://heim.ifi.uio.no/~stanisls/helppc/make_codes.html”:

INT 9 - Hardware Keyboard Make/Break Codes
INT 9 - 硬件键盘的通/断码

    Key	     Make  Break		Key    Make  Break
        键位         通码  断码                 键位   通码  断码

    Backspace     0E    8E			F1	3B    BB
    Caps Lock     3A    BA			F2	3C    BC
    Enter	      1C    9C			F3	3D    BD
    Esc	      01    81			F4	3E    BE
    Left Alt      38    B8			F7	41    C1
    Left Ctrl     1D    9D			F5	3F    BF
    Left Shift    2A    AA			F6	40    C0
    Num Lock      45    C5			F8	42    C2
    Right Shift   36    B6			F9	43    C3
    Scroll Lock   46    C6			F10	44    C4
    Space	      39    B9			F11	57    D7
    Sys Req (AT)  54    D4			F12	58    D8
    Tab	      0F    8F

            Keypad Keys		       Make   Break
                    数字小键盘键位             通码   断码

            Keypad 0  (Ins)		52	D2
            Keypad 1  (End) 		4F	CF
            Keypad 2  (Down arrow)	50	D0
            Keypad 3  (PgDn)		51	D1
            Keypad 4  (Left arrow)	4B	CB
            Keypad 5			4C	CC
            Keypad 6  (Right arrow)	4D	CD
            Keypad 7  (Home)		47	C7
            Keypad 8  (Up arrow)	48	C8
            Keypad 9  (PgUp)		49	C9
            Keypad .  (Del) 		53	D3
            Keypad *  (PrtSc)		37	B7
            Keypad -			4A	CA
            Keypad +			4E	CE

           Key    Make  Break	       Key    Make  Break
               键位   通码  断码               键位   通码  断码

        A      1E    9E 		N      31    B1
        B      30    B0 		O      18    98
        C      2E    AE 		P      19    99
        D      20    A0 		Q      10    90
        E      12    92 		R      13    93
        F      21    A1 		S      1F    9F
        G      22    A2 		T      14    94
        H      23    A3 		U      16    96
        I      17    97 		V      2F    AF
        J      24    A4 		W      11    91
        K      25    A5 		X      2D    AD
        L      26    A6 		Y      15    95
        M      32    B2 		Z      2C    AC

           Key    Make  Break	       Key    Make  Break
               键位   通码  断码               键位   通码  断码

        1      02    82 		-      0C    8C
        2      03    83 		=      0D    8D
        3      04    84 		[      1A    9A
        4      05    85 		]      1B    9B
        5      06    86 		;      27    A7
        6      07    87 		'      28    A8
        7      08    88 		`      29    A9
        8      09    89 		\      2B    AB
        9      0A    8A 		,      33    B3
        0      0B    8B 		.      34    B4
                        /      35    B5

Enhanced Keyboard Keys (101/102 keys)
键盘扩展键 （101/102 键）

    Control Keys		  Make		  Break
        控制键                    通码            断码

    Alt-PrtSc (SysReq)	  54		  D4
    Ctrl-PrtSc		  E0 37 	  E0 B7
    Enter			  E0 1C 	  E0 9C
    PrtSc			  E0 2A E0 37	  E0 B7 E0 AA
    Right Alt		  E0 38 	  E0 B8
    Right Ctrl		  E0 1D 	  E0 9D
    Shift-PrtSc		  E0 37 	  E0 B7
    /			  E0 35 	  E0 B5
    Pause			  E1 1D 45 E1 9D C5  (not typematic)
    Ctrl-Pause (Ctrl-Break)   E0 46 E0 C6	     (not typematic)

    - Keys marked as "not typematic" generate one stream of bytes
      without corresponding break scan code bytes (actually the
      break codes are part of the make code).
          键位是以未使用断码扫描码字节信息的“非机器自动连续打印的"所
          生成的一种扫描码字节流来标记的。（实际上断码是通码的一部分）
          （译注：typematic 有人翻译为‘机打’）

            Normal Mode or
            Shift w/Numlock
                        常态或上档态及
                        数字键盘锁定态模式

    Key		 Make	 Break	   |----- Numlock on ------.
                                                  数字键盘锁定
                          Make	    Break
        键位		 通码    断码	      通码           断码

    Del		 E0 53	 E0 D3	   E0 2A E0 53	 E0 D3 E0 AA
    Down arrow	 E0 50	 E0 D0	   E0 2A E0 50	 E0 D0 E0 AA
    End		 E0 4F	 E0 CF	   E0 2A E0 4F	 E0 CF E0 AA
    Home		 E0 47	 E0 C7	   E0 2A E0 47	 E0 C7 E0 AA
    Ins		 E0 52	 E0 D2	   E0 2A E0 52	 E0 D2 E0 AA
    Left arrow	 E0 4B	 E0 CB	   E0 2A E0 4B	 E0 CB E0 AA
    PgDn		 E0 51	 E0 D1	   E0 2A E0 51	 E0 D1 E0 AA
    PgUp		 E0 49	 E0 C9	   E0 2A E0 49	 E0 C9 E0 AA
    Right arrow	 E0 4D	 E0 CD	   E0 2A E0 4D	 E0 CD E0 AA
    Up arrow	 E0 48	 E0 C8	   E0 2A E0 48	 E0 C8 E0 AA

    Key	      |--Left Shift Pressed--.	  |--Right Shift Pressed--.
        键位             左上档键按下时              右上档键按下时

             Make	       Break	      Make	    Break
                         通码          断码           通码          断码

    Del	      E0 AA E0 53   E0 D3 E0 2A    E0 B6 E0 53	 E0 D3 E0 36
    Down arrow    E0 AA E0 50   E0 D0 E0 2A    E0 B6 E0 50	 E0 D0 E0 36
    End	      E0 AA E0 4F   E0 CF E0 2A    E0 B6 E0 4F	 E0 CF E0 36
    Home	      E0 AA E0 47   E0 C7 E0 2A    E0 B6 E0 47	 E0 C7 E0 36
    Ins	      E0 AA E0 52   E0 D2 E0 2A    E0 B6 E0 52	 E0 D2 E0 36
    Left arrow    E0 AA E0 4B   E0 CB E0 2A    E0 B6 E0 4B	 E0 CB E0 36
    PgDn	      E0 AA E0 51   E0 D1 E0 2A    E0 B6 E0 51	 E0 D1 E0 36
    PgUp	      E0 AA E0 49   E0 C9 E0 2A    E0 B6 E0 49	 E0 C9 E0 36
    Right arrow   E0 AA E0 4D   E0 CD E0 2A    E0 B6 E0 4D	 E0 CD E0 36
    Up arrow      E0 AA E0 48   E0 C8 E0 2A    E0 B6 E0 48	 E0 C8 E0 36
    /	      E0 AA E0 35   E0 B5 E0 2A    E0 B6 E0 35	 E0 B5 E0 36

    - The PS/2 models have three make/break scan code sets.  The first
      set matches the PC & XT make/break scan code set and is the one
      listed here.	Scan code sets are selected by writing the value F0
      to the keyboard via the 8042 (port 60h).  The following is a brief
      description of the scan code sets (see the PS/2 Technical Reference
      manuals for more information on scan code sets 2 and 3):
          PS/2 类型有三套通断扫描码。其中第一套是适用于PC & XT 的通断码扫描码集，
          并列在了这里。扫描码集可以通过向8042 键盘控制器（端口60）写入值 F0 来
          选择。下面是扫描码集的简要介绍（更多第2，3套扫描码集的信息见PS/2 技术
          参考手册）

    /  set 1, each key has a base scan code.  Some keys generate
       extra scan codes to generate artificial shift states.  This
       is similar to the standard scan code set used on the PC and XT.
           第一套扫描码集，每个键具有一个基本的扫描码。一些键产生扩展扫
           描码以便人工生成上档状态。它与 PC 和 XT 机上的标准扫描码相似。

    /  set 2, each key sends one make scan code and two break scan
       codes bytes (F0 followed by the make code).	This scan code
       set is available on the IBM AT also.
           第二套扫描码集，每个键发送一个通码扫描码和两个断码扫描码字节
          （通码在F0之后）。这套扫描码集在 IBM AT 机上也有效。

    /  set 3, each key sends one make scan code and two break scan
       codes bytes (F0 followed by the make code) and no keys are
       altered by Shift/Alt/Ctrl keys.
           第三套扫描码集，每个键发送一个通码扫描码和两个断码扫描码字节
          （通码在F0之后）并且键位不随 Shift/Alt/Ctrl 等键的使用而改变。

    /  typematic scan codes are the same as the make scan code
           “非机器自动连续打印的”扫描码和通码扫描码是相同的。

    - Some Tandy 1000's do not handle Alt key combinations when multiple
      shift keys are pressed.  The Alt-Shift-H combination loses the Alt.
          一些 Tandy 1000 机器在多重组合键的 shift 键被按下时不能处理 ALT 键。
          使用键组合 Alt-Shift-H 时会丢失 ALT 键。

    - extended keys like (F11, F12) can only be read with systems that
      have extended keyboard BIOS support (or INT 9 extensions);  to
      read these special keys on these systems INT 16,10 must be used
          扩展键比如（F11,F12）等只能在具有 BIOS 键盘扩展支持（或 INT 9 扩展）
          的系统上被读取。用INT16读取这些系统上的特别的键时，必须使用10号功能 。

******************************************************************************
***                         GRLDR  Error messages                          ***
******************************************************************************
                            GRLDR  错误提示信息

1. Missing MBR-helper.
   缺少主引导辅助记录。

    The helper function in the sectors that immediately follow the MBR is
    not present, or it has been erased by a virus or by Windows XP/Vista.
        紧接在主引导记录后的辅助功能程序不见了，或者是它已经被病毒或 Windows
        XP/Vista等删除了。

    Run the bootlace.com utility to fix the problem.
        运行 bootlace.com 工具来解决这个问题。

2. Buggy BIOS!
   缺陷太多的BIOS!

    Your BIOS is too buggy. It even has no support for INT13/AH=8.
        你的 BIOS 太糟糕了。它甚至不能支持 INT 13/AH=8 。

    No solution except flashing your BIOS. Buggy BIOSes will encounter
    more and more problems with grub4dos in the future.
        除了升级你的 BIOS 没有办法解决。未来，缺陷多的 BIOS 将会很常见而且
        会对 grub4dos 造成很多问题。

3. This partition is NTFS but with unknown boot record. Please install
Microsoft NTFS boot sectors to this partition correctly, or create an
FAT12/16/32 partition and place the same copy of GRLDR and MENU.LST there.
此分区系统是 NTFS 但包含未知的引导记录。请安装正确的微软 NTFS 引导扇区到
这个分区，或者建立一个FAT12/16/32的分区并将GRLDR 及MENU.LST 的相同的备份
文件放到那里。

    The boot record was changed or erased by Microsoft Windows XP Service
    Pack 2.
        引导记录已经被微软 Windows XP Service Pack 2 改变或删除。

    You may install the old boot record introduced with the	original clean
    Windows 2K/XP. As another solution, you may create an FAT partition
    for your system, and copy GRLDR and your MENU.LST to its root dir.
        你可以用原来的引导记录来安装，以清理掉Windows 2K/XP的记录。另一个解决办
        法是，你可以在系统上建立一个FAT分区，并且将GRLDR 和你的MENU.LST复制到它
        的根目录。

    While the startup code of grldr might fail to load GRLDR in NTFS
    partitions, it always successfully loads GRLDR in FAT partitions(and
    even in ext2/ext3 partitions).
        在NTFS分区grldr的自举代码在加载GRLDR时可能会失败，但在FAT分区（甚至在
        ext2/ext3分区）它总能成功加载 GRLDR 。

    Note that NTLDR only loads the startup code of grldr(i.e., the leading
    16 sectors of grldr), not the whole grldr file.
        注意 NTLDR只能加载grldr的自举代码（即，grldr开头的16个扇区），而不能将
        整个grldr载入。

    Thus, C:\GRLDR must exist(here C: can be NTFS), since it is used for
    BOOT.INI and NTLDR. If C: is NTFS, X:\GRLDR should exist as well,
    where X: stands for a certain FAT partition.
        因此，自从它用于 BOOT.INT 和 NTLDR 以来 ，C 盘根目录下必须存在有GRLDR
       （这里的C盘可以是 NTFS 文件系统）。

******************************************************************************
***                             Known BIOS bugs                            ***
******************************************************************************
                                已知的BIOS 缺陷

1. Some newer Dell machines have no int13/AH=43h support. You may encounter
    failure when trying to write-access an emulated disk.
   一些较新的 Dell 机不能支持int13/AH=43h 。当你尝试对仿真磁盘进行写访问时，
   可能会遭遇失败。

    Note: This bug is serious! The old "root+setup" installation method
    (in real mode grub environment) uses INT13 to write the first sector
    of stage2. It will fail for the buggy DELL machine when stage2 is
    accessed with LBA mode.
        注意：这个缺陷非常严重！老的安装方法"root+setup" （在实模式的grub环
        境中）使用INT13将stage2文件写入第一扇区。在这些有缺陷的DELL机上通过
        LBA 模式来访问 stage2 文件时将会失败。

2. Some buggy BIOSes won't boot bootable.iso(See above).(qemu can boot it fine)
   一些有缺陷的BIOS不能引导启动光盘映像文件（见前面）。（虚拟机qemu 能良好的引导）

3. Some newer Dell machines violently destroyed the interrupt vectors for
    hardware IRQs and will hang the machine when running GRUB.EXE
    from DOS. You may try again with BADGRUB.EXE.
   在DOS下运行GRUB.EXE时，一些较新的 Dell 机激烈地破坏那些硬件中断请求的中断向量，
   而使得机器会失去响应 。你可以尝试用BADGRUB.EXE来再试一次。

4. Reports say some BIOSes will function abnormally after GRUB.EXE is started
    by kexec of Linux. Some machines reportedly hang. Some others
    reportedly cannot access USB drives.
   有报告称，通过Linux中的kexec启动GRUB.EXE后，一些BIOS将功能异常。报告称一些
   机器会死机，而另一些不能访问USB驱动器。

******************************************************************************
***                             Known Problems                             ***
******************************************************************************
                                 已知问题
1.	Running GRUB.EXE from a DOS box of Windows 9x/Me could hang the
    machine, especially for some systems with USB support. You may
    encounter the same problem when running GRUB.EXE through KEXEC under
    Linux.
        在 Windows 9x/Me的DOS窗口运行GRUB.EXE时可能会死机，特别是在这些系统
        使用USB的时候。在Linux下通过KEXEC运行GRUB.EXE时，你也可能碰到同样的
        问题。

Note:	You don't have to run GRUB.EXE from protected mode of Win9x, which
    could hang the machine; Instead, you usually want to run GRUB.EXE
    after you have done a "Restart the computer in MS-DOS mode", which
    is safe enough.
注意：  你不能在已进入保护模式的Win 9x 中运行GRUB.EXE,那可能会死机；作为变
        通，你可以执行“重启并进入MS-DOS模式”选项来达到运行 GRUB.EXE 的目
        的，这将足够安全。

2.	The default chainloader action will keep A20 on. Some buggy DOS XMS
    memory managers could hang the machine. You may use the --disable-a20
    option in the chainloader line and try again. Anyway, you should avoid
    using those buggy memory managers.
        链式加载的默认动作是保持 A20 的状态。一些有缺陷的 DOS 扩展内存管理软
        件可能会令机器死掉。你可以在chainloader命令行中使用--disable-a20选项
        然后再试一次。至少，你应当避免使用那些有缺陷的内存管理软件。

3.	THTF BIOS L4S5M Ver 1.1a(dated 2002-1-10) has a buggy int15 which
    causes hang at the boot of a multi boot kernel(memdisk for example).
        OEM签名为清华同方，主板为精英L4S5M， BIOS版本1.1a(日期 2002-1-10)
        的机器上，其 int15 含有缺陷，当它启动一个多重引导核心时，会失去响应。
       （比如使用syslinux的memdisk时）

4.	A Chinese DOS system software, the TechWay SCS, will not work with
    newer versions of GRUB.EXE. In general, TSRs that take antitracking
    measures will not work with GRUB.EXE any more.
        在一个中文 DOS 系统软件，天汇标准中文系统中，较新的GRUB.EXE不能运行。
        总之，在具有反跟踪措施的内存驻留程序的系统下GRUB.EXE不再运行。

******************************************************************************
***        List of binary files and their corresponding source files       ***
******************************************************************************
           二进制文件及对应的源代码文件列表

binary file	main source file	other included source or binary files
二进制文件      源代码主文件            包含的其他源代码或二进制文件
-------------   ----------------	-------------------------------------

bootlace.com	bootlacestart.S		bootlace.inc, grldrstart.S

grldr		grldrstart.S		pre_stage2(binary, See note below)

grldr.mbr	mbrstart.S		grldrstart.S

grub.exe	dosstart.S		pre_stage2(binary, See note below)

hmload.com	hmloadstart.S

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

Note: pre_stage2 is the main body of GNU GRUB and it is simply appended to
grldrstart/dosstart in binary format to form our grldr/grub.exe.
注意：pre_stage2 是GNU GRUB的主体程序，它以二进制格式被简单的添加到grldrstart
      及dosstart部分，形成我们的grldr和grub.exe 。

Note: The GRUB file(WITHOUT .EXE suffix) is a static-linked ELF executable
program for Linux, normally called the GRUB Shell. The GRUB Shell is a boot-
manager, but not a boot-loader(the "boot" command won't work in GRUB Shell).
GRUB.EXE(with KEXEC) can be used as a bootloader running directly under Linux.
注意：GRUB （无.exe后缀）在Linux下是一个静态链接的 ELF 格式的可执行文件，它
可以被GRUB Shell正常调用。GRUB Shell 是一个启动管理软件，但并不是一个引导装
载器（boot 命令在GRUB Shell里不能执行）。GRUB.EXE （通过KEXEC）能作为一个引
导装载器直接在 Linux 下使用。

******************************************************************************
***             Memory Layout for Quiting to DOS from GRUB.EXE             ***
******************************************************************************
                GRUB.EXE 返回 DOS 时的内存布局

The quit command is implemented to return to DOS in the instance that GRUB.EXE
is started off DOS.
使用 quit 命令实现返回到DOS，是在GRUB.EXE是从DOS启动的情况下。

1. Before GRUB.EXE transfers control to pre_stage2, it will copy 640KB of
conventional memory to physical address 0x200000(i.e., 2MB), and write 4 long
integers immediately follows the backup copy of the conventional memory:
在GRUB.EXE 将控制权移交给 pre_stage2 之前，它将复制 640 kb的常规内存到
  物理地址0x200000 （即，2 M）处，并将立即写入4 字节的长整数到常规内存备
  份区之后：

    At 0x2A0000:	0x50554B42, it is the "BKUP" signature.
                        0x50554b42, 它是“BKUP”的签名 。

    At 0x2A0004:	Gate A20 status under DOS: non-zero means A20 on;
            zero means A20 off. Update: A20 always on, see below.
                        DOS下的A20地址线门状态：非零表示A20开启；零表示A20
                        地址线关闭。更新：A20 始终开启，参见后面。

    At 0x2A0008:	high word is boot-CS, low word is boot-IP. The quit
            command uses this entry point to return to DOS.
                        高字节是引导的代码段段地址，低字节是引导的指令指针值。
                        退出命令 quit 使用这个入口点返回DOS。

    At 0x2A000C:	CheckSum: the sum of all long integers in the memory
            range from 0x200000 to 0x2A000F is 0.
                        校验和：内存范围从0x200000 到 0x2A000F的所有长整数的
                        和为 0 。

2. If the above memory structure is corrupted by a grub command, the quit
command will issue an error message and refuse to exit from grub.
   如果上述内存结构被某个grub命令所破坏，quit命令将发出一条错误提示信息而
   拒绝从grub中退出。

3. Because GRUB may corrupt extended memory, you should better avoid using
extended memory under DOS before running GRUB.EXE.
   由于GRUB可能破坏扩展内存，在DOS下你最好避免在GRUB.EXE运行前使用扩展内存。

4. Gate A20 will be enabled by GRUB.EXE. Hopefully this would hurt nothing.
   GRUB.EXE将开启A20 地址线。真希望这不会危及任何东西。

******************************************************************************
***             Memory usage in conventional/low memory area               ***
******************************************************************************
                常规内存/低端内存空间的内存使用

1. boot.c, fsys_reiserfs.c: 8K below 0x68000.

2. fsys_ext2fs.c, fsys_minix.c: 1K below 0x68000.

3. fsys_jfs.c: 4K + 256 bytes below 0x68000.

4. fsys_reiserfs.c: 202 bytes at 0x600.

5. fsys_xfs.c: 188 bytes at 0x600.

6. fsys_xfs.c: (logical block size) bytes below 0x68000.

7. geometry tune: 0x50000 - 0x5ffff.

******************************************************************************
***                Command-line Length about GRUB.EXE                      ***
******************************************************************************
                   关于GRUB.EXE的命令行长度

GRUB.EXE now can be started in CONFIG.SYS with the **DEVICE** command:
GRUB.EXE 可以通过CONFIG.SYS中的DEVICE命令来启动：

    DEVICE=grub.exe [--config-file="FILENAME_OR_COMMANDS"]

1. If GRUB.EXE is invoked with DEVICE command and FILENAME_OR_COMMANDS is a
collection of some GRUB commands separated by semi-colon, then the length of
FILENAME_OR_COMMANDS can be nearly 4KB ----Supprise? But true!  MS-DOS 7+
even allows a much longer line, but 4KB seems enough for our use of GRUB.EXE.
This is very useful when we want to embed a big menu into the command line.
Note that GRLDR hasn't yet supported any command-line arguments.
   如果GRUB.EXE是被DEVICE命令调用而且FILENAME_OR_COMMANDS 参数是一个由分号分
   隔的grub命令集合,那么FILENAME_OR_COMMANDS可以接近4 KB长 ----很吃惊?但这是
   事实！MS-DOS 7及以上版本即使允许更长的行，但看起来4 KB对GRUB.EXE足够了。
   当我们希望将一个大菜单嵌入到命令行时，这是非常有用的。注意 grldr 还不支持
   任何命令行参数。

2. If GRUB.EXE is invoked with INSTALL command, the option length has a limit
of 80 characters(including the leading "--config-file=" part). An overflow may
hang up MS-DOS immediately.
   如果GRUB.EXE是被INSTALL命令调用，那么选项长度的限制是80个字符（包括开头的
   --config-file= 这部分）。超出的话可能会立即将MS-DOS挂起。

3. If GRUB.EXE is invoked with SHELL command, the option length has a limit of
126 characters(including the leading "--config-file=" part). Overflow won't
hang up MS-DOS, but the line will be cut short. This limit is the same as that
in the console-DOS-prompt or in a BAT file.
   如果GRUB.EXE是被SHELL命令调用，那么选项长度的的限制是126个字符（包括开头的
   --config-file= 这部分）。超出的话虽然不会将 MS-DOS 挂起，但命令行将被截短。
   这和 DOS 控制台或批处理文件中命令的限制是一样的。

4. The DOS editor EDIT does not allow to create a line of 4KB long. So use
another editor, for example, vi for Linux, please.
   DOS编辑器EDIT不允许建立一个4 KB长的行。所以请使用其他编辑器，例如，vi for Linux 。

5. The DEVICE=GRUB.EXE line can be used together with other DEVICE commands
such as DEVICE=HIMEM.SYS and DEVICE=EMM386.EXE. The GRUB.EXE line should
occur before the EMM386.EXE line in order to avoid the rejection by EMM386.
Update: Since 0.4.2, GRUB.EXE works well even after EMM386.EXE is loaded.
   DEVICE=GRUB.EXE 这一行可以和其他的DEVICE命令同时使用，如DEVICE=HIMEM.SYS
   及DEVICE=EMM386.EXE等。配置命令里的GRUB.EXE所在行必须出现在EMM386.EXE所在
   行的前面，以避免因EMM386而冲突。
   更新 ：从0.4.2版本起，GRUB.EXE在EMM386.EXE加载后，运行得仍很好。

6. In any case mentioned above, you can return back to DOS by quit command.
   在以上提到的任何情况下，你都可以通过quit命令返回到DOS 。

7. Memory usage about command-line menu: The 4KB command-line menu starts at
physical address 0x0800 and ends at 0x17FF.
   命令行菜单的内存使用：4 KB长的命令行菜单起始于物理地址0x0800而终止于0x17ff。

******************************************************************************
***          New Syntax for the DEFAULT/SAVEDEFAULT Commands               ***
******************************************************************************
             DEFAULT 及 SAVEDEFAULT 命令的新语法

In addition to the original usage of "default NUM" and "default saved", now
there is a new usage of "default FILE", like this:
相对于原来的用法"default NUM"及"default saved "增加的部分，现在有一个新用
法"default FILE"，象这样:

        default (hd0,0)/default

Note that FILE must have a valid DEFAULT file format. A sample DEFAULT file
is included in the release. You may copy it to wherever you like, but you
should avoid modifying its content manually. The DEFAULT file may be used
in this way:
注意参数FILE必须是一个有效的DEFAULT文件格式。一个简单的DEFAULT文件就包含
在发行版中。你可以复制它到你希望的地方，但是你应该避免手工修改它的容量。
DEFAULT文件可以按以下方法使用：

(1) First, you should copy a default file with valid format to somewhere in
your operating system.
    首先，你要复制一个格式有效的default文件到你运行的系统上。

(2) Secondly, you should use the "default FILE" command of GRUB to announce
the use of FILE as our new default file for being written by "savedefault".
    其次，你要使用GRUB中的"default FILE"命令来表明是使用这个FILE作为我们新
    的预设文件，以便"savedefault"命令执行时写入它。

(3) Then, you may use "savedefault" command to save the desired entry number
into this new default file.
    然后，你可以使用"savedefault"命令来把想要的入口数字保存到这个新的预设文
    件中。

(4) OK, at next boot, you may read the saved entry number by using the same
"default FILE" command as mentioned in above (2).
    好了，下次启动时，你可以通过使用类似上面第二步骤中的"default FILE"一样的
    命令来读取已保存的入口数字。

And the SAVEDEFAULT command now accept an options `--wait=T', like this:
同时，SAVEDEFAULT 命令增加了一个选项 --wait=T ,象这样：

        savedefault --wait=5

If `--wait=T' is specified and T is non-zero, savedefault will prompt
the user with a message just before it writes to disk. The write operation
will be cancelled in T seconds if the `Y' key was not pressed.
如果`--wait=T' 选项被指定而且 T 非零，savedefault 命令将在它就要写入磁盘
前，给使用者一个提示信息。

Here is a sample menu.lst file:
这里是一个简单的menu.lst文件：

#--------------------begin menu.lst---------------------------------------
color black/cyan yellow/cyan
timeout 30
default /default

title find and load NTLDR of Windows NT/2K/XP
find --set-root /ntldr
chainloader /ntldr
savedefault --wait=2

title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
fallback 2
find --set-root /cmldr
chainloader /cmldr
#####################################################################
# write string "cmdcons" to memory 0000:7C03 in 2 steps:
#####################################################################
# step 1. Write 4 chars "cmdc" at 0000:7C03
write 0x7C03 0x63646D63
# step 2. Write 3 chars "ons" and an ending null at 0000:7C07
write 0x7C07 0x00736E6F
savedefault --wait=2

title find and load IO.SYS of Windows 9x/Me
find --set-root /io.sys
chainloader /io.sys
savedefault --wait=2

title floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
savedefault --wait=2

title find and boot Linux with menu.lst already installed
find --set-root /sbin/init
savedefault --wait=2
configfile /boot/grub/menu.lst

title find and boot Mandriva with menu.lst already installed
find --set-root /etc/mandriva-release
savedefault --wait=2
configfile /boot/grub/menu.lst

title back to dos
savedefault --wait=2
quit

title commandline
savedefault --wait=2
commandline

title reboot
savedefault --wait=2
reboot

title halt
savedefault --wait=2
halt
#--------------------end menu.lst---------------------------------------

Note 1:	The file DEFAULT must exist and have a proper format as stated above.
    Or else, the default/savedefault commands won't function well.
注意 1：预设文件 DEFAULT 必须是存在的而且具有和前面所述一样严格的格式。

Note 2:	The file DEFAULT which is in the same dir as a certain MENU.LST file
    is called associated with the MENU.LST file.
注意 2：在一个确信有 MENU.LST 文件的相同目录中的 DEFAULT 文件将和 MENU.LST 文
        件一起被联合调用

Note 3:	The associated DEFAULT file will take effect automatically if there
    are no `default' commands present.
注意 3：即使没有出现`default'命令，被关联的 DEFAULT 文件也将自动生效。

Note 4:	Just before a menu file gains control(e.g., it is the associated
    MENU.LST of a GRLDR file, or it was specified via
    `grub.exe --config-file=(DEVICE)/PATH/YOUR_MENU_FILE', or it was
    specified by the `configfile' command of grub), its associated
    DEFAULT file will be used if present, until an explicit `default'
    command is encountered.
注意 4：就在菜单文件（诸如，GRLDR 的关联文件MENU.LST,或是通过
        `grub.exe --config-file=(DEVICE)/PATH/YOUR_MENU_FILE'来指定的，
        或是通过grub的`configfile'命令来指定的）取得控制权之前，它的
        关联文件DEFAULT只要出现就会被使用，直到遇见了一个明确的`default'命令。

******************************************************************************
***                   The New `cdrom' Command Syntax                       ***
******************************************************************************
                      新的 `cdrom' 命令的语法

1. Initialize the ATAPI CDROM devices:
   初始化ATAPI接口的CDROM设备：

    grub> cdrom --init

   This will display the number of atapi cdroms found: atapi_dev_count
   这会显示被找到的atapi接口的cdrom光驱的数目：参数为 atapi_dev_count

2. Stop the ATAPI CDROM devices:
   停止ATAPI接口的CDROM设备：

    grub> cdrom --stop

   This will set atapi_dev_count to 0.
   这会设置参数atapi_dev_count为0 。

3. Add IO ports for searching the atapi cdrom devices. For example:
   增加搜索atapi cdrom设备的IO端口。例如：

    grub> cdrom --add-io-ports=0x03F601F0

After running `cdrom --init' and `map --hook', the cdroms can be accessed
through devices (cd0), (cd1), ...
   在执行`cdrom --init'以及`map --hook'命令后，cdrom光驱可以通过(cd0),
   (cd1), ...等设备号来访问。

Note 1: If the system does not fully support the ATAPI CD-ROM specifications,
    you will encounter failure when trying to access the (cdX) devices.
注意 1：如果系统不完全支持ATAPI CD-ROM 规范，在你试图访问这些（cdX）设备时将
        遭遇失败。

Note 2: After doing a `cdrom --stop', you should do a `map --unhook'. Of
    course you may `map --hook' again if there are mapped drives.
注意 2：在执行一条`cdrom --stop'命令后，你应当使用一条`map --unhook'命令。当然，
        你可以再次使用`map --hook'命令，假如还有驱动器被映射着的话。

Note 3: After adding IO ports, you should do a `map --unhook' followed by a
    `cdrom --init' and then followed by a `map --hook'.
注意 3：在增加IO端口之后，你应当接着`cdrom --init'执行一条`map --unhook'命令然
        后再接着执行一条`map --hook'命令。

    By default, these ports are used for searching cdroms(so they needn't
    be added):
        作为默认，将使用这些端口来搜索cdrom设备（因此它们不用再添加了）

        0x03F601F0, 0x03760170, 0x02F600F0,
        0x03860180, 0x6F006B00, 0x77007300.

Note 4: The BIOS might have offered a cdrom interface. It would be (cd). After
    `cdrom --init' and `map --hook', we might have our (cd0), (cd1), ...
    available. It is likely that one of them could access the same media
    as the BIOS-offered (cd).
注意 4：BIOS可能已经提供了cdrom 的接口。它的设备号总是（cd）。在 `cdrom --init'
        和 `map --hook' 执行后，我们可以有我们自己有效的(cd0), (cd1), ...等设备。

Note 5: You may access the (cd) and (cdX)'es in the blocklist way. Example:
注意 5：你可以用块列表的方式去访问（cd）和 （cdX）等设备。示例:

        cat --hex (cd0)16+2

    The cdrom sectors are big sectors with a size of 2048 bytes.
        cdrom 扇区是大小为 2048 字节的大扇区。

Note 6:	The iso9660 filesystem driver has Rock-Ridge extension support, but
    has no Joliet extension support. So you may encounter failure when
    you attempt to read files on a Joliet CD.
注意 6：我们的iso9660文件系统驱动具有Rock-Ridge扩展支持，但没有Joliet扩展支持。
        因此当你试图在一个使用Joliet扩展的光盘上读取文件时，可能遭遇失败。

Note 7: The (cd) or (cdX)'es can be booted now. Examples:
注意 7：现在，（cd）及 （cdX）设备可以被引导了。示例：

        chainloader (cd)
        boot

        chainloader (cd0)
        boot

        chainloader (cd1)
        boot

    You should already have access to the CD sectors before you can
    chainload it.
        在链式加载CD 光盘的扇区前，你就已经可以能访问它了。

******************************************************************************
***                   About the New `setvbe' Command                       ***
******************************************************************************
                      关于新命令 `setvbe'

Gerardo Richarte contributed the `setvbe' code and the following comment:
Gerardo Richarte 先生提供了`setvbe'的源码，下面是注释：

    New command is `setvbe', and can be used to change the video mode
    before executing the kernel.
        `setvbe'是一个新的命令，它可以在系统核心运行前被用来改变视频模式。

    For example, you can do
        例如，你可以执行

        setvbe 1024x768x32

    this will scan the list of available modes and set it, and
    automatically append a `video=' option to each subsequent kernel
    command-line. The appended `video=' option is like this:
        这会扫描出其可用模式的列表并设置它，并且自动在随后的每个kernel命令
        行中增加一个选项`video='。增加的选项`video='类似于：

        video=1024x768x32@0xf0000000,4096

    where 0xf0000000 is the video framebuffer address as reported by vbe,
    and 4096 is the size of a scanline in bytes (also as reported by vbe).
        这里的0xf0000000是vbe报告的视频模式的帧缓存地址，而4096是扫描线的字节大小。

    This is really useful if you want to give some graphics support to your
    OS, but you don't want to implement any video functionality other than
    writing a pixel to video memory.
        如果你想在你的操作系统上获得一些图形支持，但是除了只写一个像素点到视频内
        存而外，你却不想使用任何视频功能，这确实有用。

******************************************************************************
***                   About the DOS utility `hmload'                       ***
******************************************************************************
                      关于DOS工具`hmload'

This program was written by John Cobb (Queen Mary, University of London).
此程序由 John Cobb 先生编写（伦敦玛丽皇后学院）。

John Cobb's note:
John Cobb先生的注释：

    To make use of the ram drive feature I wrote a program `hmload' to load
    an arbitrary file to an arbitrary address in high memory. The program
    is not very sophisticated and relies on XMS to turn on the A20 line.
    (Also one must be very careful to steer clear of any areas of memory
    already in use).
        为了使用内存驱动器的特性，我写了一个程序“hmload”来将任意文件加载
        到高端内存的任意地址。这个程序不是十分深奥但依赖在XMS 里开启A20地址线。
        （并且必须将那些已经使用了的任何内存空间精心的清理干净）

    Under Linux we generated a disk image `dskimg' (with the kernel and
    Initrd and a partition table).
        我们在linux下生成一个磁盘映象“dskimg”（包含kernel和initrd及一个分区表）。

    Using this our boot procedure looked something like this:
        我们的引导过程看起来是下面这样：

    hmload -fdskimg -a128
    fixrb
    <unload network drivers>
    grub

        map --ram-drive=0x81
        map --rd-base=0x8000000
        map --rd-size=0x400000
        root (rd,0)
        kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
        initrd /initrd
        boot

See http://sysdocs.stu.qmul.ac.uk/sysdocs/Comment/GrubForDOS/ for details.
详情参阅 http://sysdocs.stu.qmul.ac.uk/sysdocs/Comment/GrubForDOS/

Update 2007-12-05:
更新   2007-12-05 ：

    Now the MAP command can handle gzipped (rd) image. One can use this
    feature with the hmload utility. For example,

    step 1. Load the gzipped image under DOS at a relatively low address:
        步骤 1. 在DOS的相对较低的地址处加载gzip压缩映像：

        hmload -fdskimg.gz -a16

    step 2. Unload network drivers.
        步骤 2  卸载网络驱动器

    step 3. Run GRUB.EXE.
        步骤 3.  运行 GRUB.EXE

    step 4. At the grub prompt, run these commands:
        步骤 4.  在grub 命令提示符下，执行下列命令：

        map --rd-base=0x1000000	# set rd-base address to be 16M
                                        # 设置rd-base地址为16M

        map --rd-size=<the accurate size of dskimg.gz in bytes>
                              < dsking.gz 精确的字节数 >

        map (rd)+1 (hd0)	# This will decompress (rd) and place
                    # the decompressed image at the top end
                    # of the extended memory. The (rd)+1
                    # here has special meaning and stands
                    # for the whole (rd) device. You must
                    # use (rd)+1 instead of (rd).
                                        # 这会将（rd）解压并且把解压后的映像放到扩展内存的顶端。
                                        # 这里的(rd)+1具有特定的含义而且将整个（rd）设备放到了顶端。
                                        # 这里你必须使用 (rd)+1 来替代(rd)。
        map --hook
        root (hd0,0)
        kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
        initrd /initrd
        map --unhook
        map (hd0) (hd0)		# Delete the map; this is needed.
                                        # 删除map映射；这是需要的
        boot

******************************************************************************
***                      Notes on the use of stack                         ***
******************************************************************************
                         关于堆栈的注释
The protected-mode and real-mode stack are merged at physical address 0x2000.
保护模式与实模式的堆栈被合并到物理地址 0x2000 处。

All functions should use at most 2K stack space(0x1800-0x2000). So each
subfunction should use as little stack as possible to avoid stack-overflow.
所有的功能应当最多使用 2K 的堆空间 （0x1800到0x2000）。因此各个子功能部分
应当使用尽可能小的堆以避免堆栈溢出。

Don't use recursive functions because they could expend too much stack space.
不要使用递归功能，因为他们会消耗太多的堆空间。

The original protected mode stack at 0x68000(expand-down) is free now and can
be reused for any purposes.
原来位于0x68000（向下延伸）的保护模式的堆现在不再使用，并且它可以被用于任何目的。

******************************************************************************
***                  A bug was found in the CDROM driver                   ***
******************************************************************************
                     CDROM 驱动器上发现的缺陷

It seems the cdrom must be connected as the master device of an IDE controller.
似乎 cdrom 应当连接在IDE控制器的主设备通道上。

If cdrom is slave, the driver will fail to read the cdrom sectors. Hope someone
could fix this problem.
如果 cdrom 是从设备，读取cdrom扇区的驱动将失败。希望有人能解决这个问题。

******************************************************************************
***                        BIOS and the (cd) drive                         ***
******************************************************************************
                           BIOS 与 （cd）驱动器

When BIOS boots a no-emulation-mode bootable CD-ROM, it allocates a BIOS drive
number to the CD. If the boot image of the CD-ROM is grldr or stage2_eltorito,
then GRUB can access the CD-ROM media through the drive number allocated by
BIOS. The device name of the CD-ROM is (cd).
当BIOS启动一个非模拟模式的可启动的CD-ROM设备时，它会分配一个BIOS驱动器号给这个
CD设备。如果这个CD-ROM使用grldr或stage2_eltorito作为启动映像文件，那么GRUB可以
通过BIOS分配的驱动器号来访问这个CD-ROM 媒体。

BIOS can allocate a BIOS drive number to a no-emulation-mode CDROM even when
the CDROM is not bootable. QEMU has done so. At boot time, GRUB4DOS will
search drives 0x80-0xFF for a possible no-emulation-mode CDROM drive allocated
by BIOS. So if BIOS offered a CDROM interface of int13 EBIOS functions 41h-4Eh,
then the (cd) device will be automatically available in GRUB4DOS.
BIOS 会分配一个驱动器号给非模拟模式启动的CDROM 设备，即使这个CDROM 是不能启动的。
虚拟机QEMU就是这样处理的。在引导的时候，GRUB4DOS将搜索那些由BIOS分配的，驱动器号
从0x80至0xFF的，可能存在的非模拟模式的CDROM 驱动器。 所以，如果BIOS为CDROM提供了
扩展int13（功能号41h-4eh）接口，那么这个（cd）设备自动在GRUB4DOS 中有效。

******************************************************************************
***              The way of disk emulation changed greatly                 ***
******************************************************************************
                 磁盘仿真方式发生了巨大变化

The way of disk emulation has changed greatly since 0.4.2 final. Please don't
mix newer versions with older versions when disk emulation features are used.
磁盘仿真方式自从0.4.2正式版之后已经发生了巨大变化。在使用磁盘仿真功能时候，
请不要将较新的版本和旧的版本混合使用。

The newer versions won't automatically unhook emulations established in a
previous grub4dos environment. The GRUB.EXE of an older version will
automatically dismiss emulations established earlier, before transferring
control to the main grub program(i.e., pre_stage2).
较新的版本不会自动卸载之前已经在grub4dos环境建立的仿真盘。GRUB.EXE 的一个
很古老的版本，在将控制权移交给grub主程序（即，pre_stage2）前，将会自动释放
先前建立的仿真盘。

******************************************************************************
***            FreeDOS EMM386 v2.26 (2006-08-27) VCPI problem              ***
******************************************************************************
               FreeDOS EMM386 版本2.26 (2006-08-27) VCPI服务的问题

The VCPI function "AX=DE0Ch - Switch From Protected Mode to V86 Mode" of
FreeDOS EMM386 v2.26 was not implemented properly(it always hangs). As an
alternative, you can use Microsoft's EMM386 instead.
FreeDOS 的 EMM386 版本2.26 中的VCPI服务，“功能号 AX=DE0Ch-选择从
保护模式到虚拟8086模式”，不能正确的执行（总是死机）。选择之一是，
你用微软的 EMM386 来代替它。

Even while emm386 is running, grub.exe can be started. But if you try to quit
to DOS from grub4dos by using the `quit' command, the VCPI function DE0C will
be called. If EMM386 is of Microsoft, everything goes ok. If EMM386 is of
FreeDOS, the machine will hang.
即使emm386已经运行，grub.exe也能够启动。但是如果你试图从grub4dos中通过`quit'
命令来返回DOS，VCPI 服务的DE0C 号功能将被调用。如果是微软的 EMM386 ，接下来的
一切都很正常 。而如果是FreeDOS 的 EMM386 ，那么将会死机。

******************************************************************************
***                 New options for map were added                         ***
******************************************************************************
                    map 命令的新增选项

Along with 0.4.2 final, there are two new options for the map command. They
are --safe-mbr-hook=SMH and --int13-scheme=SCH. Both are related with disk
emulation for use(as smoothly as possible) in the Win9x environment.
随着0.4.2 最终版的发布，map 命令有了两个新选项。它们是--safe-mbr-hook=SMH
以及--int13-scheme=SCH 。它们都和Win9x环境下（尽可能稳定的）使用磁盘仿真有关。

SMH can take either of the two values 0 and 1. By default, SMH is 1. If you
encountered problems of disk emulation under Win9x, you may insert a line of
SMH参数可以是0或1这个两个值之一。作为默认，SMH参数为1 。如果你在Win9x中遇到
磁盘仿真的问题，你可以插入这样一行到`boot'命令之前，

    map --safe-mbr-hook=0

before the `boot' command and try again.
然后再试一次。

Also SCH may take either 0 or 1 at present. By default, SCH is 1. If you
encountered disk emulation problems under Win9x, you may insert a line of
SCH在使用时，也可以取0或1之一的值。作为默认，SCH为1 。如果你在Win9x中遇到
磁盘仿真的问题，你可以插入这样一行到`boot'命令之前，

    map --int13-scheme=0

before the `boot' command and try again.
然后再试一次。

Note by the way. Like --safe-mbr-hook and --int13-scheme, the MAP command has
a few other options that are used for setting global variables. They are here:
注意 顺便提一下。类似于--safe-mbr-hook和--int13-scheme ，MAP命令中有几个其他
选项可被用以设置全局变量。

    map --floppies=M

M can be 0, 1, or 2. MAP will set a proper value at 0040:0010 by using M.
其中的M 可以是0 , 1 或者2 。MAP 将把一个恰当的M 值设置在地址0040：0010 处。

    map --harddrives=N

N can be between 0 and 127(inclusive). MAP will set 0040:0075 to N.
其中的N 可以是从0到127之间的值。MAP将把N 值设置在0040：0075处。

    map --memdisk-raw=RAW

RAW default to 1. If RAW=0, `int15/ah=87h' will be used to access memdrives.
其中的RAW默认为1 。如果RAW=0,将通过`int15/ah=87h'访问内存驱动器。

    map --ram-drive=RD

RD default to 0x7F which is a floppy. If the RAM DRIVE is a hard drive image
(with partition table in the first sector), you should set RD >= 0x80 and RD
< 0xFF.
其中的RD默认是0x7F的软驱号。如果随机内存驱动器是一个硬盘驱动器印象（第一扇区
含有分区表的），那么你可以将 RD 设置为 大于或等于0x80 或 小于 0xFF 的值 。

    map --rd-base=ADDR

    map --rd-size=SIZE

ADDR specifies the physical base address of the ramdisk image. SIZE specifies
the size in bytes of the ramdisk image. ADDR default to 0. SIZE is also default
to 0, but a size of 0 means 4GB, not a zero-long disk. The RAM DRIVE can be
accessed in the GRUB environment using the (rd) device.
其中的 ADDR 指定出内存映像的物理基地址。SIZE指定出内存映像的字节数大小。ADDR
默认为0 。SIZE的默认值也是0 ，但是值为0 表示4 GB ,而不是零字节长的磁盘。随机
内存驱动器可以在 GRUB 环境中通过使用 （rd） 设备来访问。

******************************************************************************
***                   About the new map option --in-situ                   ***
******************************************************************************
                      关于 map 的新选项 --in-situ

--in-situ is used with hard drive images or hardrive partitions. With an
in-situ map, we can typically use a logical partition as a primary partition.
--in-situ被使用于硬盘驱动器映像或者是硬盘驱动器分区。通过--in-situ ,我们可以把
一个逻辑分区象征性的作为一个主分区来使用。

In-situ map is a whole drive map. It only virtualize the partition table and
the number of hidden sectors in the BPB of the DOS Boot Record.
--in-situ 的映射是整个驱动器的映射。它只虚拟出分区表和 DBR 上的BPB里的隐藏扇区数。

While disk emulation may encounter various problems with win9x, the in-situ map
works fine with win9x.
尽管磁盘仿真在 win9x 中可能会遇到的各种问题，但在win9x中，in-situ的映射却运行得很好。

Note that --in-situ will not change the real partition table.
注意 --in-situ 的映射不会改变真实的分区表。

Example:
示例:
    map --in-situ (hd0,4)+1 (hd0)

******************************************************************************
***                      The PARTNEW Command Syntax                        ***
******************************************************************************
                         PARTNEW 命令的语法

Besides the mappings in the above section, you may instead choose to create a
new primary partition with the PARTNEW command. PARTNEW can generate a primary
partition entry (in the partition table) for a logical partition.
除了上述章节的仿真方法而外,你也可以替代选择用 PARTNEW 来建立一个新的主分区。
PARTNEW可以为逻辑分区生成一个新的主分区项（在分区表中）。

For example,
例如，

    partnew (hd0,3) 0x07 (hd0,4)+1

where the file (hd0,4)+1 stands for the whole partition (hd0,4). This command
will create a new primary partition (hd0,3) whose type is 0x07 and whose
contents/data is the same as that of the logical partition (hd0,4).
这里的（hd0,4）+1 代表了整个（hd0,4）分区。这条命令将建立一个分区类型为 0x07
的新的主分区（hd0,3），并且它的内容（即数据）和逻辑分区（hd0,4）一样。

Just like a whole logical partition, a contiguous partition image file can
also be used with PARTNEW:
就像整个逻辑分区时的情况一样，一个连续的分区映像文件也可以用在PARTNEW 命令中：

    partnew (hd0,3) 0x00 (hd0,0)/my_partition.img

The type 0x00 indicates a type-auto-detection of the image MY_PARTITION.IMG.
The above command will create a new primary partition (hd0,3) with a proper
type and with contents/data being exactly that of the contiguous file
(hd0,0)/my_partition.img.
这个 0x00 类型表示这个 MY_PARTITION.IMG 映像文件的分区类型由自动检测确定。
上面的命令将建立一个类型恰当的新的主分区（hd0,3），并且使用这个连续的
  (hd0,0)/my_partition.img 文件中的全部内容（数据）作为它的内容（数据）。

PARTNEW will automatically correct the "hidden sectors" in the BPB and the
modification will be permanent. And PARTNEW modifies the partition table
permanently.
PARTNEW 将自动修正 BPB 中的“隐藏扇区数”并且这个修改是永久的。而且PARTNEW
修改分区表也是永久的。

In addition to creating new partition entries, PARTNEW can also be used to
delete(erase, or wipe) a primary partition entry. For example,
除了建立分区表项外，PARTNEW也可以用来删除（抹掉，擦除）一个分区表项。例如，

    partnew (hd0,3) 0 0 0

which will empty the last entry in the partition table in MBR. Generally,
you should use the form of "partnew PARTITION 0 0 0" to erase the entry.
Note that only the entry would be erased, and the data stored in the partition
will not be touched.
这样，主引导记录中最后一个分区表项将被清空。通常，你可以用"partnew PARTITION 0 0 0"的格式来
抹掉其分区表项，但是已经存储在这个分区中的数据不被影响。

******************************************************************************
***              Newly implemented operators `&&' and `||'                 ***
******************************************************************************
                 最近实现的运算符 `&&' and `||'

This implementation is very simple. It does not handle operator nesting.
它的实现非常简单。它不处理嵌套的运算符。

Usage of `&&':
`&&'的用法：

    command1 && command2

Description:
说明 ：

    If command1 returns true, then command2 will be executed.
        如果 command1 返回 真，那么 command2 将执行

Usage of `||':
`||'的用法：

    command1 || command2

Description:
说明 ：

    If command1 returns false, then command2 will be executed.
        如果 command1 返回 假，那么 command2 将执行

Examples:
示例：
    is64bit && default 0
    is64bit || default 1

******************************************************************************
***          Three new commands is64bit, errnum and errorcheck             ***
******************************************************************************
             三个新命令 is64bit, errnum 和 errorcheck

is64bit and errnum retrieve the value of is64bit and errnum respectively.
is64bit 和 errnum 命令分别用来检索是否是 64 位的系统和错误值。

errorcheck controls whether or not the error will be handled. By default,
errorcheck is on, and menu script execution will stop on error. If errorcheck
is off, the script will continue to execute upto a boot command. A boot command
will turn the errorcheck on.
errorcheck（错误检查）命令控制着错误是否被处理。作为默认，错误检查是开启的 ,即在
错误发生时命令脚本将停止执行。而假如错误检查是关闭的，那么脚本将一直执行到 boot
命令。一条 boot 命令可以把错误检查转变为开启。

******************************************************************************
***              Use numeric keys to select a menu entry                   ***
******************************************************************************
                 使用数字键来选择菜单项

If, for example, you intend to goto entry #25, you may press 2 followed by 5.
例如，如果你想要选择第25项菜单项，你可以先按下数字键2 之后再按下 5 。

******************************************************************************
***           Use the INSERT key to debug step by step at startup          ***
******************************************************************************
              启动时使用 INSERT 键逐步的调试

Some buggy machines could fail to enter grub4dos environment. They might hang
or reboot unexpectedly. Press INSERT as quickly as possible on startup, and
you can get a chance to single-step the boot process and see how far it can
go, and then report bugs.
在一些缺陷多的机器上进入 grub4dos 环境时可能会失败。那或许是意外的死机或者重启。
在启动时尽可能快的按下 INSERT 键，你就可能获得进入单步启动进程的机会而看到它最
多能运行到哪里，而后请上报这些故障 。

******************************************************************************
***             The debug command syntax has been changed                  ***
******************************************************************************
                debug 命令的语法已经改变

The DEBUG command now can be used to control the verbosity of command output:
DEBUG 命令现在可以用来控制冗长的命令输出：

        debug [ on | off | normal | status | INTEGER ]

0 or off for silent
0 或者 off 指定为静默模式

1 or normal for normal
1 或者 normal 指定为标准模式

2 to 0x7FFFFFFF or on for verbose
从 2 到 0x7fffffff 或者 on 指定为冗长模式

******************************************************************************
***                     GRUB4DOS and Windows Vista                         ***
******************************************************************************
                        GRUB4DOS 与 Windows Vista

First, use the following command to create a boot entry:
首先，使用以下命令来建立一个启动项：

    bcdedit /create /d "GRUB for DOS" /application bootsector

The result will look like this:
执行结果看起来类似这样：

The entry {05d33150-3fde-11dc-a457-00021cf82fb0} was successfully created.

The long string {05d33150-3fde-11dc-a457-00021cf82fb0} is the id for this
entry.
其中的长字串{05d33150-3fde-11dc-a457-00021cf82fb0} 是这个项的数字标识。

Then, use the following commands to set boot parameters:
然后，通过以下命令来设置启动参数：

    bcdedit /set {id} device boot
    bcdedit /set {id} path \grldr.mbr
    bcdedit /displayorder {id} /addlast

Please replace {id} with the actual id returned from the previous command.
请用先前的命令所返回的实际的id 来替换掉 {id}。

Finally, copy GRLDR.MBR to C:\ or wherever your boot drive is, and copy GRLDR
and menu.lst to the root directory of any FAT16/FAT32/EXT2/NTFS partition.
最后，复制 GRLDR.MBR 到 你引导设备的 C盘根目录下，并且将 GRLDR 和 menu.lst 复制到
任意一个 FAT16/FAT32/EXT2/NTFS 的分区根目录下。

Note: A boot partition should be the active primary partition with BOOTMGR
      inside. The `device boot' indicates grldr.mbr should be in the boot
      partition.
注意：引导分区必须是含有 BOOTMGR 的激活的主分区。

Lianjiang has written down a script to automate the tasks:
LianJiang 先生写出了一个脚本来自动化的完成这个麻烦事：

    @echo off
    rem by lianjiang
    cls
    echo.
    echo   Please run as administrator
    echo.
    pause
    set gname=GRUB for DOS
    set vid=
    set timeout=5
    bcdedit >bcdtemp.txt
    type bcdtemp.txt | find "\grldr.mbr" >nul && echo. && echo  BCD entry existing, no need to install. && pause && goto exit
    bcdedit  /export "Bcd_Backup" >nul
    bcdedit  /create /d "%gname%" /application bootsector >vid.ini
    for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do (
                  set vida=%%i
    )
    for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do (
                  set vid={%%i}
    )
    echo %vid%>vid.ini
    bcdedit  /set %vid% device boot >nul
    bcdedit  /set %vid% path \grldr.mbr >nul
    bcdedit  /displayorder %vid% /addlast >nul
    bcdedit  /timeout  %timeout% >nul
    if exist grldr.mbr copy grldr.mbr %systemdrive%\ /y && goto exit
    echo.
    echo   Please copy grldr.mbr to %systemdrive%\
    echo.
    pause
    :exit
    del bcdtemp.txt >nul
-------------------------------------------------------------------
Update: Fujianabc pointed out that
更新： Fujianabc 先生指出以下这行

    bcdedit  /set %vid% device boot >nul

should be changed to
必须更改为

    bcdedit  /set %vid% device partition=%SystemDrive% >nul
-------------------------------------------------------------------

You still need to copy grldr yourself.
你还需要自行复制 grldr 。

Notice: It's possible to modify the BCD entry from a different OS, you just
need to specify the location of BCD:
注意:   从一个不同的操作系统来修改 BCD 启动项是可能的，你只是需要指定BCD的位置：

    bcdedit /store D:\boot\BCD ...

Notice: These commands need elevated privileges, they should be used inside
cmd.exe which is started with "Run as administrator".
注意： 执行这些命令需要提高权限，它们必须是“以管理员身份运行”于cmd.exe中。

Notice: People has reported that some version of Vista doesn't support
creating file in C:\ with no extension, even with administrator privileges.
This means grldr can't be placed in C:\. You can solve this by either copy
grldr to another partition, or rename grldr to something like grub.bin. Please
see the following section on how to do this.
注意：已有人报告说，即使使用管理员身份，Vista的某些版本也不支持在C盘根目录下建立
无扩展名的文件。你既可以复制grldr到另外的一个分区来解决这个问题，也可以将 grldr
重命名，比如为 grub.bin 。请参见下节怎么来做到这点。

******************************************************************************
***                      How to rename grldr                               ***
******************************************************************************
                         怎样重命名 grldr

grldr and grldr.mbr use internal boot file name to decide which file to load,
so if you want to change the name, you must also change the embeded setting.
You can do this with the help of grubinst, which can be downloaded at:
  grldr 和 grldr.mbr引用引导文件内部的文件名来决定装载哪个文件，所以假如你
  想更换它们的名字，那么你也必须要修改那些内嵌在文件内部的设置。你可以使用
  辅助程序grubinst 来做到这些，grubinst 可以在以下网址下载到：

http://download.gna.org/grubutil/

grubinst can generate customized grldr.mbr:
  grubinst 能生成自定义的grldr.mbr：

    grubinst -o -b=mygrldr C:\mygrldr.mbr

grubinst can also edit existing grldr/grldr.mbr:
  grubinst 也能编辑一个既有的 grldr 或 grldr.mbr:

    grubinst -e -b=mygrldr C:\mygrldr

    grubinst -e -b=mygrldr C:\mygrldr.mbr

In this case, you must use a grubinst that is compatible with the version of
grub4dos, otherwise the edit will fail.
在这种情况中，你必须使用一个和 grub4dos 版本兼容的grubinst，否则修改将会失败。

So, in order to load mygrldr instead of grldr, you can use one of the
following methods:
  确实如此，在命令中通过加载mygrldr来代替grldr ，你可以使用下面的方法之一：

1. Use customized grldr.mbr to load mygrldr. In this case, you need to change
the embeded boot file name in grldr.mbr. The name of grldr.mbr can be changed
at will.
  使用已定制好的grldr.mbr 来加载 mygrldr 。在这种情况下，你需要修改内嵌在
  grldr.mbr中的引导文件名。grldr.mbr的名字可以被任意的改变。

2. Use mygrldr directly. In this case, you need to change the embeded boot
file name in mygrldr to match its new name.
  直接使用mygrldr 。在这种情况下，你需要将 mygrldr 中内嵌的引导文件名改为
  一个合适的名字。

Notice: The boot file name must conform to the 8.3 naming convention.
注意： 引导文件名必须遵循 8.3 文件名规范。

Notice: The boot file name must conform to the 8.3 naming convention.

******************************************************************************
***                          PXE device                                    ***
******************************************************************************
                             PXE 设备

If PXE service is found at startup, GRUB4DOS will create a virtual device
(pd), through which files from the tftp server can be accessed. You can setup
a diskless boot environment using the following steps:
如果PXE设备在开机时被发现,GRUB4DOS 将建立一个虚拟设备 (pd)，通过它tftp服务器
上的文件能被访问。你可以使用下面的步骤来设置一个无盘启动环境：

Client side
客户端

You need to boot from PXE ROM.
你需要从 PXE ROM 上启动。

Server side
服务器端

You need to configure a dhcp server and a tftp server. In the dhcp server, use
grldr as boot file.
你需要配置一个dhcp服务器和一个tftp服务器。在dhcp服务器上，使用grldr作为引导文件。

You may also want to load a different menu.lst for different client. GRUB4DOS
will scan the following location for configuration file:
你也可能希望为不同的客户端加载一个不同的menu.lst 。GRUB4DOS将在以下位置查找配置文件：

    [/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD
    [/mybootdir]/menu.lst/C000025B
    [/mybootdir]/menu.lst/C000025
    [/mybootdir]/menu.lst/C00002
    [/mybootdir]/menu.lst/C0000
    [/mybootdir]/menu.lst/C000
    [/mybootdir]/menu.lst/C00
    [/mybootdir]/menu.lst/C0
    [/mybootdir]/menu.lst/C
    [/mybootdir]/menu.lst/default

Here, we assume the network card mac for the client machine is
88:99:AA:BB:CC:DD, and the ip address is 192.0.2.91 (C000025B). /mybootdir is
the directory of the boot file, for example, if boot file is /tftp/grldr, then
mybootdir=tftp.
这里，我们假设客户端的网卡mac地址是 88:99:AA:BB:CC:DD ，而且ip地址是192.0.2.91 (C000025B)。
/mybootdir 是引导文件所在目录，例如，如果引导文件是 /tftp/grldr ，那么mybootdir=tftp 。

If none of the above files is present, grldr will use its embeded menu.lst.
如果上面的文件都未出现，grldr将使用它的内置的menu.lst 。

This is a menu.lst to illstrate how to use files from the tftp server.
这是一个怎样使用tftp服务器上文件的menu.lst文件。

    title Create ramdisk using map
    map --mem (pd)/floppy.img (fd0)
    map --hook
    rootnoverify (fd0)
    chainloader (fd0)+1

    title Create ramdisk using memdisk
    kernel (pd)/memdisk
    initrd (pd)/floppy.img

You can see that the menu.lst is very similar to normal disk boot, you just
need to replace device like (hd0,0) with (pd).
你可以看到这个 menu.lst 和在普通磁盘上引导的是相似的，你只是需要把象(hd0,0)
这样的设备用(pd) 来代替。

There are some differences between disk device and pxe device:
磁盘设备和 pxe 设备有一些不同点：

1. You can't list files in the pxe device.
   你不能把pxe设备上的文件以列表显示。

2. The blocklist command will not work with a file in the pxe device.
   blocklist 命令不能用于 pxe 设备上的文件。

3. You must use --mem option if you want to map a file in the pxe device.
   如果你想映射一个pxe服务器上的文件，你必须使用--mem 选项 。

When you use chainloader to load file from the pxe device, there is a option
you can use:
当你使用 chainloader 命令装载一个pxe 设备上的文件时，有一个选项你可以使用：

    chainloader --raw (pd)/BOOT_FILE

Option --raw works just like --force, but it load file in one go. This can
improve performance in some situation.
选项 --raw 的执行就和--force一样，但是它是一次性将文件装载执行。这可以改善
一些情况下的执行效率。

You can use the pxe command to control the pxe device.
你可以使用 pxe 命令来控制 pxe 设备。

1. pxe

    If used without any parameter, pxe command will display current
    settings.
        如果没有使用任何参数，pxe 命令将显示当前设置。

2. pxe blksize N

    Set the packet size for tftp transmission. Minimum value is 512,
    maximum value is 1432. This parameter is used primarily for very old
    tftp server where packet larger than 512 byte is not supported.
        设置tftp 传输的包大小。最小值是 512 ，最大值是 1432 。这个参数主要使
        用在那些不支持远大于 512 字节包大小的tftp 服务器上。

3. pxe basedir /dir

    Set the base directory for files in the tftp server. If
        为tftp 服务器上的文件设置基本目录。如果
        pxe basedir /tftp

    then all files in the pxe device is related to directory /tftp, for
    example, (pd)/aa.img correspond to /tftp/aa.img in the server.
        那么在pxe 设备上的所有文件都和目录 /tftp 相联系。例如，(pd)/aa.img
        对应于服务器上的 /tftp/aa.img 。

    The default value of base directory is the directory of the boot file,
    for example, if boot file is /tftp/grldr, then default base directory
    is /tftp.
        基本目录的默认值是引导文件所在目录，例如，如果引导文件是 /tftp/grldr ，
        那么默认的基本目录就是 /tftp 。

4. pxe keep

    Keep the PXE stack. The default behaviour of GRUB4DOS is to unload
    the PXE stack just before it exits.
        保持 pxe 栈 。GRUB4DOS的默认状态是自身退出时卸载PXE 栈。

5. pxe unload

    Unload the PXE stack immediately.
        立即卸载 PXE 栈。

******************************************************************************
***                  New Feature of Relative Path Support                  ***
******************************************************************************
                     相对路径支持的新特性

Use the `root' or `rootnoverify' command to specify the `working directory'.
使用`root' 或 `rootnoverify'命令来指定`工作目录' 。

For example:
例如：

        root  (hd0,0)/boot/grub

This specifies that the working dir is (hd0,0)/boot/grub. So all subsequent
filenames of the form "/..." will actually refer to (hd0,0)/boot/grub/...
这就指定了当前工作目录是(hd0,0)/boot/grub 。因此所有继"/..."之后的文件名将实际
提交到(hd0,0)/boot/grub/...

That is to say:
也就是说：

        cat  /menu.lst

will be equivalent to
将等同于

        cat  (hd0,0)/boot/grub/menu.lst

******************************************************************************
***                 Notation For The Current Root Device                   ***
******************************************************************************
                    当前根设备的符号

The notation `()' can be used to access the current root device. You may use
`find --set-root ...' to set the current root device, but the find command
does not set the `working dir' of the root device. In this case you should
use `()' to set the working dir after the find command:
符号`()'可以在访问当前根设备时使用。你可以使用`find --set-root ...'来设置当前根
设备，但find 命令不能设置根设备的`工作目录'。这时你应该使用`()'在find命令后来设
置工作目录。

        root  ()/boot/grub

Update 2008-05-01:
更新 2008-05-01:

    FIND can also set the `working directory' now. For example:
        现在 FIND 命令也可以设置`工作目录'了。例如：

        find  --set-root=/tmp  /boot/grub/menu.lst

    It is equivalent to this pair of commands:
        它等同于这一组命令：

        find  --set-root  /boot/grub/menu.lst
        root  ()/tmp

******************************************************************************
***                   The new map option --a20-keep-on                     ***
******************************************************************************
                      map 新选项 --a20-keep-on

Along with 0.4.3 final, map has a new option --a20-keep-on which is related to
A20 control after a memdrive sector access. Usage:
随着0.4.3最终版的发布，map 有了一个新选项 --a20-keep-on ，它跟内存驱动器扇区访
问后的A20 地址线控制有关

    map --a20-keep-on=0

It should be used before the "map --hook" command.
它必须被使用于"map --hook"命令之前。

By default, A20 will be always on after an RAM INT13 sector access. If
"map --a20-keep-on=0" is used, the A20 status after the INT13 call will be the
same as that before the INT13 call.
作为默认，在INT13 对随机内存的扇区访问之后 A20 将一直开启。如果"map --a20-keep-on=0"
被使用，那么在INT13 中断调用后的 A20 的状态将和在INT13中断调用前相同。

******************************************************************************
***                  The CDROM emulation (virtualization)                  ***
******************************************************************************
                      光盘仿真（虚拟化）

The CDROM emulation is sometimes called ISO emulation. Here is an example:
光盘仿真有时候又称为 ISO 仿真。这里是个示例：

    map  (hd0,0)/myiso.iso  (hd32)
    map  --hook
    chainloader  (hd32)
    boot

if myiso.iso is not contiguous and you have enough memory, add a --mem option:
如果myiso.iso 是不连续的并且你有足够的内存，那么要增加一个--mem选项：

    map  --mem  (hd0,0)/myiso.iso  (hd32)
    map  --hook
    chainloader  (hd32)
    boot

Note: (hd32) is a grub drive number equivalent to (0xA0). If a virtual drive is
specified with a drive number greater than or equal to 0xA0, then it will be
treated as a cdrom (i.e., with 2048-byte big sectors).
注意：(hd32) 是一个 grub 驱动器，驱动器号和 (0xA0) 等价。如果一个虚拟驱动器被指
定为一个大于或等于0xA0 的驱动器号，那么它将被视为是一个光盘。（即，是 2048 字节
的大扇区）

Like normal disk emulations, the CDROM emulation also (mainly) works with
real-mode OSes. After a protected-mode OS kernel (such as
WinNT/2K/XP/VISTA/LINUX) gains control, the OS would have no ability to access
the virtual CDROM through BIOS int13.
就像标准的磁盘仿真一样，光盘仿真也（主要）工作于实模式操作系统中。在一个保护模式的
操作系统核心（例如WinNT/2K/XP/VISTA/LINUX）获得控制后，操作系统常常没有能力通过BIOS
的int13 来访问虚拟光盘。

DOS/Win9x users may google for ELTORITO.SYS and use it in CONFIG.SYS as a
device driver for the virtual cdrom.
DOS/Win9x 的使用者可以用google搜索到 ELTORITO.SYS 然后将它作为虚拟光驱的设
备驱动使用到CONFIG.SYS 中。

Example usage of eltorito.sys in CONFIG.SYS:
CONFIG.SYS 中 eltorito.sys 的用法举例：

    device=eltorito.sys /D:oemcd001

Corresponding MSCDEX command which can be placed in AUTOEXEC.BAT:
对应的可能是放在 AUTOEXEC.BAT中的 MSCDEX 命令：

    MSCDEX /D:oemcd001 /L:D

Due to some bugs found in eltorito.sys, the driver could fail to load. If you
encounter such problems, then you may replace (hd32) with (0xFF) for the
virtual cdrom drive number and try again.
由于在 eltorito.sys中发现了一些缺陷，驱动器可能会加载失败。假如你碰到这类问题，
那么你可以将虚拟光盘的驱动器号从(hd32)更换为(0xFF)然后再试一次。

******************************************************************************
***                  The New Command CHECKRANGE                            ***
******************************************************************************
                     新命令 CHECKRANGE

Checkrange checks whether or not the return value of a command is in the
specified range or ranges.
Checkrang 命令检查一条命令的返回值是否是在指定的值域或排列中。

Usage:		checkrange  RANGE  COMMAND
用法:           checkrange   域    命令

Here are some examples for RANGE:
这里是参数 RANGE 的一些示例：

    3 is a range containing only the number 3
        3 是仅包含数字 3 的值域

    3:3 is equivalent to 3
        3:3 等价于 3

    3:8 is a range containing the numbers 3, 4, 5, 6, 7, 8
        3:8 是一个包含数字3, 4, 5, 6, 7, 8的值域

    3,4,5,6,7,8 is equivalent to 3:8
        3,4,5,6,7,8 等同于3:8

    3:5,6:8 is also equivalent to 3:8
        3:5,6:8 也等同于3:8

    3,4:7,8 is also equivalent to 3:8
        3,4:7,8 也等同于3:8

Note: You should not insert spaces into a range.
注意：你不能把一些间隔数加到一个值域中。

Here is an example showing where the checkrange can be used:
这里用一个示例来演示怎样使用 checkrange 命令：

    checkrange 0x05,0x0F,0x85 parttype (hd0,1) || hide (hd0,1)

which means: if (hd0,1) is not an extended partition, then hide it.
这意谓着：如果 (hd0,1) 不是一个扩展分区，那么隐藏它。

******************************************************************************
***                       The New Command TPM                              ***
******************************************************************************
                          新命令 TPM

The "tpm --init" uses 512-byte data at 0000:7C00 as buffer to initialise TPM.
"tpm --init"在地址0000:7c00处使用512字节数据作为初始化TPM（可信赖平台模块）的缓存。

Before you boot VISTA's BOOTMGR, you might have to use the "tpm --init"
command on some machines. Normally you want to issue the "tpm --init" command
after a CHAINLOADER command.
在你引导 VISTA 的 BOOTMGR 前，你可以在一些机器上使用"tpm --init"。通常你应该在
一条 CHAINLOADR 命令后发出"tpm --init"指令。

******************************************************************************
***               Delimitors or comments between titles                    ***
******************************************************************************
                  标题间的限制或注释

It is possible to use titles as delimitors or comments. A title(or menu item)
is called unbootable if all of its menu commands are not boot-sensitive.
把标题用来做限制或注释是可能的。如果一个标题（或菜单项）下所有的菜单命令都是非启动敏感的，
它被叫做是不可启动的。

The following commands are boot-sensitive(and others are not boot-sensitive):
下面的命令是启动敏感的（而其他命令是非启动敏感的）

    boot
    bootp
    chainloader
    configfile
    embed
    commandline
    halt
    install
    kernel
    pxe
    quit
    reboot
    setup

An unbootable title will be skipped when the user presses the Up Arrow or Down
Arrow keys. Even the unbootable menu item can get accessed(and executed) by
using the Left Arrow and/or Right Arrow keys. Examples:
一个不可启动的标题在使用者按向上方向键或向下方向键时将被跳过。甚至于不可启动的菜单项
是可以通过使用左方向键或右方向键来被访问（和被执行）的。示例：

    title This is an UNBOOTABLE entry(so this line is also a comment)
        pause --wait=0 This title is a comment. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        help
        help root
        help chainloader
        help parttype
        clear
    title ------------------------------------------------------------
        pause --wait=0 This title is a delimitor. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        clear
        help
        help boot
    title ============================================================
        pause --wait=0 This title is a delimitor. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        help
        clear
        help pause
    title ************************************************************
        pause --wait=0 This title is a delimitor. Nothing to do.
        pause --wait=0 You can use non-boot-sensitive commands here
        pause --wait=0 of any kind and as many as you would like.
        help kernel
        help
        clear

Note: An unbootable menu item must contain at least one command. If there
are no commands for a title, the title will be simply discarded and disappear.
注意：一个不可启动菜单项必须至少包含一条命令。如果标题下没有命令，标题将被简单的
丢弃并且不被显示。

******************************************************************************
***                           Bifurcate drives                             ***
******************************************************************************
                              分支式驱动器

Some machines apply different actions to a drive between CHS and LBA mode.
When you read sectors using standard BIOS call int13/AH=02h, you might find
out the drive is a floppy. But when you read sectors using extended BIOS
call(EBIOS) int13/AH=42h, you could know the drive is a cdrom. Such a drive
is called bifurcate.
一些机器在 CHS 和 LBA 模式之间对驱动器实施不同的动作。当你使用标准的int13/AH=02h
BIOS 调用来读取扇区时，你可能发现这个驱动器是一个软盘。但是当你用扩展的 BIOS 调用
（EBIOS）int13/AH=42h来读取扇区时，你可以知道这个驱动器是一个光盘。这样的驱动器被
叫做分支式的。

A bifurcate drive can have two drive numbers: one is the normal BIOS drive
number between 00 and FF in hexa, and this drive uses only CHS mode disk
access(standard BIOS int13/AH=02h); the other is the normal BIOS drive number
(Bitwise) OR'ed by 0x100(i.e., 256 in decimal), and this drive uses only
LBA mode disk access(EBIOS int13/AH=42h). For example, if the drive 0x00
(i.e., the first floppy) is bifurcate, then the drive (0x00) uses CHS mode
to access its sectors, and the drive (0x100) uses LBA (meaning EBIOS) mode
to access its sectors.
一个分支式的驱动器可以拥有两个驱动器号：一个是标准的 BIOS 驱动器号十六进制
的 00或FF ，并且这个驱动器只使用 CHS 模式的磁盘访问（标准的BIOS int13/AH=02h）；
另一个是标准的 BIOS 驱动器号（按位）0x100 （即十进制的256），并且这个驱动器只
使用 LBA 模式的磁盘访问（EBIOS int13/AH=42h）。例如，如果驱动器0x00（即，第一软驱）
是分支式的，那么驱动器（0x00）使用 CHS 模式来访问它的扇区，而驱动器（0x100）则使用
LBA 模式（意味着EBIOS）来访问它的扇区。

The geometry command can report the disk access mode for bifurcate drives as
BIF instead of the conventional CHS or LBA.
geometry 命令可以用 BIF 代替常见的 CHS 和 LBA 来报告分支式驱动器的磁盘访问模式。

Known bifurcate drives. Virtual PC and some real machines are found to create
a bifurcate floppy drive when they boot from a floppy-emulation mode bootable
cdrom. The "geometry (fd0)" will show
已知的分子式驱动器。虚拟机Virtual PC和一些真实机器被发现当它们引导一个软盘模拟
模式的可启动光盘时会建立一个分支式的软驱。命令"geometry (fd0)"将显示：

    drive 0x00(BIF): C/H/S=...Sector Count/Size=.../512

and "geometry (0x100)" will show
而"geometry (0x100)"将显示

    drive 0x100(BIF): C/H/S=...Sector Count/Size=.../2048

Actually (0x100) can access the whole cdrom, you may "ls (0x100)/" and find
your files on the cdrom(not the files inside the booted floppy image). Of
course "ls (fd0)/" will list the files inside the booted floppy image.
实际上(0x100) 能访问整个光盘，你可以执行"ls (0x100)/" 然后在光盘上发现你的文件
（不是那个被引导的软盘映像中的文件）。当然 "ls (fd0)/"可以列举那些在被引导的
软盘映像中的文件。

Note that only some (real or virtual) machines have this action, others
will not produce bifurcate drives.
注意 仅仅是某些（真实的或虚拟的）机器有这样的行为，其他的机器不会产生分支式驱动器。

******************************************************************************
***                       GRLDR as PXE boot file                           ***
******************************************************************************
                          GRLDR 作为 PXE 启动文件

GRLDR can be used as the PXE boot file on a remote/network server. The (pd)
device is used to access files on the server. When GRLDR is booted through
network, it will use its preset menu as the config file. However, you may use
a "pxe detect" command, which acts the same way as PXELINUX:
GRLDR 可以被用作远程或网络服务器的 PXE 启动文件。(pd) 设备被用于访问服务器上文件。
当 GRLDR 已经通过网络启动后，它将使用预设菜单作为配置文件。不过，你可以使用
一条"pxe detect"命令，它的表现是和pxelinux一样的方式。

    * First, it will search for the config file using the hardware type (using
      its ARP type code) and address, all in hexadecimal with dash separators;
      for example, for an Ethernet (ARP type 1) with address 88:99:AA:BB:CC:DD
      it would search for the filename 01-88-99-AA-BB-CC-DD.
      首先，它将使用设备类型（使用它的 ARP 类型码）和地址来搜索配置文件，全部用
      破折号分割的十六进制；例如，对一个以太网（ARP 类型是1）的88:99:AA:BB:CC:DD
      地址，它会用文件名01-88-99-AA-BB-CC-DD 来搜索。

    * Next, it will search for the config file using its own IP address in
      upper case hexadecimal, e.g. 192.0.2.91 -> C000025B. If that file is not
      found, it will remove one hex digit and try again. At last, it will try
      looking for a file named default (in lower case). As an example, if the
      boot file name is /mybootdir/grldr, the Ethernet MAC address is
      88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will try following
      files (in that order):
      其次，它将使用它本地的大写字母的十六进制格式的IP 地址（即192.0.2.91 转换为
      C000025B。）来搜索配置文件。如果文件没有找到，它将去掉一个十六进制数字后再试一次。
      最后，它会尝试寻找一个名为 default （小写字母）的文件。举个例，如果引导文件名
      是/mybootdir/grldr ，以太网 MAC 地址是88:99:AA:BB:CC:DD 并且 它的 IP 地址是
      192.0.2.91 ，它将尝试下面的文件 （用那样的顺序）：

       /mybootdir/menu.lst/01-88-99-AA-BB-CC-DD
       /mybootdir/menu.lst/C000025B
       /mybootdir/menu.lst/C000025
       /mybootdir/menu.lst/C00002
       /mybootdir/menu.lst/C0000
       /mybootdir/menu.lst/C000
       /mybootdir/menu.lst/C00
       /mybootdir/menu.lst/C0
       /mybootdir/menu.lst/C
       /mybootdir/menu.lst/default

You cannot directly map an image file on (pd). You must map it in memory using
the --mem option. For example,
你不能在(pd)上直接映射一个映像文件。你必须使用--mem 选项将它映射到内存中。例如，

    map --mem (pd)/images/floppy.img (fd0)
    map --hook
    chainloader (fd0)+1
    rootnoverify (fd0)
    boot

One more example,
再例如，

    map --mem (pd)/images/cdimage.iso (0xff)
    map --hook
    chainloader (0xff)
    boot

******************************************************************************
***                       New program badgrub.exe                          ***
******************************************************************************
                          新程序 badgrub.exe

The new program badgrub.exe is intended to serve 'bad' machines(typically some
DELL models) that cannot run the normal grub.exe.
新程序 badgrub.exe 是特意供那些不能运行标准 grub.exe 的‘糟糕的’机器（一些典型
的 DELL 原型机）使用的。

******************************************************************************
***                           Conditional find                             ***
******************************************************************************
                              条件查找

The new find syntax allows to find a device conditionally.
新的find 命令的语法允许带条件的查找设备。

    find [OPTIONS] [FILENAME] [CONDITION]
              选项      文件名     条件

CONDITION is a normal grub command which returns TRUE or FALSE.
其中的 CONDITION 是一个返回值是 TRUE 或者 FALSE 的标准 grub 命令。

    Example 1:
        示例 1:
        find

    This will list all partitions, all floppies and the (cd).
        这会列举所有的分区，所有的软驱和 (cd) 。

    Example 2:
        示例 2：

        find +1

    This will list all devices with a known filesystem.
        这会列举文件系统已知的所有设备。

    Example 3:
        这会列举分区类型为0xAF的所有分区。

        find checkrange 0xAF parttype

    This will list all partitions with ID=0xAF.
        这会列举分区类型为0xAF的所有分区。

    Example 4:
        示例 4：

        find /ntldr checkrange 0x07 parttype

    This will list all partitions with ID=0x07 and existing /ntldr.
        这会列举分区类型为 0x07 且根目录存在 ntldr 的所有分区。

******************************************************************************
***                    How to build grldr boot images                      ***
******************************************************************************
                       怎样创建 grldr 引导的映像文件

1. build 1.44M floppy image ext2grldr.img
   创建1.44M 软盘镜像文件 ext2grldr.img

    dd if=/dev/zero of=ext2grldr.img bs=512 count=2880
    mke2fs ext2grldr.img
    mkdir ext2tmp
    mount -o loop ext2grldr.img ext2tmp
    cp default ext2tmp
    cp menu.lst ext2tmp
    cp grldr ext2tmp
    umount ext2tmp
    bootlace.com --floppy --chs --sectors-per-track=18 --heads=2 --start-sector=0 --total-sectors=2880 ext2grldr.img

2. build 1.44M floppy image fat12grldr.img
   创建1.44M 软盘镜像文件 fat12grldr.img

    dd if=/dev/zero of=fat12grldr.img bs=512 count=2880
    mkdosfs fat12grldr.img
    mkdir fat12tmp
    mount -o loop fat12grldr.img fat12tmp
    cp default fat12tmp
    cp menu.lst fat12tmp
    cp grldr fat12tmp
    umount fat12tmp
    bootlace.com --floppy --chs fat12grldr.img

3. build iso9660 CDROM image grldr.iso
   创建 iso9660 文件系统的光盘镜像文件 grldr.iso

    mkdir iso_root
    cp grldr iso_root
    cp menu.lst iso_root
    mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

******************************************************************************
***           Use bootlace.com to install partition boot record            ***
******************************************************************************
              使用 bootlace.com 来安装分区引导记录

Since bootlace.com has not implemented the --install-partition option, you
need to use the already implemented --floppy=PartitionNumber option instead.
在 bootlace.com 没有实现 --install-partition 选项之前，你需要用已实现的
--floppy=PartitionNumber 选项来替代。

Hear is a way you might want to follow:
这里是你可能需要遵从的方法：

Step 1. Get the boot sectors of the partition and save to a file MYPART.TMP.
        For NTFS, you need to get the beginning 16 sectors. For other type of
    filesystems, you only need to get one sector, but getting more sectors
    is also ok.
步骤 1. 获取分区的引导扇区然后保存为一个文件 MYPART.TMP 。对于 NTFS 文件系统,你需要获取
        起始的16 个扇区。对于其他类型的文件系统，你只需要获取一个扇区，但获取多个扇区
        也是没问题的。

Step 2. Run this:
步骤 2. 执行这些命令：

    bootlace.com --floppy=Y --sectors-per-track=S --heads=H --start-sector=B --total-sectors=C --vfat --ext2 --ntfs MYPART.TMP

    where we suppose MYPART.TMP is for (hdX,Y) and the partition number Y
    should be specified as in the --floppy=Y option.
        这里我们假定 MYPART.TMP 是从 (hdx,y) 获取的而且分区号 Y 必须在--floppy=Y 选项中被指定。

    Note that for FAT12/16/32/NTFS partitions, you can omit these options:
        注意对于FAT12/16/32/NTFS等分区，你可以省略这些选项：

         --sectors-per-track, --heads, --start-sector, --total-sectors,
         --vfat and --ext2.

    For NTFS partitions, you must specify --ntfs option.
        对于 NTFS 分区，你必须指定 --ntfs 选项。

    For ext2 partitions, you can omit --vfat, --ntfs and --ext2 options,
    but other options should be specified.
        对于 ext2 分区，你可以省略 --vfat, --ntfs he --ext2 选项，但是其他选项必须被指定。

Step 3. Put MYPART.TMP back on to the boot sector(s) of your original partition
    (hdX,Y).
步骤 3. 将 MYPART.TMP 写回你原来分区(hdx,y)的引导扇区。

Note: Only a few file systems(FAT12/16/32/NTFS/ext2/ext3) are supported by now.
注意：现在只有一些文件系统（FAT12/16/32/NTFS/ext2/ext3）被支持。

Note2: Under Linux you may directly write the partition. That is to say, Step
    1 and Step 3 are not needed. Simply use its device name instead of
    MYPART.TMP.
注意2：在Linux 下你可以对分区直接写。也就是说，步骤1 和步骤3 是不需要的。简单使用
       它的设备名代替 MYPART.TMP 即可。

Note3: grubinst has the feature of installing grldr boot code onto a partiton
    boot area.
注意3：grubinst 具有把 grldr 的自举代码安装到分区引导扇区的功能。

******************************************************************************
***                Use a single key to select menu item                    ***
******************************************************************************
                   使用一个单一的键来选择菜单项

Some machines have a simplified keyboard. The keyborad might have only the
number keys 0 .. 9 plus a few other keys. When the menu displayed, the user
can strike a key for 8 times. When the menu handler detects the continuous
single keypress, it will assume the user want to use this key to select a menu
item and boot. This single key will act as the RIGHT-ARROW key for the user to
select a menu item. And 5 seconds later after the user stops the keypress,
the selected menu item will automatically boot. Any normal keys can be used as
a single key for this purpose, except for a few functional keys like b, e,
Enter, etc. Once another key is pressed, the feature of Single-Key-Selection
will disappear immediately.
一些机器具有简化的键盘。这些键盘可能只有数字键 0 到 9 ，外加少数几个其他键。当
菜单还未显示时，使用者可以按下某个键 8 次。当菜单控制模块发现一个连续的单一按
键时，它将认为使用者希望使用这个键来选择菜单和启动。这个单一的键可以充当右方向
键来为使用者选择菜单。然后在使用者停止按键的 5 秒之后，被选择的菜单项将自动启
动。任何的标准键可以被作为单一的键来达到这个目的，除了少数功能键，比如 b ，e ，
回车键，等等。一旦另外的键被按下，单键选择特性将立即消失。

******************************************************************************
***             Parameter file for bootlace running under DOS              ***
******************************************************************************
                DOS 中 bootlace 的参数文件

You may move all or part of the command-line arguments into a file. The file
can have multi lines. Just like SPACEs and TABs, the CRs and LFs can also
delimit the commandline arguments in the parameter file.
你可以把所有或部分的命令行参数移动到一个文件中。这个文件可以有多行。就像空格
和制表符一样，回车符和换行符也可以在参数文件中分割命令行参数。

Example:
示例：

        bootlace < my_parafile
        bootlace --read-only my_mbr < my_other_options

Note:	Pipes do not work. You have to use the input-redirection operator(<).
注意：  管道不能使用。你必须使用输入重定向符 (<) 。

******************************************************************************
***                  Use bootlace to create a triple MBR                   ***
******************************************************************************
                     使用 bootlace 来建立一个三重的 MBR

This is typically used for USB drives, though it also works with hard drives.
虽然这也能用于硬盘，但是它典型的使用是被用于 USB 设备。

Steps to create triple MBR:
创建三重的 MBR 的步骤：

1. Do a fresh FDISK to create a FAT12/16/32 partition starting at sector 95
(in LBA, that is, the begginning sector(MBR) is sector 0).
1. 使用一个新版的 FDISK 分区软件来建立一个从第 95 扇区开始的FAT12或16或32 的分区
（这里是 LBA 扇区表示法，起始扇区（MBR）是 0 扇区。）

2. Install grldr boot sector onto the boot sector of this partition. See
section "Use bootlace.com to install partition boot record" above.
2. 安装 grldr 的引导扇区到这个分区的引导扇区。参见上面的“使用 bootace.com
来安装分区引导记录”

3. Get 96 sectors of the drive starting at sector 0(MBR), and save to file
MYMBR96.TMP.
3. 获取从起始扇区 0 扇区（MBR）开始的96个扇区，然后保存到一个文件 MYMBR96.TMP 中。

4. Run bootlace.com:
4. 运行 bootlace.com:

    bootlace.com MYMBR96.TMP

5. Put MYMBR96.TMP back onto the drive starting at MBR(sector 0).
5. 将 MYMBR96.TMP 从MBR （0 扇区）开始写回到驱动器上。

Note: If the drive already has a triple MBR, then bootlace will cancel it
and restore the original partition layout.
注意： 如果驱动器已经是一个三重的 MBR ,那么 bootlace 会删除它并且恢复为原本的分区布局。

******************************************************************************
***                    Use 'pxe detect' in preset-menu                     ***
******************************************************************************
                       在预置菜单中使用 'pxe detect' 命令

Now the "pxe" command has a new subcommand "detect":
现在“pxe”命令有了个新的子命令“detect”：

        pxe detect [BLOCK_SIZE] [MENU_FILE]
                            包大小选项   菜单文件选项

BLOCK_SIZE specifies the block size for PXE. If it is not specified or it is
0, then grub4dos will go through a probing process and get a proper value
for data transfer.
BLOCK_SIZE 选项指定出 pxe 的包大小。如果它没有被指定或者是被指定为 0 ，那么
grub4dos将通过一个侦测过程来获取数据传送包的一个恰当的的值。

MENU_FILE specifies the config file on the PXE server. If omitted, a standard
config file in the menu.lst sub-dir will gain control. For a description on
the config files in the menu.lst sub-dir, please refer to the section
"GRLDR as PXE boot file" above.
MENU_FILE 选项指定出 PXE 服务器上的配置文件。如果它被省略，在 menu.lst 子目录
中的标准配置文件将获得控制。关于menu.lst 子目录中的配置文件的描述，请查阅上面
的“用 GRLDR 作为 PXE 引导文件”一节。

If MENU_FILE starts in a "/", then the MENU_FILE on the PXE server will gain
control, else(if MENU_FILE does not start in a "/") no menu will be executed.
如果MENU_FILE 是以"/"开始的，那么PXE 服务器上的 MENU_FILE 将获得控制，否则
（如果MENU_FILE不是以"/"开始）将没有菜单被执行。

Normally you want to use a "pxe blksize ..." or a "pxe detect ..." command
before you access the (pd) device, since the default blocksize of 512 might
not work on your system.
在你的系统可能用 512 字节的默认包大小不能运行时，通常你应该在访问(pd)设备之前
使用一条 "pxe blksize ..." 或 一条 "pxe detect ..."命令。

******************************************************************************
***                    Use 'configfile' in preset-menu                     ***
******************************************************************************
                       在预置菜单中使用 'configfile'命令

Now the preset menu holds the highest priority. It will gain control prior to
the menu.lst on the boot device. If a 'configfile' command occurs in the menu
init command group, then control will go to the menu.lst on the boot device.
现在预置菜单持有最高控制权。它将在启动设备上的 menu.lst 之前获得控制。如果
'configfile' 命令在初始化命令组中出现，那么控制将转到启动设备上的menu.lst文件。

******************************************************************************
***                    New command 'dd' to copy files                      ***
******************************************************************************
                       复制文件的新命令 'dd'

Usage:
用法：

dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]

Copy file IF to OF. BS is blocksize in bytes, default to 512. C is blocks to
copy, default is total blocks in IF. IN specifies number of blocks to skip
when read, default is 0. OUT specifies number of blocks to skip when write,
default is 0. Skipped blocks are not touched. Both IF and OF must exist.
将 IF（源文件）复制到OF （目标文件）中。BS 是以字节计数的一个块的大小，默认
值是512 。C 是复制的块数，默认值是源文件中的总块数。IN 指定在读取时跳过的块
数，默认值是 0 。OUT 指定在写入时跳过的块数，默认值是0 。已跳过的块不会被改
变。源文件和目标文件必须是存在的。
译注：新增参数buf表示dd所用的读写缓存的起始地址，buflen表示缓存的长度，即大小。

Both IF and OF must have a leading device name, i.e.,  of the form `(...)'.
You may use `()' for the current root device.
源文件和目标文件必须以设备名开头，即，`(...)'的格式。对于当前根设备你应该使用`()'。

dd can neither enlarge nor reduce the size of OF, the leftover tail of IF
will be discarded. OF cannot be a gzipped file. If IF is a gzipped file,
it will be decompressed automatically when copying.
dd 命令既不扩大也不减小目标文件的大小，源文件尾部剩余的部分将被丢弃。目标
文件不能是gzip压缩过的文件。如果源文件是gzip 压缩过的文件，它将在复制时被
自动解压。

dd is dangerous, use at your own risk. To be on the safe side, you should
only use dd to write a file in memory.
dd 具有危险性，使用风险由你自己的承担。作为一种安全方面的考虑，你应当只使
用 dd 来写入一个内存中的文件。

In some cases when writing a file in NTFS, dd might fail.
某些情况下在写入NTFS 中的文件的时，dd 可能会失败。

If you attempt to write a device or a block file that is not in memory by
starting dd in a menu, you will safely be refused :-) (Update: no restrictions
now)
假如你尝试在菜单中执行dd命令来写入一个不是内存中的设备或者块文件时，你会被安全的拒绝:-)
（更新：现在不再限制）

Update: New options are implemented for user defined buffer. By default,
the buffer is at address 0x50000, and length is 0x10000(=64KB). You cannot
specify ADDR to be lower than 0x100000(=1MB). Besides, you must specify SIZE
larger than 0x10000(=64KB). Normally you want ADDR >= 0x1000000(=16MB), and
SIZE also >= 16MB. A large SIZE could speed up the progression of dd.
更新： 新选项实现了让使用者自定义dd 命令的读写缓存。作为默认，读写缓存起始于地
址0x50000，长度为0x10000 （即64KB）。你不能指定缓存的起始地址ADDR 低于0x100000
（即 1 MB）。此外，你必须指定参数SIZE 大于0x10000（即64K）。通常，你需要令ADDR
 大于或等于0x1000000 （16MB），并且 SIZE 也要大于或等于16MB 。增大 SIZE 的值能
够加快 dd 的读写速度。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
!!!!    Caution! Both IF and OF can be a device name which stands for     !!!!
!!!!    all the sectors on the device. Take utmost care!                  !!!!
!!!!______________________________________________________________________!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        警告！IF 和 OF 都可以是一个设备名，即它代表了设备上全部的扇区。慎之又慎！

******************************************************************************
***              New command 'uuid' to identify partitions                 ***
******************************************************************************
                 确认分区的新命令 'uuid'

Usage:
用法：

    uuid [DEVICE] [UUID]

If DEVICE is not specified, search for filesystem with UUID in all partitions
and set the partition containing the filesystem as new root (if UUID is
specified), or just list uuid's of all filesystems on all devices (if UUID is
not specified). If DEVICE is specified, return true or false according to
whether or not the DEVICE matches the specified UUID (if UUID is specified),
or just list the uuid of DEVICE (if UUID is not specified).
如果 DEVICE 选项未被指定，将在所有分区中搜索指定的 UUID 号的文件系统，
然后把包含这个文件系统的分区设置为新的根 （如果 uuid 被指定时），或者只列举所
有设备上的文件系统的 uuid 号（如果 uuid 未被指定时）。
如果 DEVICE 选项被指定了，将返回 真 或 假 ，对应于指定的设备是否与指定的 UUID
号相符（如果uuid被指定时），或者仅仅列举指定设备的uuid 号（uuid 未被指定时）。

Example 1:
示例 1：

    find --set-root uuid () 7f95820f-5e33-4e6c-8f50-0760bf06d79c

which will find a partition with uuid=7f95820f-5e33-4e6c-8f50-0760bf06d79c
and set the partition as root if found.
这将查找 uuid 等于 7f95820f-5e33-4e6c-8f50-0760bf06d79c的分区，然后将这个发
现的分区设置为根。

Example 2:
示例 2：
    uuid ()

which will print the uuid of the current root device.
这将显示当前根设备的 uuid 号。

******************************************************************************
***                     gfxmenu support in grub4dos                        ***
******************************************************************************
                        grub4dos 的 gfxmenu 支持

Gfxmenu support has been added to grub4dos. To use it, you must first find the
message file you need, then load it in menu.lst with command like this:
gfxmenu 支持已经被增加到 grub4dos 当中。使用它，你首先需要找到一个你需要的mesage
文件，然后在menu.lst中用类似这样的命令来装载它：

    gfxmenu /message

This should be a gloabl command, that is, not inside any menu item. Also, it
can only be used in configure file, running it in console mode does not work.
这是一个全局命令，也就是说，不能放入任何的菜单项中。同时，它只能被使用于配置文件
中，而在控制台模式中执行它是无效的。

gfxmenu does not work in conjunction with the password feature.
gfxmenu 不能与全局密码保护功能同时使用。

There are two major format of message file. Old format is created with gfxboot
3.2.* or older (size of message file is normally about 150K), while new format
is created with gfxboot 3.3.* and later (size of message file is normally above
300K). Both format are supported in grub4dos.
message 文件有两个主要的格式。老的格式是通过gfxboot 3.2版或更旧的版本创建的
（message文件的大小通常只能是150 k），当采用 gfxboot 3.3 版或更新的版本创建
新格式时，（message文件的大小通常可以超过 300K）。这两种格式在grub4dos 中都
已被支持。

******************************************************************************
***           Use 'write' to write a string into a device or file          ***
******************************************************************************
               使用 'write' 命令将字符串写入设备或文件中

Usage:
用法：

    write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING

SKIP is an integer and defaults to 0.
SKIP 是一个整数并且默认值是 0 。

If ADDR_OR_FILE is an integer, then it is treated as a memory address, and
INTEGER_OR_STRING must be an integer value. The integer INTEGER_OR_STRING
will be written to address (ADDR_OR_FILE + SKIP).
如果 ADDR_OR_FILE选项 被指定为一个整数，那么它被作为一个内存地址对待，并且
INTEGER_OR_STRING选项必须被指定为一个整数值。整数 INTEGER_OR_STRING 将被写
入（ADDR_OR_FILE 加上 SKIP 值）的地址处。

If ADDR_OR_FILE is a device or a file, then INTEGER_OR_STRING is treated as
a string which will be written to ADDR_OR_FILE at offset SKIP (in bytes).
如果 ADDR_OR_FILE选项 指定的是一个设备或一个文件，那么INTEGER_OR_STRING 选
项将被作为一个字符串对待，它将被写入跳过 SKIP 个字节（字节计数）的指定的设
备或文件当中。

The string is quoted with nothing, that is, neither with the single quote
char(') nor with the double quote char(").
字符串不被任何东西引用，也就是说，不用单引号(') 也不用 双引号(") 来引用它。

Space char must be quoted with back slash(\). (Update: need not now)
空格符必须被反斜杠(\)引用。（更新：现在不需要了）
（译注：如果字符串以空格开头，开头的这个空格符还是需要反斜杠引用）

Single quote char(') and double quote char(") are not interpreted specially
and can be used directly in the string.
单引号(')和双引号(")不用特别说明并且可以直接使用到字符串中。

Some C-style quote sequences are interpreted as follows:
下面是一些 C 语言风格的引用序列说明：

    \NNN	character with octal value NNN (1 to 3 digits)
                （1到3位）八进制值 NNN 表示的字符

    \\	backslash
                反斜杠

    \a	alert (BEL)
                警报 （声音）

    \b	backspace
                退格符

    \f	form feed
                换页符

    \n	new line
                换行符

    \r	carriage return
                回车符

    \t	horizontal tab
                水平制表符

    \v	vertical tab
                垂直制表符

    \xHH	byte with hexadecimal value HH (1 to 2 digits)
                （1到2位）十六进制值为 HH 的字节

Just like dd, the write can neither enlarge nor reduce the size of the
destination file, the leftover tail of the string will be discarded.
The destination file cannot be a gzipped file.
就像 dd 命令一样，write 命令既不扩大也不缩小目标文件的文件大小，字符串的
剩余部分将被丢弃。目标文件不能是一个gzip 压缩过的文件。

Again like dd, the write command is also dangerous, use at your own risk.
And to be on the safe side, you should only write to memory files.
还是和 dd 类似，write 命令也具有危险性，使用风险你自己承担。作为一种安全
方面的考虑，你应当只向内存中的文件写入。

In some cases when writing a file in NTFS, the write might fail.
某些情况下当写入 NTFS 中的文件时，write命令可能失败。

If you attempt to write a device or a block file that is not in memory by
using write in a menu, you will safely be refused :-) (Update: no restrictions
now)
假如你尝试在菜单中执行 write 命令来写入一个不是内存中的设备或者块文件时，
你会被安全的拒绝:-) （更新：现在不再限制）

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
!!!!    Caution! The file to write can be a device name which stands      !!!!
!!!!    for all the sectors on the device. Take utmost care!              !!!!
!!!!______________________________________________________________________!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        警告！被write 命令写入的文件可以是一个设备名，即它代表了设备上的所有
        扇区。慎之又慎！

******************************************************************************
***                 Item-by-item help text for menu entries                ***
******************************************************************************
                    为菜单项添加帮助文字

The help message at the bottom of the screen will vary as you choose the menu.
当你选择一个菜单项时，屏幕底部的帮助文字将发生变化。

You may append your help text to the title line. The help text must begin
with "\n", for example:
你可以在标题行中添加你的帮助文字。帮助文字必须用"\n" 开头，示例：

    title This is the title\nThis is the help text.\nAnd this is the 2nd line of the help text.

Some C-style quote sequences are interpreted as stated in the section above.
一些 C 语言风格的引用符号在前述章节做了说明。

******************************************************************************
***        initrd can load multiple cpio files for Linux 2.6 kernels       ***
******************************************************************************
           inird 命令可以为Linux 2.6 核心装载多个cpio 格式的文件

Usage:
用法：

    initrd FILE [FILE ...]

Note 1: You should not load more than one oldstyle disk images in this way,
because this is not supported by Linux kernel.
注意 1：你不能用这种方法装载多于一个的老式的磁盘镜像，原因是Linux 核心不支持。

Note 2: The FILEs should be specified in the same order as with syslinux.
注意 2：其中的 FILE 具有在syslinux 中使用时同样的规定。

******************************************************************************
***            access some internel variables at a fixed location          ***
******************************************************************************
               在固定位置访问一些内部变量

Address		Length		Description
地址            长度            说明
=========	========	==============================================
0000:8208	4 (DWORD)	install_partition (the boot partition)
                4字节（即双字） 启动分区号

0000:8280	4 (DWORD)	boot_drive (the boot drive)
                4字节（即双字） 启动驱动器号

0000:8284	4 (DWORD)	pxe_yip (your ip)
                4字节（即双字） pxe 客户端 ip （即本地ip）

0000:8288	4 (DWORD)	pxe_sip (server ip)
                4字节（即双字） pxe 服务器 ip

0000:828C	4 (DWORD)	pxe_gip (gateway ip)
                4字节（即双字） pxe 网关 ip

0000:8290	8 (QWORD)	filesize (file size by last "cat --length=0")
                8字节（即四字）   最后访问的文件的大小（是执行"cat --length=0"后的文件大小）

0000:8298	4 (DWORD)	saved_mem_upper (extended memory size in KB)
                4字节（即双字） 可用的扩展内存大小（ 扩展内存大小以 KB 为单位 ）

0000:829C	4 (DWORD)	saved_partition (current root partition)
                4字节（即双字） 当前根分区号

0000:82A0	4 (DWORD)	saved_drive (current root drive)
                4字节（即双字） 当前根所在的驱动器

0000:82A4	4 (DWORD)	no_decompression (no auto gunzip)
                4字节（即双字） 解压标志 （gzip非自动解压）
               译注：此字节如果为零则代表默认将对gzip格式的文件自动解压，如果非零则不自动解压。

Note 1: Filesize can be initialised/modified by using "cat --length=0 FILE".
注意 1：Filesize 可以通过执行 "cat --length=0 FILE" 来初始化和修改。

Note 2: You should not write these variables by hand(should read only).
注意 2：你不要自己改写这些变量（应该只是读取）。

Note 3: You may use 1K at 6000:0000 for your own varibles(See note 4).
注意 3：你可以使用内存地址6000:0000开始的 1K空间作为你自己的变量区（参见注意4）。

Note 4: The read command now returns the integer value at the given address.
注意 4：read 命令现在从指定的地址处返回整数值。

Note 5: Grub4dos does not have the variable expansion feature. You can only
    use integer variables. You need not declare them, but use the memory
    address directly. Usually you want to use variables as a logical
    value or in a command for conditional test, e.g., of this form:
         "checkrange RANGE read ADDR"
注意 5：grub4dos 还没有变量扩展的功能。你只能使用整数变量。你不需要申明它们，就
        可以直接使用这些内存地址。通常你需要通过一个逻辑值或者一个条件测试命令
        来使用这些变量，即，类似这种格式："checkrange RANGE read ADDR"

Note 6: no_decompression, saved_drive and saved_partition are writable.
注意 6：内部变量no_decompression, saved_drive and saved_partition 是可写的。

******************************************************************************
***            possibility to run another menu.lst after gfxmenu           ***
******************************************************************************
               在 gfxmenu 后运行另外的 menu.lst

Notice the use of CONFIGFILE after GFXMENU in the following example:
注意下面是在 GFXMENU 之后使用 CONFIGILE 的示例：

    # The menu.lst file for gfxmenu
    default=0
    timeout=5
    gfxmenu /message
    configfile /another.lst
    title 0..........
    ................
    title 1..........
    ................
    title 2..........
    ................
    # End of menu.lst

    # Begin another.lst
    default=0
    timeout=5
    title 0..........
    ................
    title 1..........
    ................
    title 2..........
    ................
    # End of another.lst

This will try gfxmenu command first. On exit(or on failure) control will go
to another.lst file.
这会首先尝试执行 gfxmenu 命令。当它退出时（或者失败时）控制会转到 another.lst 文件。

******************************************************************************
***                   a range of drives can be unmapped                    ***
******************************************************************************
                      一个驱动器域可以被反映射

Usage:
用法：

    map --unmap=RANGE

RANGE is a range of BIOS drive numbers to be unmapped. BIOS drive number 0
is for the first floppy, 1 is for the second floppy; 0x80 is for the first
hard drive, 0x81 is for the second hard drive, etc; virtual cdrom (hd32)
corresponds to BIOS drive number 0xA0, (hd33) corresponds to 0xA1, etc.
其中的 RANGE 是一个已被映射的 BIOS 驱动器域。BIOS 驱动器号 0 表示第一软驱，1 表示
第二软驱；0x80 表示第一硬盘，0x81 表示第二硬盘，等等；虚拟光盘(hd32) 对应于
BIOS 驱动器号 0xA0 ,(hd33) 对应于0xA1 ，等等。

For description on RANGE, please refer to section `The New Command CHECKRANGE'
above.
关于RANGE 的说明，请参阅前述的“新命令 CHECKRANGE ”这节。

Example 1:
示例 1：

    map --unmap=0,0x80,0xff

This will unmap virtual floppy (fd0), virtual hard drive (hd0) and virtual
cdrom (0xff).
这将反映射虚拟软驱 (fd0),虚拟硬盘(hd0)和虚拟光盘(0xff)。

Example 2:
示例 2：

    map --unmap=0:0xff

This will unmap all virtual floppies, all virtual hard drives and all virtual
cdroms.
这将反映射所有的虚拟软驱，所有的虚拟硬盘和所有的虚拟光盘。

Note 1: Normally a `map' command will add an item in the drive map table for
    a virtual drive. But `--unmap' means items in the drive map table
    (for the specified virtual drives) will be deleted.
注意 1：通常，一条‘map’命令将在驱动器映射表中为虚拟驱动器增加一个表项。而
        ‘--unmap’意味着在驱动器映射表中（具体是指虚拟驱动器）的表项会被删除。

Note 2:	The --unhook option only breaks the INT13 hook(to the inerrupt
    vector table). It will not affect the drive map table. And later on
    execution of a `boot' command, the INT13 disk emulation routine will
    automatically get hooked(to the interrupt vector table) when needed
    (e.g., the drive map table is non-empty) even if it has been unhooked.
注意 2：--unhook 选项仅仅是断开 INT13 的挂钩（在中断矢量表中）。它不会影响到驱
        动器映射表。而且在执行了一个‘boot’命令之后，即使是它已经被反映射了的
        时候，INT13磁盘仿真程序也会在需要的时候（即，驱动器映射表非空时）自动建立挂钩。

Note 3: Usually you want to do a `map --rehook' after you have changed the
    drive map table.
注意 3：通常你需要在已经改变了驱动器映射表之后执行一条`map --rehook'命令。

******************************************************************************
***                         geometry tune and sync                         ***
******************************************************************************
                            磁盘几何参数的修正和同步

When a USB storage device is connected to a (or another) machine, the geometry
in the partition table or in the BPB of the volume could be invalid, and the
machine could hang at boot time. So you need to find out the correct geometry
for the drive (use `geometry --tune'), and then update the geometry in
partition table and BPB of the drive(use `geometry --sync').
当一个USB 存储设备被连接到一台（或者是不同的）机器上时，分区表中或 BPB 中的磁盘
几何参数值可能是无效的，并且这个机器可能在启动时死机。因此你需要为驱动器找到一个
正确的磁盘几何参数（使用 `geometry --tune'），然后更新分区表或 BPB 中的磁盘
几何参数（使用`geometry --sync'）。

The above steps are required if you are going to boot DOS, because DOS
requires the right geometry in the partition table and BPB. Windows/Linux may
also require it, since the boot process could run in real-mode.
假如你想启动到DOS，以上的步骤是需要的，因为 DOS 要求有正确的磁盘几何参数在分区
表和BPB 中。Windows 及 Linux 也这样要求，因为引导进程的一部分会运行在实模式中。