【转载】Grub原理

【转载】Grub原理  

2011-12-13 08:13:42|  分类: grubdos |字号 订阅

Ps:这是网上转载的grub原理,写的比较详细,但是我个人更倾向于将grub与linux启动故障连载一起讲解,这样就更加容易对原理理解了,当然包括硬盘的一些知识肯定是要的。可是自己本来打算也总结一篇,但是写了三四页才发现自己总结的很烂,于是就放弃了。


近来一直在学习Linux,但是由于要使用到Win系统呢,所以要用Grub来引导双系统。不过呢,最近Grub出了一点毛病额。。事情从十多天前说起~我先是格掉了Linux所在的系统盘,之后重新启动后只能进入到Grub的命令行界面,我又不懂Grub的命令行哦。。所以呢,当时就感觉对Grub的了解 很不够!!在粗略了解了Grub的命令后呢,我就没有删除MBR,而是每次都使用命令行来进入的。但是。。昨天晚上,我使用迅雷下载了电影,然后定制为【下载完成后关机】,可是,早上开机的时候,发现运行无法进入Grub的命令行,而是在屏幕上只残留了一个Grub的图标!!!非常郁闷。。我就感觉,我 个人来说对Grub的了解很不够,而且急需要了解Grub的引导原理,以免日后再次应用的时候手忙脚乱,落得如此尴尬的境地。。!知识啊知识啊。。 汗!!!

不过,亡羊补牢,为时不晚!在这里我就奉上对Grub引导原理的理解,也许浅薄,但是学习ing...我也不怕献丑,呵呵!

1.Grub的功能!

Grub 就是引导装入器,简单的说,他可以装入Linux的kernel并且引导很多系统,包括Win系统和相当多版本的Linux系统。呵呵,听起来,貌似引导 一个系统是一个非常非常简单,非常繁琐的小步骤罢了,但是一个好的引导装入器可以免去很多麻烦。本人就深受引导之害。。。不过额,出现了问题并不能说明 Grub不好,如果你用过LILO的话,你就知道Grub的优势了!很方便的在电脑中引导多了系统,并且非常稳定出色的完成了引导任务,就是Grub的主要功能。除此之外,Grub还有许多其他的非常非常cool的功能!

额,比如,Grub可以从FAT,ext,FFS等格式的硬盘中读取kernel,就是无论怎么样的格式,Grub都可以找到并且装载内核,对于很多环境的系统引导Grub的优势就非常明显了。还有,Grub有一个可以交互的控制台!这个就太方便了!

上面也提到过,上次我格掉了Linux所在的分区,导致无法进入系统,就是第一次的Grub的引导配置已经失效了,在这种情况下,就可以手动装入来引导系统啦!这个。。额,是一个非常非常cool的功能!

2.Grub的直接引导方式

(1)用“root”命令来设置Grub的主设备的操作系统映像的位置;

(2)用“kernel”来加载操作系统的内核;

(3)用“module”命令来加载所需的模块(不一定要用到的,有些是不需要模块的);

(4)用“boot”命令来运行上述命令;

3.Grub非常cool的链式引导!

链式引导就是利用Grub来引导不被Grub直接支持的系统,比如说Win95啊!虽然没人用了现在,权作例举。

(1)“rootnoverify”命令来将Grub引导的主设备指向一个扇区,比如说:

      grub> rootnoverify hd(0,0)   /*hd(0,0)指的是第一个扇区,一般都是C盘为第一扇区,即hd(0,0)分区*/

(2)“makeactive”命令来设置指定扇区上的active标志位

      grub> makeactive

(3)“chainloader ”命令来加载引导程序

      grub> chainloader +1          /*参数+1是表示Grub从起始的分区来读取第一个扇区*/

(4)“boot”命令来执行上述命令

      grub> boot

4.弱弱的分析下Grub源码,以及实现

(1)Grub的两个必须的场景文件:stage1和stage2

-->>A.stage1的作用: 这个是装载到启动引导分区的,也是启动Grub所必需的映像文件,stage1的功能就是从硬盘中装载stage2。但是由于stage1在安装的时候是 由Grub拷贝到MBR中的,而且电脑的主引导分区的大小为512字节,所以呢,stage1编译后也应该是512字节的大小,因为对stage1的大小 的限制,所以stage1不能识别文件系统,而是采用了程序表的方式来分配stage2和stage1.5的位置。

-->>B.stage2的作用:额。。这个我只能很浅薄的说一下~这个是Grub的核心映像,它做Grub的除了装载它本身之外的所有功能。

