用 GRUB 来引导软盘映象——节约软盘介质了

 【4 月 3 日更新】 新的 BOOTGRUB 和 GRLDR 可以在以下网页得到【如果不能访问,请在第二天重试】:
http://www.ipdown.com/grub4dos/

   【2 月 18 日更新】 pre3 漏掉了磁盘仿真部分的出错信息, 本次的 pre4 纠正了这个 BUG。

   请全面测试这个版本.

   看看 spalsh 目录下的 spalshimage 版本的文件是否可以显示背景画面。

   仍然借用中国 DOS 联盟 联合 DOS 论坛 之“启动盘室”报告 BUG。

   下载 grub for dos 0.2.0pre4:

ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre4.tar.gz
ftp://ftp.cosoft.org.cn/incoming/grub_for_dos-0.2.0pre4.tar.gz

另外注意(Linux伊甸园首页)以下网址的消息:

http://www.linuxeden.com/download/softdetail.php?softid=1026


   GRUB for DOS 0.2.0 中文文档在这里: GRUB for DOS 磁盘仿真命令简介



grub_for_dos 版本 0.1.x 是一个开发版的系列,在 GNU GRUB 原有的基础上实现了引导 1.44M floppy.img 的功能。从这里得到这个软件:

ftp://ftp.cosoft.org.cn/incoming/grub_for_dos-0.1.4.tar.gz

也可进入目录查看:

ftp://ftp.cosoft.org.cn/incoming/

感谢 Wengier 兄在 中国DOS联盟 成员 新DOS时代 为 grub_for_dos 建立 镜像下载和英文推介网页 http://newdos.yginfo.net/grubdos.htm
〖顺便说:FreeDOS ——GNU/Linux 的一个极好的补充,有着旺盛的生命力。在需要用到实模式的时候(正如运行 GRUB for DOS 所要求的那样),我们就想起来 DOS 的好处了。某个著名的 DOS 公司正在努力让 DOS 消亡,但 DOS 是不会消亡的。那个公司不想要 DOS 了,但是我们还要;DOS 的未来是我们的,不是那个公司的。〗

下载解压后, 在纯 DOS 下 运行 grub.exe 文件即可。不要被“for DOS”这个后缀吓坏了,实际上你完全可以在 Linux 下正常编译生成通常的 grub 引导管理器文件,这样,你的 grub 同样可以把 软盘映象文件 模拟成 启动软盘 。整个 grub_for_dos 项目就是对 GNU GRUB 的丰富和加强,你可以认为 grub_for_dos 不过就是 GNU GRUB 的补丁而已(源程序就是以补丁的形式出现的)。再次说明,grub_for_dos 是 GNU GRUB 的功能扩展(起初只是让 GRUB 能够从 DOS 运行,所以取了“for dos”这样的名字),不是“只能用于 DOS 环境”的意思。正常编译之后,安装在(例如) MBR 中,当然是可以的。

0.1.2 修正了一个读取软盘扇区的 BUG;增加了从 menu.lst 菜单安装 GRUB 到 MBR 的菜单项。使用方法是,将解包后的 boot 目录拷贝到 C:\ 也就是根目录下(于是就有了这个文件 C:\boot\grub\menu.lst)。这需要在 Windows 下操作(或者在一个可以创建长文件名的 DOS 下操作),因为在 C:\boot\grub 目录下有很多长文件名,而你所用的 DOS 或许不能建立长文件名。拷贝完成后,进入纯 DOS,运行 grub.exe,当看到菜单后,选择“install GRUB on (hd0,0) to MBR (hd0) and reboot”这个菜单项就行了。这里假定你的 C: 盘是 FAT32 格式的,并且分区号是 (hd0,0) 也就是第一块硬盘上的第一个主分区。

0.1.4 优化了 FreeDOS 的相关代码,可望能够在未来的任何 FreeDOS 版本中运行。谢谢 wengier 兄快速的消息。

在“虚拟的” DOS 环境下运行 grub.exe,会出现以下错误信息:

