Grub加载iso文件.docx
《Grub加载iso文件.docx》由会员分享,可在线阅读,更多相关《Grub加载iso文件.docx(32页珍藏版)》请在冰豆网上搜索。
![Grub加载iso文件.docx](https://file1.bdocx.com/fileroot1/2023-7/14/806c62ae-50cf-4319-bb2f-469e11b67650/806c62ae-50cf-4319-bb2f-469e11b676501.gif)
Grub加载iso文件
Grub加载iso文件
如果你不曾知道的话,这或许是一个极其隐蔽的技巧了。
而事实上,所有的技术都是现成的,一点也不
神秘。
(这篇文章也早就想写,只是没有时间写。
)
用一个通常的例子来说明吧。
假定你有一张光盘的映象,它是由一个可引导的软盘映象制作出来的可引
导光盘的映象,或者像Mandriva那样,是用no-emulation模式制作出来的可引导光盘映象。
大家知道,要通过仿真来直接引导这样的光盘映象,实属困难,没有一个成熟的技术。
但是,我们退一步,不求引
导它,但求读取其中的文件,这一点是完全可以做到的。
通常我们在得到一个LINUX发行版的光盘ISO映象之后(假定我们不用它刻录一张真实的光盘的话),需要用操作系统的工具,如Windows的WinImage,以及Linux的mount命令等,来抽取光盘里面我
们所需要的某些个引导文件,如floppy.img,vmlinuzz,all.rdz等。
需要把它们拷贝出来,放到硬盘,然
后才可以引导Linux的安装过程。
我们这里介绍的技术,可以略过所有这些复杂的步骤,而是很简单地,达到我们启动安装程序的目的。
我们不需要在操作系统之下抽取文件了,因为我们的GRUBforDOS本身就可以读取光盘映像中的全
部文件!
!
酷酷!
!
我们这里做出一个假定,那就是,硬盘上的光盘映像在物理上是连续存放的。
这是因为,我们要用到GRUBforDOS的磁盘仿真能力,而GRUBforDOS的磁盘仿真,在没有--mem参数的情况下,要求
被仿真的文件(也就是我们的ISO),必须在物理扇区上是连续存放的。
如果你的内存足够大,比如有
1G那么大,你就可以使用带有--mem参数的磁盘仿真命令,在这种情况下,整个650M的ISO文件,都放到了内存中,因此,不再要求ISO文件的连续性了。
考虑到目前绝大多数人没有1G内存,所以,
我们只好要求ISO文件的连续性了。
好了,关子卖完了,该说点实质的了:
map(hdX,Y)/your_distro.iso(hdZ)
map--hook
别骂我哟!
其实只要有这两条命令就够了,我刚才叙述得是否太过神秘?
然而如果我不吹一吹,你很可
能懒得看下去,也就看不到这里了(你甚至得感谢我吹牛,呵呵)。
对于上述命令,也许那些不熟悉GRUB的人会感到某些疑惑,所以,我在这里简单解释一下。
第一条map命令,是将你硬盘上的ISO文件,仿真为一个原来不存在的硬盘(hdZ)。
比如,假定你的
机器原来只有4个硬盘(hd0),(hd1),(hd2),(hd3),现在这个Z就可以是4了,(hd4)就是第五个硬盘。
map--hook的意思是,让这个仿真在GRUB环境下立即发生作用,而不是等到敲入boot命令之后才起作用。
现在你在GRUB下检验一下,是不是可以访问(hdZ)中的文件了呢?
如果不行,你尽管把吐沫星子喷
过来,我认了。
由于(hdZ)是ISO9660格式的文件系统,而我们的GRUB正好可以识别ISO9660格式的文件系统,
也正是因为这个,所以,我们可以顺利读出ISO里面的文件。
原理上就是如此简单啊,没有什么需要进一步解释的。
接下来就看你的了!
既然(hdZ)中有你光盘中的全部内容,你也就不需要拷到硬盘上了,你直接用
kernel和initrd等命令来启动安装,这就完了。
如果里面有个软盘映象,需要你再次启动仿真,那对你
来说,应当是轻车熟路了,这回用
map--mem(hdZ)/.../floppy.img(fd0)
map--rehook
chainloader(fd0)+1
rootnoverify(fd0)
boot
就可以了,因为软盘不会太大,你的内存应当足够容纳下它了。
需要说明的是,如果你前面的ISO是用--mem来仿真的,那么这次的软盘也必须用--mem来仿真。
这
是因为,把一个不带--mem的磁盘仿真的BIOS磁盘号码,定向到真实的内存(而非磁盘介质)中,
这是要失败的。
关于如何让一个文件在磁盘上按照物理扇区**连续**存放,本文不再赘述,请参阅其他的文章。
不
过简单来说,方法有两个,一个是在空的FAT12/16/32/NTFS分区中建立的文件,一般就已经是连续的了?
?
多个碎块的文件,变成连续的文件。
在ext2分区不可能建立超过1M大小的连续文件。
所以,要
建立连续文件,最好是在微软的分区格式中才有保障。
另外,由于GRUBforDOS的NTFS模块是含有BUG的,因此,你的map(hdX,Y)/your_distro.iso(hdZ)命令虽然会成功,但在随后的读取时却很有可能碰到失败,并且文件越大,失败率越高(对于
ISO这样几百兆大小的文件,几乎肯定会失败的)。
因此建议,为了确实保证最大限度的安全、最高的
成功率,请尽量避免使用NTFS文件系统,而应当把ISO文件放在FAT12/FAT16/FAT32格式的分
区里面。
(转载时请注明作者:
不点,写作时间:
2005年8月14日)
附:
Grub命令详解
blocklist
用法:
blocklistFILE
描述:
输出文件的块清单标记。
boot
用法:
boot
描述:
引导已加载的操作系统或扇区链式加载器。
bootp
用法:
bootp[--with-configfile]
描述:
通过BOOTP初试化网络设备。
如果使用了`--with-configfile'参数,此命令将会试图去加载一个特定的配置文件。
cat
用法:
catFILE
描述:
显示指定文件的内容。
chainloader
用法:
chainloader[--force]FILE
描述:
加载扇区链式加载器。
若使用了--force参数,则忽略该扇区的启动标识的有效性。
cmp
用法:
cmpFILE1FILE2
描述:
比较两个文件,并且报告两者之间的不同的信息。
color
用法:
colorNORMAL[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
用法:
configfileFILE
描述:
将指定文件作为配置文件予以加载。
debug
用法:
debug
描述:
打开/关闭除错模式。
default
用法:
default[NUM|`saved']
描述:
把NUM项菜单设为缺省值。
device
用法:
deviceDRIVEDEVICE
描述:
声明BIOS驱动器对应的实际物理设备。
这条命令只用于grub命令行。
portmap
用法:
portmapprog_numbervers_number
描述:
进行端口映射。
dhcp
用法:
dhcp
描述:
通过DHCP初试化网络设备。
splashimage
用法:
splashimageFILE
描述:
图形模式下载入背景图片文件。
foreground
用法:
foregroundRRGGBB
描述:
设置图形模式下的前景色。
RR代表红色,GG代表绿色,BB代表蓝色。
注意他们都使用十六进制的值。
background
用法:
backgroundRRGGBB
描述:
设置图形模式下的背景色。
RR代表红色,GG代表绿色,BB代表蓝色。
注意他们都使用十六进制的值。
clear
用法:
clear
描述:
清屏幕。
displayapm
用法:
displayapm
描述:
显示APMBIOS的相关信息。
displaymem
用法:
displaymem
描述:
显示GRUB所判断到的当前系统的内存分布,包括所有物理内存区域。
dump
用法:
dumpFROMTO
描述:
显示诸多文件的内容。
注意,FROM所指定的必须是一个GRUB文件,TO所指定的必须是一个OS文件。
embed
用法:
embedSTAGE1_5DEVICE
描述:
如果设备是个驱动器,则将Stage1.5嵌入到主引导扇区之后。
如果是个FFS分区,则可嵌入到该设备饿`引导代码'区中。
并输出Stage1.5所占的扇区数。
fallback
用法:
fallbackNUM
描述:
如果调用当前的菜单项时出现错误,则转移到NUM项后重试
find
用法:
find[--set-root]FILENAME
描述:
在所有分区上查找文件名,并显示包含该文件的设备。
如果设置了参数--set-root,则在找到第一个匹配后马上停止,并且把该设备设为根。
fstest
用法:
fstest
描述:
切换文件系统的试验模式。
gfxmenu
用法:
gfxmenuFILE
描述:
使用FILE中的图形菜单。
geometry
用法:
geometryDRIVE[CYLINDERHEADSECTOR[TOTAL_SECTOR]]
描述:
输出驱动器的相关信息。
在grub壳程序中,你可以用这条命令设置驱动器参数为任意值。
如果你省略了总扇区数,则该值缺省有其它参数决定。
halt
用法:
halt[--no-apm]
描述:
关闭系统。
如果APM(高级电源管理)功能存在,将使用APMBIOS关闭系统,除非指定了`--no-apm'选项。
help
用法:
help[--all][PATTERN...]
描述:
显示内部命令的帮助信息。
要查看所有命令的帮助,请使用`--all'参数。
hiddenmenu
用法:
hiddenmenu
描述:
隐藏菜单。
hide
用法:
hidePARTITION
描述:
通过在分区类型上置隐藏标志,隐藏指定分区。
ifconfig
用法:
ifconfig[--address=IP][--gateway=IP][--mask=MASK][--server=IP]
描述:
指定IP地址,子网掩码,网关和服务器地址。
不带参数时,将显示当前的网络配置。
impsprobe
用法:
impsprobe
描述:
通过一些循环操作,侦测出符合Intel多处理器规范1.1/1.4的CPUs,以便于发挥其更好的效能。
initrd
用法:
initrdFILE[ARG...]
描述:
加载Linux格式的初始化虚拟盘,并设置必要的参数。
install
用法:
install[--stage2=STAGE2_FILE][--force-lba]STAGE1[d]DEVICESTAGE2[ADDR][p][CONFIG_FILE][REAL_CONFIG_FILE]
描述:
安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。
如果使用了选项'd',STAGE1总是试图使用安装STAGE2的驱动器,而不是启动盘。
STAGE2将加载在指定地址上,如果未声明地址,则自动检测。
如果使用了选项'p'或给出了配置文件,将修改STAGE2的第一个数据块,修正实际Stage2启动时使用的配置文件位置。
对于Stage1.5,该值为Stage2的路径。
如果安装的是Stage1.5,且指定了实际配置文件,则将该配置文件路径写入Stage2中。
ioprobe
用法:
ioprobeDRIVE
描述:
侦测指定设备的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
用法:
moduleFILE[ARG...]
描述:
对多重启动影像,加载启动模块文件(不处理该文件的内容,用户必须自己确定核心的要求)。
剩余参数作为`模快命令行`传递,象`kernel'命令一样。
modulenounzip
用法:
modulenounzipFILE[ARG...]
描述:
与'module'类似,但是自动禁用了解压缩。
pager
用法:
pager[FLAG]
描述:
没有参数时,切换页模式。
如果使用了FLAG参数,那么它为`on'时为开启,为`off'时为关闭。
partnew
用法:
partnewPARTTYPESTARTLEN
描述:
创建一个新的主分区。
START为起始扇区号,LEN为其包含的扇区数,TYPE为其分区类型。
parttype
用法:
parttypePARTTYPE
描述:
改变指定分区(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
用法:
readADDR
描述:
从内存的指定位置读取一个32-bit的值,并以十六进制形式显示出来。
reboot
用法:
reboot
描述:
重启系统。
fontfile
用法:
fontfileFILE
描述:
指定中文字体文件,并切换到简体中文显示方式。
scdrom
用法:
scdrom[--install],[--bootcd]
描述:
寻找系统的第一个CD-ROM驱动器,然后为其分配一个驱动器号以备后续使用(--install)。
或者,用该驱动器中的可引导光盘启动系统。
(--boot)。
run
用法:
runFILE
描述:
运行一个为光盘启动而设计的引导文件(非模拟方式的)
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_KEYFROM_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参数,theBASH-like的编辑功能将被禁用;若使用了