-->>C.stage1.5的作用:stage1.5 呢就是沟通stage1和stage2用的。就是stage1装载stage1.5,然后利用stage1.5来装载stage2。stage1.5在源 码中的命名呢,是这样的:xx_stage_1_5,前缀呢有这几种 e2fs,fat,ffs,jfs,minix,reiserfs,vstafs,xfs看下就大致明白了,都是文件系统的标识。所以,我们可以大胆的猜 测,stage1限于文件的大小,采用程序表的方式来定位stage2,而不能识别文件系统,但是stage1.5却可以识别文件系统!当然,我们的猜测是正确的!嘿嘿~~

(2)Grub的网络启动模块:

-->>nbgrub和stage2是一个道理,但是是通过网络来加载的,具体原理不明。。汗,水平有限,尚待提高。

-->>pxegrub基本和nbgrub一样。。貌似他俩的区别就是格式不一样额。。看不懂看不懂,我承认。。嘿嘿~

5.stage1源码分析:--这里源码我还没有仔细的研究过,所以先奉上别人的分析,此后,研究过后,一定补上,而且会奉上更为详尽的原理介绍!!

上面已经说过了,stage1模块是整个Grub的引导模块,汇编后形成的.img的文件,大小为512字节。主要功能就是从开始过度到Grub的程序,.img文件被写到主引导扇区来从开机引导到Grub。

首先列出头文件,stage1.h:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

/* 定义了grub的版本号,在stage1中可以识别他们.*/
#define COMPAT_VERSION_MAJOR 3
#define COMPAT_VERSION_MINOR 2
#define COMPAT_VERSION ((COMPAT_VERSION_MINOR << 8) \
| COMPAT_VERSION_MAJOR)

/* MBR最后两个字节的标志*/
#define STAGE1_SIGNATURE 0xaa55

/* BPB (BIOS 参数块BIOS Parameter Block)的结束标记的偏移,他含有对驱动器的低级参数的说明. */
#define STAGE1_BPBEND 0x3e

/* 主版本号的标记的偏移*/
#define STAGE1_VER_MAJ_OFFS 0x3e

/* Stage1启动驱动器的标记的偏移*/
#define STAGE1_BOOT_DRIVE 0x40

/* 强迫使用LBA方式的标记的偏移*/
#define STAGE1_FORCE_LBA 0x41

/* Stage2地址标记的偏移*/
#define STAGE1_STAGE2_ADDRESS 0x42

/* STAGE2扇区的标记的偏移*/
#define STAGE1_STAGE2_SECTOR 0x44

/* STAGE2_段的标记的偏移*/
#define STAGE1_STAGE2_SEGMENT 0x48

/* 使用Windows NT的魔术头标识的偏移*/
#define STAGE1_WINDOWS_NT_MAGIC 0x1b8

/* 分区表起始地址的标记的偏移*/
#define STAGE1_PARTSTART 0x1be

/* 分区表结束地址的标记的偏移*/
#define STAGE1_PARTEND 0x1fe

/* Stage1堆栈段的起始地址*/
#define STAGE1_STACKSEG 0x2000

/* 磁盘缓冲段。磁盘缓冲必须是32K长而且不能跨越64K的边界。*/
#define STAGE1_BUFFERSEG 0x7000

/* 驱动器参数的地址*/
#define STAGE1_DRP_ADDR 0x7f00

/* 驱动器参数的大小*/
#define STAGE1_DRP_SIZE 0x42

/*在BOIS中软盘的驱动器号标志*/
#define STAGE1_BIOS_HD_FLAG 0x80

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

这里定义的是stage1.s中所用到的所有参数。参数分析如上所示!

首先在这个文件的开始部分定义了一些宏。

#define ABS(x) (x-_start+0x7c00)

这个宏计算了直接地址。由于MBR是被加载到0x7c00的位置,所以通过计算可以直接得到x参数的直接地址。这样就可以不依赖于Linker程序。

#define MSG(x) movw $ABS(x), %si;

这个宏用于处理对字符串的载入和响应。

然 后程序从_start程序入口开始执行,此入口在内存中的位置为CS:IP 0:0x7c00。随后对一系列的变量进行了初始化。设置了起始的扇区、磁道和柱面,并设置了他们的起始位置。同时还设置了stage1的版本号。通过设 置boot_drive变量,来设置从那个盘来载入stage2。如果此变量设置成0xff则从默认的启动驱动器中来载入stage2。然后指定了 stage2的起始地址是0x8000,起始段是0x800,起始的扇区号是1。也就是说stage2起始位置是被存放在0柱面,0磁道,第2扇区上的 [8]。