Cannot run in protected mode. Must run in real mode.

Windows Me/2000/XP 的用户获得“纯 DOS”的一个方法是,在资源管理器中格式化一张——有启动能力的——软盘,把 grub.exe 拷贝到软盘上,然后用这个软盘引导机器,就可进入实模式的 DOS 了。在这个实模式 DOS 的 A:> 提示符下敲入 grub 并回车,就可以看到 grub> 提示符了。


有关 grub_for_dos 的用法和注意事项,请看里面的 README 和 ChangeLog 文件。这里摘录其主要部分:


以下命令集可以引导 Windows 98 SE

map (hd1,0)/dos98se.img (fd0)
chainloader (hd1,0)/dos98se.img
rootnoverify (fd0)
boot

另外一个例子,用 hd.img 文件引导 Mandrake 的安装程序

map (hd0,0)/hd.img (fd0)
chainloader (hd0,0)/hd.img
rootnoverify (fd0)
boot

软盘映象的大小必须是 1440KB, 即 1474560 字节。映象文件必须是连续的磁盘块,不能有碎片。

如果你用 ext2 之类的分区,恐怕无法生成 1.44M 的连续文件。解决的办法是采用 FAT32 分区。

在 FAT32 分区中将一个文件拷贝成 10 个或 20 个文件,看看哪个文件是连续的,就采用哪个。


在 grub 的提示符下敲入

grub> blocklist (hd0,0)/hd.img

可以看到该 hd.img 文件是由几个不连续的块组成。如果没有逗号,表示是连续的(只有一块)。逗号越多,表示碎片越多。在敲入 blocklist (hd0,0)/hd.img 命令之后,应当显示出类似下面这样的结果:

(hd0,0)879328+2880

879328 是起始扇区号,这个数可以随便,没有任何影响。而那个 2880 就是 1.44M 的意思(2880个扇区就是 1440K)。这说明 hd.img 是硬盘上的一个连续的扇区序列,因此你可以把它仿真成软盘了,好!

如果显示成类似下面这样的结果:

(hd0,0)879328+96,880000+2784

你注意到 96 和 2784 加起来正好等于 2880。但是,这个 hd.img 文件不能用来仿真软盘,因为它在硬盘上是不连续的,它被放置在两个区域,一个区域是连续的 96 个扇区,第二个区域是连续的 2784 个扇区。要想使用 grub_for_dos 的软盘仿真(将来还有硬盘和光盘仿真)功能,必须要求——用来仿真的那个区域——是连续的磁盘块!!我们的实现方法是接管 int13 中断,是用硬盘区域而不是用内存区域来仿真(将来仿真大硬盘,本来就不可能用内存来仿真的),因而不用接管像 int15 这样的调整内存大小的中断。连续的硬盘区域减轻了编程的负担,也使得仿真之后的硬盘 BIOS 底层操作效率不受到影响。



grub.exe 文件放在任何目录都一样,无关紧要,只要你能运行它就行。

hd.img 放在哪里也是无关紧要。但是,如果不是在根目录,你需要在上述命令中指出所在的位置,例如 (hd0,0)/somewhere/else/hd.img



如果你的机器没有软驱,而你又需要运行某个 floppy.img 上的安装程序(或者引导程序),那么这个软件正是你所需要的。

如果你有软驱,但想节约软盘介质(软盘容易坏掉啊!),也可以试试。

还要说明,map 命令定义了磁盘仿真的映射,如果你不需要从仿真磁盘上引导启动你的操作系统,你当然可以 chainloader 别的某个引导扇区,并非一定得是这个软盘的映像文件。

已知的问题:


正如上面所说,GRUB 对于磁盘的仿真是基于 BIOS 的 int13。那些使用 BIOS 的操作系统,在 GRUB 仿真之下能够很好地运转。这些系统有:各种各样的 DOS;Windows Me 以前的系统(Wengier 说包括 Windows Me)。(Wengier 说)只有 Windows NT 系列才脱离了 BIOS。已知 LINUX 也不使用 BIOS。