程序从real_start入口开始真正执行。首先设置了数据段以及堆栈段的偏移为0,然后设置 stage1的堆栈的起始地址为 STAGE1_STACKSEG即0x2000。随后打开中断。然后检查是否设置了启动的磁盘。即boot_drive变量是否为0xff,如果非 0xff则保存设置的磁盘号到dl寄存器中,并压入堆栈保存。同时在屏幕上显示GRUB字样。然后检查此启动磁盘是否是软盘,如果是软盘则直接跳转到 CHS模式不用检测是否支持LBA模式。然后检测所启动的磁盘是否支持LBA模式。接着程序分成两块,一块是LBA模式,一块是CHS模式。

【解决大硬盘访问问题】LBA英文全名为Logical Block Addressing,中文名称为逻辑区块寻址[9]。LBA所指的是一种磁盘设备的寻址技术,它是利用逻辑映对的方式来指定磁盘驱动器的扇区,目前个人计算机所使用的传输接口中,增强型 IDE (Enhanced IDE) 和 SCSI 均使用逻辑区块寻址方式。传统的硬盘寻址技术是采取实体寻址(physical mapping、physical addressing)的方式,以磁盘上的实际结构,直接作为资料区块地址的结构。但由于初期在设计实体寻址方式时,硬盘容量只有5、10、20 MB等等小容量机种,所以设计出来的最大的寻址能力,只能到1024个磁柱(cylinder)、16个磁头(head)、63个扇区(sector)。以每个扇区(sector)512字节(bytes)计算,实体寻址的方式最多只能使用512×63×1024×16=528482304字节 (528MB)的硬盘空间。但是由于磁性储存技术不断的提升,硬盘容量大幅增加的情况之下,这样的限制让使用者必须将硬盘画分为多个区块,使用上非常的不方便。

因此硬件厂商研究出了LBA逻辑寻址方式,也就是计算机系统并没有将资料存放地点的相关记录,应对到硬 盘上资料实际存放的位置。而是由 IDE控制电路和 BIOS负责转换寻址(mapping)资料的记录位置表。经过转换后的记录方式,是将第1个磁柱上的第1条磁道的第1个扇区编号为0,第二个扇区编号为 1,以此类推……,假设1条磁道有2000个扇区,那么第2000个扇区的编号就是1999。第2条磁道上的第1个扇区就是2000,如此一直线性排列下 去。以逻辑区块的方式来寻址的硬盘,最多可达16383磁柱,最大磁头数为16个,每轨扇区有63区,扇区大小为512字节,所支持之硬盘空间为512× 63×16383×16=8455200768字节(8.4GB)[10]。

在ATA的接口规格中,定义了使 用28位来寻址,因此计算出来,它可以支持到224×512=137GB的容量。不过不幸的,BIOS并 无法配合,它使用 24位来寻址(也就是LBA模式)。所以根本之道,就是改变BIOS对中断13h的支持,因此后来的BIOS就设计了加强版的中断13h。一口气使用了 64位来对硬盘做寻址,因此可以支持到264×512=9.4TB,相当于3万亿倍的8.4GB[11]。

如果是LBA模式下读取,首先对先前定义的磁盘的一些参数进行了定义,为以后调用INT 13做准备。使用INT13的0x42功能,把磁盘内容读到内存中【只要BIOS能识别到硬盘,便能读取MBR,而不需要驱动!。设置ah为0x42为功能号,设置dl寄存器来设置磁盘号,si为记录磁盘一系列信息 的地址偏移量,磁盘信息中包括了要读入的柱面号、磁道号以及扇区号。程序然后调用BOIS INT 13中断将启动磁盘上的第二扇区上的内容读到内存中的STAGE1_BUFFERSEG处,在Stage1.h中定义STAGE1_BUFFERSEG为 0x7000。即将第二扇区上的内容读到内存中的0x7000处。读入成功的话跳转到COPY_BUFFER处,如果读取失败则尝试使用CHS模式读入。

与 LBA模式不同的是,调用BIOS INT 0x13中断中的0x2号功能,设置ah寄存器为0x2,al为扇区数,cl的位6,位7和ch组合为磁道号,cl的0-5位为扇区号,dh为磁头号, dl为驱动器号(其中0x80为硬盘,0x0为软驱)。es:bx为数据缓冲区的地址。但所起的功能与前面提到的LBA模式是类似的,也是将第二扇区中的内容读到内存中的0x7000处,作为缓存。然后跳转到COPY_BUFFER处。


========================================

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 加密的。

ause [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(&lt;), period(.), greater(&gt;), 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原理)