——那些使用 BIOS 的操作系统都能正常使用 GRUB 的磁盘映射功能吗?

——是的。磁盘映射一旦由 map 命令定义,这个映射从操作系统的引导开始就有效,一直持续到操作系统退出为止。如果你在 grub 中用 map 命令定义了软盘的映射,此后你用 chainloader 命令引导了 Windows 98,则在 Windows 98 之下,你访问到的软盘,就是你的 img 文件的内容。相反,如果你用 chainloader 命令引导了 Windows 2000,则在 Windows 2000 中你有可能看不到仿真后的软盘,你可能发现,软盘操作总是指向你的真实软驱。

——那些不使用 BIOS 的操作系统就不能用 GRUB 的磁盘映射功能了吗?

——在这些操作系统引导的时候,磁盘映射还是起作用的。但是,当这类操作系统的内核引导完毕之后,它就不再使用仿真了。例如,你用一个软盘映象文件引导了 Linux,在 Linux 内核开始运行之后,Linux 就不使用仿真了。假如这时你访问 /dev/fd0 ,可以看到软盘驱动器的灯亮了。此时假如你还想找回你的软盘映象 img 文件的内容,可以在 Linux 内部通过硬盘文件系统来访问这个 img 文件。另外,设想你可能仅仅想用某个软盘映像文件来引导 Linux,而并非想让这个仿真效果在操作系统引导之后仍然保持下去;如果是这个目的,那么用 GRUB for DOS 应当是合适的。

一个很有用的链接地址:



1.7M 的急救软盘映象倒是容易找到,但 GRUB_for_DOS 目前还没有支持 非1.44M 的软盘映象。所以,找一个 1.44M 的急救盘映像,是很必要的。太好了!下面的 ramf-120.img.bin 软盘映象适用于任意 Linux 系统(不仅仅是某一个发行版的),相关网页在这里:

http://www.linux.org/docs/ldp/howto/Bootdisk-HOWTO/premade.html
http://www.tux.org/pub/people/kent-robotti/looplinux/rip/index.html

以下链接地址就是这个 1.44M 的文件, 可以直接用 dd 命令写入一张空软盘上,也可以用 grub.exe 直接从硬盘启动该软盘映像文件上的 LINUX 急救系统:

http://www.tux.org/pub/people/kent-robotti/looplinux/rip/ramf-120.img.bin
http://www.ibiblio.org/pub/Linux/system/recovery/ramf-120.img.bin

不点提供的其它文章:


DOS下用GRUB.EXE修复启动故障及用ISO文件从硬盘直接安装Linux的方法

GRUB for DOS 磁盘仿真命令简介

数百种 Windows 软件的免费替代品列表

同时启用三个 iso 文件,不解包方便安装 Mandrake


LG 光驱会被损坏!万勿安装 Mandrake 9.2!!



根据官方网站的报导:

http://www.mandrakelinux.com/en/

LG 光驱会被物理损坏的!!如果你有 LG 光驱,千万别装 Mandrake 9.2!!

即使你用纯硬盘的安装,也会损坏 LG 光驱!!


重要通知: 已经升级 MandrakeISOinstall-9.2.tar,不用修改 iso 文件名即可实施安装了。如果你用的是以前下载的 MandrakeISOinstall-9.2.tar 文件,当然还需要按照下面的说明修改 iso 文件名。


重要说明!Mandrake 9.2 正式版 ISO 文件的名字有所变化,这可能使得下面的补丁失效。解决方法是:把这些 ISO 文件更名为:


Mandrake92-cd1-inst.i586.iso
Mandrake92-cd2-ext.i586.iso
Mandrake92-cd3-i18n.i586.iso

或者

MandrakeLinux-9.2-CD1.i586.iso
MandrakeLinux-9.2-CD2.i586.iso
MandrakeLinux-9.2-CD3.i586.iso

或者

Mandrake9.2-cd1.i586.iso
Mandrake9.2-cd2.i586.iso
Mandrake9.2-cd3.i586.iso

同时启用三个 ISO 文件,不解包安装 mandrake,无须切换控制台(不再用手工输入命令)。在这里下载:

ftp://ftp.cosoft.org.cn/incoming/MandrakeISOinstall-9.2.tar (在此说明,解包后有很多文件,但你可以不用那些多余的文件,而只用里面的 hd.img 文件。这个 hd.img 文件已经是打过补丁的了。用它制作软盘,引导机器就行,别的一概都不需要了。)

或者进入目录看看在不在(该目录下将来会有其它 Mandrake 版本的 ISO 安装补丁):

ftp://ftp.cosoft.org.cn/incoming/

如果上述地址不行,请试试以下这个地址:
ftp://ftp.linuxeden.com/rflinux9.8/MandrakeISOinstall-9.2.tar

解压后,用 hd.img 文件即可。这个 hd.img 适合于 9.2 正式版。你可以用 grub_for_dos 直接启动硬盘上的 hd.img 文件;也可以用 vmlinuz 和 hd.rdz 来启动安装程序(注意看 hd.img 里面的 syslinux.cfg 文件)。这两种办法都是不用软盘的纯硬盘安装。

如果想在以后的发行版中使用,也有办法:把 sh 和 mix_ISOs 这两个文件拷贝到 hd.rdz 里面的 /tmp 目录就可以了。需要等待发行版发布出来之后才能生成新的 hd.rdz 文件。

但要强调:改动不多,仅仅增加上述两个程序文件(sh 和 mix_ISOs)而已,别的都不改动。而且这两个程序文件是固定的,不随 mandrake 版本的变化而变化。


还要注意有两点限制:

1。三个 iso 文件必须处在某个分区的“根目录”下,不能处在其它子目录下,而且根目录下不要有多余的 ISO 文件,例如,不要有以前其它版本的 Mandrake iso 文件。

2。文件名必须是 mandrake 提供的 iso 文件的原始名字,不应当改变文件名(大小写也不要改动)。

好了,尽情玩耍吧 :-) 程序经过多日调试,应当不会出现失败的。

安装程序照旧会询问你第一张 ISO 的分区位置和文件名,你仍然需要敲入 CD1 的 ISO 名字全称。在这之后,程序自动在那个分区的根目录下找到其他几个 ISO 文件,并自动 mount 上。这你都不用管,继续安装你会发现,所有三张 ISO 的软件包都在。


补充说明(仅对有兴趣的开发者有用,否则不需要):

解开 hd.rdz 的命令:

gunzip -c hd.rdz > hd.rd

或者等价地:

gzip -cd hd.rdz > hd.rd

压缩 hd.rd 的命令是:

gzip -9 -c hd.rd > hd.rdz


再补充:两种硬盘安装方法的 grub 命令集(采用任何一种都可以的,随便你喜欢哪个方法):

1。用 hd.img 安装,这需要用到 grub for dos 的软盘仿真功能:

grub> map (hd0,0)/hd.img (fd0)
grub> chainloader (hd0,0)/hd.img
grub> rootnoverify (fd0)
grub> boot

2。用 vmlinuz 和 hd.rdz 两个文件来安装(无需使用 grub for dos,用 GNU 原来的 GRUB 都管用):

grub> kernel (hd0,0)/vmlinuz ramdisk_size=128000 root=/dev/ram3 automatic=method:disk acpi=ht vga=788
grub> initrd (hd0,0)/hd.rdz
grub> boot



注意 kernel 一行很长,不要截断成两行。还要注意上述命令都假定这些文件位于 (hd0,0) 的根目录,如果你的不同,当然要作适当的修改。上述命令中所涉及到的那些文件,都在 MandrakeISOinstall-9.2.tar 这个软件包中。

你可能感兴趣的:(用 GRUB 来引导软盘映象——节约软盘介质了)