LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2439|回复: 7

我修复GRUB,重见Linux 和Windows双启动菜单的经过

[复制链接]
发表于 2004-6-10 16:21:34 | 显示全部楼层 |阅读模式
我修复GRUB,重见Linux 和Windows双启动菜单的经过    write by spy2000 ,e-mail:spy_2000cn at

yahoo.com.cn
    我的电脑本有三个系统:Windows Sever 2003,Windows XP Pro,RH AS 3。重装了XP后Linux 和

Windows 双启动菜单没有了,只剩下了Windows Sever 2003和Windows XP Pro的选择菜单。我知道这是

Grub 被覆盖的缘故,于是我收集Grub的资料,开始了“Grub 菜单修复行动”:
    第一步:看Linux 的分区号有无变化。由于Linux 装的较早,分区号忘了。于是用Linux 安装盘启动

了电脑,选择安装模式到了手工分区这一步时查到Linux 分区分别是:/boot分区是hda6 swap分区是hda7

/分区是hda8。注意,我只是想查一下分区,不是要重分区!所以,记下各分区号后就重启了电脑。当然

,如果你记得分区号,就不用这一步了。
    第二步:我手头上只有Grub for DOS 的资料,看了一下,感觉很有帮助(附在本文后),知道了Grub

中的分区号的表示方法,即:Grub中的(hd0,0)=hda1=Windows的C盘,(hdx,y)就代表第x个硬盘的第y分区

,x=0,1,2,3....,y=0,1,2,3...。而Linux中常见的hdxy,也代表第x个硬盘的第y分区,但

x=a,b,c...,y=1,2,3.....。我的/boot分区在Linux的hda6,在Grub中则表示为(hd0,5),而以前安装Grub的

hda1在Grub中则表示为(hd0,0)。
    第三步:万事具备。用Linux安装盘启动电脑,选择linux rescue(RH AS 3中为按F5后输入Linux

rescue,回车。网卡随便选一下。下来选择载入系统,进入Shell。输入grub,回车。出现grub>的提示符

。我按下Tab键,看见一堆选项:
Possible commands are: blocklist boot cat chainloader clear cmp color configfile debug

device dis
playapm displaymem dump embed find fstest geometry halt help hide impsprobe initrd install

ioprobe
kernel lock makeactive map md5crypt module modulenounzip pager partnew parttype password

pause qu
it read reboot root rootnoverify savedefault serial setkey setup terminal terminfo testload

testvb
e unhide uppermem vbeprobe
    我猜要安装Grub,应该是setup项,键入help setup,回车。出现setup的提示,我看了半天才搞明白,

其实可以简写为:
setup Grub安装盘 Linux的boot分区
    这就好办了,Grub安装盘为第一硬盘,用Grub表示为(hd0)。Linux的boot分区,用Grub表示为

(hd0,5)。于是,我的修复命令为:
    setup (hd0) (hd0,5)  回车,系统会自动check必要的文件,并重新写入Grub。
  注意:如果不执行setup (hd0) (hd0,5),也可使用下面两条命令来代替setup (hd0) (hd0,5)这一条

命令。
  embed /grub/e2fs_stage1_5 (hd0) 回车
    install /grub/stage1 (hd0) (hd0)1+16 p (hd0,5)/grub/stage2 /grub/grub.conf 回车
  最后输入quit退出Grub,输入exit退出Shell后自动重启后,熟悉的Linux 和Windows 双启动菜单终

于失而复得了。
总结:1.要看清每一个选项和说明文件,尤其是英文说明,多看几次就会懂了,我是CET-4,但第三步用

了三个多小时才搞定。
      2.Linux下重要文件的位置要知道,比如刚才的stage文件,我开始也不知道在哪里,后来进了

Windows 后,用Total Commander(带Linux插件)查看了Linux分区,才找到。
      3.注意不同的Linux发行版的方法可能有所不同,我用的是下载版的RH EL AS 3,如果是Mandrake,

用安装光盘就可以解决问题了,其它的Linux版本我没用过,也许会有少许不同,大家可以参照我的方法

,自行解决。
      4.很多时候,我们也可以解决一些系统问题。只要多钻研,不必重装系统,也可以用几个命令解决

问题。而且,那种成就感,也是很爽的。
      5.看起来好象很简单的事情,其实我用了一整晚加上一上午的时间,将近七个小时,虽然累,但想

到大家可以少走弯路,我也很开心。


  附Linuxeden.com上的Grub for DOS 的资料:

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

              【2 月 7 日更新】 GRUB for DOS 0.2.0pre 发布。希望它不做任何更动就可成为最终

版。

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

              下载 grub for dos 0.2.0pre:

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

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

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


              正式版的推出日期基本上完全取决于英文文档的完成日期,希望有人能够帮助【可以参

照本文结尾的中文文档,从而贡献一篇英文的说明文档】。我写作英文比较吃力,所以,如果由我来写
            0.2.0 的英文说明,可能就太过于简化了。





            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 应当是合适的。
 楼主| 发表于 2004-6-10 16:22:26 | 显示全部楼层

我修复GRUB,重见Linux 和Windows双启动菜单的经过

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/ke ... inux/rip/index.html

            以下链接地址就是这个 1.44M 的文件, 可以直接用 dd 命令写入一张空软盘上,也可以用

grub.exe
            直接从硬盘启动该软盘映像文件上的 LINUX 急救系统:

            http://www.tux.org/pub/people/ke ... ip/ramf-120.img.bin
            http://www.ibiblio.org/pub/Linux/system/recovery/ramf-120.img.bin





            不点提供的其它文章:

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

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



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




            重要通知: 已经升级 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 磁盘仿真命令示例

            在进入正题之前,先看看 GRUB for DOS 各系列版本的差异。

            GRUB for DOS 0.0.x 系列是没有任何磁盘仿真扩展功能的版本,功能上完全等价于 GNU

GRUB。这里说明,GNU
            GRUB 本身就有磁盘映射功能。磁盘映射是一种特殊的磁盘仿真。磁盘映射只能把一个 BIOS

磁盘号码映射到另外一个 BIOS
            磁盘号码,也就是说,它只能整盘整盘地仿真,不能用磁盘中的一个文件来仿真另外一个磁

盘。这个版本也是最安全可靠的,可以认为,GNU GRUB
            有多安全,GRUB for DOS 0.0.x 就有多安全。

            GRUB for DOS 0.1.x 系列具有 0.0.x 的全部功能,除此之外还具有软盘仿真扩展。但是只

能用硬盘上的 img
            文件来仿真 1.44M 的软盘,并且对软盘映象进行了写保护,也就是说禁止软件通过 int13
            接口写入软盘的映象。这个版本也没有已知的安全问题。

            GRUB for DOS 0.2.x 系列增加了任意规格的软盘和硬盘的仿真功能,是功能上比较完善的

版本。它和 0.1.x
            系列的最大不同之处是,它默认时不再保护被仿真的磁盘映像。如果想获得与 0.1.x 等价

的功能,必须为 map 命令加上
            --read-only 参数。【注:0.1.x 系列也支持 --read-only 参数,但即使没有这个参数,

0.1.x
            系列也会自动保护磁盘映象不被写入。】

            版本 0.2.x 虽然支持写入虚拟磁盘映象,但是,格式化虚拟磁盘映象的 int13/AH=05h
            功能并未完整实现。当格式化磁道的时候,GRUB for DOS 0.2.x
            并不真的采取任何实质性的格式化动作,也即,它并不改变虚拟磁盘中的任何扇区的内容,

而仅仅立即返回“格式化成功”的(类似于 fake
            write 的虚假)消息给调用者。这没有太大的问题。只有一点需要注意:当您在 DOS/Win98
            下要格式化虚拟磁盘的时候,您先不要忙着下达格式化命令,而是要首先运行删除命令,将

虚拟磁盘根目录下的所有文件以及所有目录都删去,变成一个空盘,然后再下达格式化命令,这样,格式

化后的虚拟磁盘能够正常使用。否则,格式化之前的垃圾目录项仍然在残存着,这将影响虚拟盘的正常使

用。

            由于版本 0.2.x
            支持写入虚拟磁盘,所以,对虚拟磁盘边界的检查是必不可少的一个步骤了。程序已经对此

作了保护。当试图读取或者写入超过虚拟磁盘边界的那些扇区的时候,int13
            接口会返回失败信息“扇区未找到”,而不是真的读取或者写入(!!)硬盘上紧接着虚拟

磁盘映象后面的扇区内容。【读取这些越界的扇区,并无实质性的危险;但写入这些越界的扇区,将给硬

盘带来灾难。所以这个保护是必须的。】

            有关 GRUB for DOS 0.0.x 系列的说明文档,请看这里:DOS下用GRUB.EXE修复启动故障

            有关 GRUB for DOS 0.1.x 系列的说明文档,请看这里:用 GRUB 来引导软盘映象——节约

软盘介质了
 楼主| 发表于 2004-6-10 16:23:12 | 显示全部楼层

我修复GRUB,重见Linux 和Windows双启动菜单的经过

接下来,本文只讨论 GRUB for DOS 0.2.x 系列的新功能。

            首先,安全的考虑。在版本 0.1.x 的时候,由于只仿真了软盘,并且以只读的方式访问,

所以,安全问题不很重要。然而,0.2.x
            大大不同了,它不仅可以写入软盘,并且默认就打开了这个功能。所以,如果您不注意的话

,您有可能因此而遇到麻烦。大致有以下几种情况:

            一、如果您的程序(或者病毒)要写入软盘,那么您的软盘映象可能会改变内容,这可能不

是您想要的结果。

            二、如果您仿真了硬盘,进入 Windows98 之后,硬盘的号码可能会发生错位【比如 BIOS

磁盘 0x81 变成了 0x82
            等等】。这时候如果写入了硬盘映象,可能导致另外一个真实硬盘被破坏掉。这里看到,如

果加上 --read-only
            参数,安全性仍然可以得到比较好的保障。

            三、即使如上述“二”所说加上了只读参数,也仍然存在一定的安全隐患,其原因是,

Win98 将我们的 int13 仿真程序当作病毒来对待【在
            www.google.com 中查找 MBRint13 就可以找到这类信息】,因此,win98 有可能故意产生

某些错误来破坏我们的
            int13 的运作。迄今为止并未发现“在加上只读参数后,Win98 仍然破坏磁盘映象”的现象

,但也不能保证绝对安全。

            四、在整盘映射的情况,加上 --read-only 参数之后,被仿真的磁盘在 DOS 下是只读的,

但是在 win98
            下不是只读的。这是因为 win98 对于“整盘映射”实施的是“32位磁盘存取”【应当叫做

“保护模式磁盘存取”】,它不使用
            BIOS,因此它不知道我们加上了 --read-only 参数,所以它会写入磁盘。有鉴于此,所以

,在整盘映射的情况下不要使用
            --read-only 参数【当然,使用 --read-only 参数并无任何坏处】。

            五、如果没有对硬盘进行仿真,也就是说仅仅使用了类似于 map DESTINATION (fd0) 的软

盘仿真命令,那么,在 DOS
            下应当是比较安全的。然而,如果要在仿真之后运行 win98,请注意这样一个顺序:首先用

map --read-only
            DESTINATION (fd0) 来运行,当您能够确认 win98 可以正常读出仿真软盘的内容之后,下

一次运行 map
            命令的时候就可以不再添加 --read-only
            参数了。如果不能读出仿真软盘的内容,那就说明读错了位置【可能读出的是别的磁盘上的

扇区】,这预示着“写入仿真软盘”将会带来灾难。所以建议在运行
            win98 时先用 --read-only 参数进行确认,保证安全。

            对于版本 0.2.x 来说,如果某个问题只是引起“死机”,这不被认为是安全问题。只有当

某个磁盘扇区被破坏掉了的时候,才算作安全问题。

            使用软盘仿真的情况较多,所以,主要用软盘仿真的例子来说明磁盘仿真命令的用法。

            1。把硬盘上某个盘符(例如 C:)仿真为 A:,并从 C: 盘引导 win98:

            map --read-only (hd0,0)+1 (fd0)
            chainloader (hd0,0)+1
            boot

            上述 (hd0,0) 是 Win98 下的 C: 盘。进入 Win98 后可以发现,现在 A: 盘的内容跟 C:
            盘完全一样。这时,如果随意在 A: 盘上删除文件,会导致 C: 盘也删除该文件,因而有可

能引起故障(例如死机)。

            在 map 命令中,(hdm,n)+1 被解释为代表整个 (hdm,n)
            分区,而不仅仅是代表分区的第一个扇区。相比之下,在其它地方,(hdm,n)+1 仍然只代表

分区的第一扇区。

            2。把硬盘上某个盘符(例如 C:)仿真为 A:,并从 A: 盘引导 win98:

            map --read-only (hd0,0)+1 (fd0)
            map --hook
            chainloader (fd0)+1
            rootnoverify (fd0)
            boot

            此处需要用 map --hook 命令激活 A: 盘的就地仿真。如果没有 map --hook 命令,那么后

续的 chainloader
            (fd0)+1 命令就要寻找真实软驱的软盘介质上的内容,而不是我们想要的虚拟软盘上的内容


            最后一条 rootnoverify (fd0) 告诉引导程序说,我们是从软盘启动机器的。

            3。把硬盘上某个 img 文件仿真为 A:,并从 C: 盘引导 win98

            map --read-only (hd0,0)/file.img (fd0)
            chainloader (hd0,0)+1
            boot

            4。把硬盘上某个软盘 img 文件仿真为 A:,并用该 img 映象里面的文件 dos.img 来引导

机器:

            map --read-only (hd0,0)/file.img (fd0)
            map --hook
            chainloader (fd0)/dos.img
            rootnoverify (fd0)
            boot

            此处,file.img 是 C: 盘上的一个软盘映像文件,在这个映象文件中,包含了一个叫做

dos.img 的文件。如果不用 map
            --hook 命令(该命令启用了就地仿真功能),则无法在后续的 grub 命令行中访问

dos.img 文件。这个例子只是说明 map
            --hook 命令的作用,我们通常是不会用到这个例子中的方法的。


            上述命令中,软盘可以是任意的规格,任意的大小。

            下面举一个硬盘仿真的例子,但是最好不要启动 win98,而应当只限于启动 DOS:

            map --read-only (hd2,6)+1 (hd0)
            map --hook
            chainloader (hd0,0)+1
            boot

            这里,(hd2,6)+1 是第三块硬盘上的某个逻辑 DOS 分区。“map (hd2,6)+1 (hd0)”命令将

扩展 DOS
            分区仿真为 BIOS 的 0x80 号硬盘。激活就地仿真【map --hook】之后,“chainloader

(hd0,0)+1”中的
            (hd0,0)+1 就是仿真之后的虚拟 0x80 硬盘分区,而不是仿真之前的 0x80 号硬盘分区了。

【此处的 (hd0,0)+1
            实际上就是仿真之前的 (hd2,6)+1】。您应当保证这时在该分区中存在着 DOS,否则引导会

失败。如果您不启动 win98,可以不用
            --read-only 参数。如果试图启动 win98,通常会引导失败。

            因为 MS-DOS 的逻辑分区之前的 63
            个扇区处,都存放了一个“扩展分区的分区表”,所以有可能用它来仿真一个硬盘。“扩展

分区表”中的引导记录全都是 00 字节。GRUB for
            DOS 0.2.x 在读取这个分区表的时候,作了一些修改,使得这个表看起来像是一个合法的硬

盘主分区表。GRUB for DOS
            并不写入该扇区,因为默认的 safeboot 在起作用。这是安全的。在这种情况下不应当加入

--unsafe-boot 选项,因为
            win98
            会随意写入虚拟磁盘的引导扇区,这将导致该分区表信息的错位,造成扩展分区不可访问的

后果【内容还在,只是扩展分区表错误导致不可访问。手动修改扩展分区表可以解决这个问题,但需要计

算准确】。

            上述硬盘仿真的例子,如果改成下面的方式,这将是失败的:

            map --read-only (hd2,6)+1 (hd0)
            chainloader (hd2,6)+1
            boot

            分区 (hd2,6) 的 DOS 引导记录中有一个“隐含扇区”的字段,这个字段必须修改。如果没

有 map --hook
            命令,该字段不会被正确修改,因而将导致引导失败。修改该字段的程序,是在 int13 的

中断处理程序中,所以需要 map --hook
            之后再读出该扇区的内容【此时所读出的该扇区内容已经经过恰当修改了】。在 map --

hook 之后,应当使用 chainloader
            (hd0,0)+1 来装入仿真之前的 (hd2,6)+1,直接用 chainloader (hd2,6)+1 是错误的【直

接用
            chainloader (hd2,6)+1 结果,使得该扇区不能利用 int13
            的中断处理程序进行必要的修改,这将导致引导失败】。注意,int13 仅对磁盘 (hd0) 起

作用,对 (hd2) 不起作用,这是因为
            map --read-only (hd2,6)+1 (hd0) 命令只对 (hd0)
            进行了仿真,而对其它磁盘【包括(hd2)】都没有进行仿真。所以,int13 程序会修改

(hd0,0)+1 但不修改
(hd2,6)+1。

            又,上述“修改”并不发生在磁盘上,而是发生在内存中。所以,磁盘上的扇区内容不会改

变。也就是说,当读取该扇区的时候,要对读出的扇区进行修改,从而保证扇区内容可用;而当写入扇区

的时候,由于默认的
            safeboot 在起作用,所以,不会有写入的动作,直接返回虚假的“写入成功”的消息。

            前面已经解释过了,safeboot 只保护硬盘 MBR 主引导扇区以及硬盘第一个主分区的第一个

扇区(通常是 DOS
            的引导扇区)——只保护这两个扇区,不保护其它扇区。



            安全建议(这是以前写的,现在还保留它,或许这是引起注意的一个好办法):
              1。如果您用 GRUB for DOS,请尽量用版本 0.0.x 的,不要用更高的。
              2。如果您不用 0.0.x 的,请尽量用版本 0.1.x 的,不要用更高的。
              3。如果您不用 0.1.x 的,请尽量用版本 0.2.x 的,不要用更高的。
              4。如果您用 0.2.x 的版本,请尽量不要用 map 等磁盘仿真命令。
              5。如果您用 0.2.x 的版本,也用了 map 命令,请尽量先在虚拟机中测试运行。
              6。版本 0.2.x 在您的虚拟机中测试过了之后,在真实机器中尽量用 --read-only 等

参数运行。
              7。尽管已经把 map 命令加上了 --read-only 等参数,但也请尽量不要启动 Windows


              8。如果要启动 Windows,请尽量不要把用来仿真的 img 映像安置在 (hd0) 驱动器上


              9。如果启动了 Windows,即便仿真磁盘的映像不在 (hd0)
            驱动器上,您也得做好最坏的打算:其一,如果仿真映像被毁,您不要感到出乎意料;其二

,如果某个真实磁盘全部被毁,您不要感到难以接受;其三,如果您的所有的、全部的硬盘都报废了,您

也不要感到太奇怪。
              10。版本 0.2.x 以后的仿真技术是给熟练的电脑玩家作为研究的目的来使用的,不是

给普通用户使用的。
              11。玩家们最好互相交流经验,研究别人在使用过程中失败的情况,详细阅读说明文档

,避免使自己遭受不必要的损失。

              在初期的测试中暴露出很多问题,也损坏过很多硬盘,所以在这里特别通报一下,并写

出了上述注意事项。


            map 命令的新功能是有某种危险的,建议首先在 VMware 或者 Virtual PC 这类虚拟机中测

试。先用 --read-only
            或者 --fake-write 参数运行 map
            命令,这样是在只读状态下测试,安全一些。只读测试一段时间后,没有问题的话,再进行

全面测试。测试时,在 grub 所仿真的虚拟磁盘上安装
            DOS/Win9x/Me,不要用别的操作系统。即使全部测试都成功,这个仿真技术也仍然有着它固

有的危险性。这是基于 BIOS
            的仿真,不是全方位的仿真。例如,当你格式化一个磁盘的时候,你得明白这个磁盘是不是

仿真了的? 以及你所用的格式化软件是使用 BIOS 呢?
            还是使用磁盘 IO 端口读写? 使用 BIOS 的格式化软件,在仿真之下是安全的。使用磁盘

IO
            端口的格式化软件,当它格式化一个仿真了的磁盘时,在最坏的情况下,实际上会格式化你

的真实硬盘,至于说这种危险的误操作会发生在哪个硬盘上,取决于使用了什么样的
            map 命令集(参考下面的“技术细节和实现方法”一节)。更进一步的测试,请大家报告

DOS 的 format 命令、Windows
            资源管理器的格式化命令、磁盘碎块整理命令等等,以及第三方生产的 HD-COPY 等工具软

件在进行格式化操作时是否安全。





            技术细节和实现方法:

            GRUB for DOS 0.2.x 将要对各种规格的软盘映像给以支持。由于硬盘的仿真也很类似,所

以,也要对硬盘的 img
            给以支持。另外,GRUB for DOS 0.2.x 也要开放写入虚拟磁盘的操作(写入虚拟盘是一种

危险的操作,因为实际上我们写入了硬盘的
            img 文件中,万一 GRUB for DOS 0.2.x 的仿真程序有
            BUG,写入硬盘其它扇区中,可能造成数据毁损、无法启动等严重问题!)。


            对软盘规格:需要解决的技术问题是如何恰当地处理三维的几何地址,也就是平常所说的
            CHS(C——磁道柱面号;H——磁头号;S——扇区号)。对于真实的软驱(和软盘),都有

这些规格的。然而,我们仿真之后的 img
            文件,却无法表示这些规格。例如,一个 1.44M 的没有格式化的 img 文件,里面的数据全

部是 00,怎么确定其 CHS 值呢?

            当 img 文件已经经过 DOS 的格式化时,就用软盘第一扇区的 BPB 表来确定 CHS 值。如果

没有经过 DOS
            的格式化,或者发现其 BPB 表是错误的,那么就根据 img 文件的大小来确定 CHS 值。如

果是标准的(或者常用的)软盘 img
            尺寸,如 1.44M,1.2M,2.88M 等等,就用已知的 CHS 值。我们支持的软盘尺寸甚至可以

是任意的(非标准的),如 10M 或
            50M 或 500M 的软盘 img 文件。这时候,如果 BPB 表中没有合法的 CHS 值,就需要用

map 命令行参数来手动设置
            CHS 值了。如果命令行没有指定 CHS 值,给出一个错误信息,拒绝仿真。当软盘 BPB 表和

map 命令行都有 CHS
            的指定时,以命令行的指定为准,如果两者有差别,给出一个警告信息。

            软盘规格列表(不支持扇区大小不等于 512 字节的防拷贝加密软盘):

            软盘容量    每面磁道数    每道扇区数    磁头数或面数
            ----------------------------------------------------------------
            0160K(标准)    40        08        1  
            0180K(标准)    40        09        1  
            0200K       40        05        2  
            0250K       50(暂用)     10(暂用)     1  
            0320K       80        08        1  
            0320K(标准)    40        08        2  
            0360K(标准)    40        09        2  
            0400K(优先)    40        10        2  
            0400K       80        05        2  
            0420K       42        10        2  
            0500K       50(暂用)     10(暂用)     2  
            0640K       80        08        2  
            0720K(标准)    80        09        2  
            0729K       81        09        2  
            0738K       82        09        2  
            0747K       83        09        2  
            0756K       84        09        2  
            0800K       80        10        2  
            0810K       81        10        2  
            0820K       82        10        2  
            0830K       83        10        2  
            0840K       84        10        2  
            0902K**      82        11        2  
            0984K**      82        12        2  
            1066K**      82        13        2  
            1200K(标准)    80        15        2  
            1215K       81        15        2  
            1230K       82        15        2  
            1245K       83        15        2  
            1260K       84        15        2  
            1360K       80        17        2  
            1377K       81        17        2  
            1394K       82        17        2  
            1411K       83        17        2  
            1428K       84        17        2  
            1440K(标准)    80        18        2  
            1458K       81        18        2  
            1476K       82        18        2  
            1494K       83        18        2  
            1512K       84        18        2  
            1558K**      82        19        2  
            1600K       80        20        2  
            1620K       81        20        2  
            1640K       82        20        2  
            1660K       83        20        2  
            1680K       84        20        2  
            1680K(优先)    80        21        2  
            1701K       81        21        2  
            1722K       82        21        2  
            1743K       83        21        2  
            1764K       84        21        2  
            1804K**      82        22        2  
            1886K**      82        23        2  
            2880K(标准)    80        36        2  
            3198K       82        39        2  
            3608K**      82        44        2  
            3690K**      82        45        2  
            3772K**      82        46        2  

            (感谢 Roy 兄提供了大量的磁盘规格资料)
 楼主| 发表于 2004-6-10 16:24:12 | 显示全部楼层

我修复GRUB,重见Linux 和Windows双启动菜单的经过

硬盘比软盘复杂了一些。硬盘第一扇区不是 DOS 的引导区,而是主引导记录(MBR),这里

没有 BPB
            表,而是有一个分区表。所以,对于硬盘的 CHS,作如下的处理:

            当没有分区表或者分区表错误时,必须由 map 命令行来指定 CHS,否则拒绝仿真。当分区

表存在时,由四个分区表项中的任意一项都可以确定
            H 和 S 的值。再用 img 文件长度即可确定 C 的值。【大硬盘的 CHS 值也是可以用这种办

法来确定的。】

            也可能有人不愿意给出命令行 CHS 参数,他们希望 grub for dos 任意选择一个适当的值

。map
            命令将提供这样一种选项。首先根据上述 BPB 或分区表来确定CHS,如果失败,再用以下的

办法来确定。对于软盘,尽量采用具有 2
            个磁头的参数。对于硬盘 img 文件,如果让 GRUB for DOS 来自动挑选,则总是选择 63个

扇区、256 个磁头。

            drive_map_slot 结构:

            字节:FROM_DRIVE——把哪个 BIOS 磁盘号映射到另外一个磁盘号或者映射到另一个 img

文件?
            字节:TO_DRIVE——被映射到的磁盘号。BIOS 磁盘号:0,1,……表示软盘,0x80,0x81

,……表示硬盘。
            字节:MAX_HEAD——最大磁头号。取值范围:0 至 255。
            字节:MAX_SECTOR——最大扇区号。取值范围:1 至 63。
            4字节:START_SECTOR——被映射到的 img 文件的起始扇区号。
            4字节:SECTOR_COUNT——被映射到的 img 文件的扇区总数。必须是偶数。

            当 MAX_SECTOR 的取值为 0 时,表示禁止常规磁盘读写中断(例如int13/AH=02)【map 的

命令行参数
            --disable-chs-mode】。MAX_SECTOR 的最高两位还有用。最高位为 1 表示只读操作【map

的命令行参数
            --read-only 或者 --fake-write】,写入仿真软盘的扇区数据统统丢弃。次高位为 1 表示

禁止扩展磁盘读写中断(例如
            int13/AH=42H)【map 的命令行参数 --disable-lba-mode】。SECTOR_COUNT
            是总扇区数。这个数目必须是偶数(当它为奇数时,处在末尾的一个扇区不参加仿真)。因

此,SECTOR_COUNT 的最低位还有用。当该位为
            1 而且 MAX_SECTOR 的最高位也为 1 时,表示“伪装写入扇区”操作【map 的命令行参数
            --fake-write】。“伪装写”和“只读”是类似的,区别在于,“只读”在扔掉写入的扇区

之后,告诉调用者程序说:“该盘写保护,不能写入”;而“伪装写”在扔掉写入的扇区之后,欺骗调用

者程序说:“成功写入,请继续吧。”【我们有时候确实是需要这个功能的】。当
            START_SECTOR 为 0 并且 SECTOR_COUNT 的高 31 位都为 0
            时,表示用整个磁盘(而不是其中的一部分扇区段)来仿真【SECTOR_COUNT 的最低位表示

“伪装写”】,这样仿真的效率要高一些【GNU
            GRUB 原来的仿真就是这样的,代码也很简单】。

            当 SECTOR_COUNT 为奇数(也即 --fake-write 置位)而 MAX_SECTOR 的最高位为 0(也即
            --read-only 没有置位)时,称为
            safeboot,此时虽然允许写入虚拟磁盘,但不允许写入虚拟磁盘的第一扇区(引导区)。而

且如果虚拟磁盘映象是一个硬盘映象,也不允许写入第
            0 柱面第 1 磁头第 1 扇区(也就是逻辑扇区号 LBA=63 的扇区,该扇区通常是操作系统

的引导扇区,例如 DOS 的 boot
            record)。这是对于 int13/AH=03h 来说的。程序并不禁止 int13/AH=43h (扩展写盘功能

)的写入。也就是说,用
            int13/AH=43h 可以写入任何扇区。 safeboot 默认时是开启的,可以使用 map 命令行参数

--unsafe-boot
            来关闭它。【注:不存在 --safe-boot 选项。默认时之所以打开 safeboot,是因为曾经碰

到 win98
            破坏引导区的事情发生。如果您不准备启动 win98,您可以加上 --unsafe-boot 选项,从

而允许 int13/AH=03h
            写入引导扇区。很明显,只有在对虚拟盘进行分区以及格式化、或者运行 dos 的 sys 命令

时才需要 --unsafe-boot 选项。】

            map 命令还有两个命令行参数:

            --heads-per-cylinder=NUM_HEADS

            --sectors-per-track=NUM_SECTORS

            NUM_HEADS 的取值范围是 1 至 256;NUM_SECTORS 的取值范围是 1 至 63。但它们也允许

是 0,这表示用户允许
            grub for dos 任意挑选一个合适的值。如果 map 的命令行没有指定 --heads-per-

cylinder 以及
            --sectors-per-track,那么,当 grub for dos 不能从 img
            文件的第一扇区探测到一个合适的值时,会给出错误信息并拒绝仿真。

            这里指出一点限制。GRUB for DOS 扩展了原来 GNU GRUB 的仿真。GNU GRUB
            原来的仿真是一种简单的仿真,只能仿真整个磁盘,不能用一部分扇区来仿真。新的仿真可

以用磁盘上的部分扇区序列来仿真,但是,这个功能的实现,利用了新型
            BIOS 的逻辑块寻址(LBA)功能,也就是磁盘扩展读写功能。这对于老旧的 BIOS 是无效的

。所以,老的 BIOS
            无法利用新的仿真功能。但 GRUB for DOS 兼容 GNU GRUB 的仿真,所以,老的 BIOS 仍然

可以用 GRUB for
            DOS 的“用整个磁盘来仿真”的功能,这是原来 GNU GRUB 本来就有的功能,其用法在

grub for dos 中完全没有变化。

            可以在 grub> 提示符下用 help map 命令察看即时帮助信息。

            下面介绍另外几个 map 命令行参数的用法。

            map --status 这条命令显示磁盘仿真的状态,很有用。所显示的状态标题栏中,最右边的

Hk 表示 hook
            的意思,其值是两位二进制数 xy,因此取值有四种:00,01,10,11。当 x 为 1 时,表示现

在 grub 正在使用该虚拟磁盘。当
            x 为 0 时,表示现在 grub 没有使用该虚拟磁盘。当 y 为 1 时,表示在运行 map --

rehook 命令之后,grub
            将使用该虚拟磁盘。当 y 为 0 时,表示在运行 map --rehook 命令之后,grub 将不使用

该虚拟磁盘。

            map --status 命令所显示的其它状态值都是容易理解的,它们都是以十六进制来表示的数

值。

            map --hook 这条命令用于直接在 grub 内部就开始使用仿真。通常 grub 本身是不使用仿

真的,有了这条命令之后,从
            grub 命令行就可以开始检验仿真的效果了。cool!关闭这个功能的命令是 map --unhook

            map --unhook 正如上面解释的,关闭 grub 的即时仿真功能。

            map --rehook 这条命令的用途:当你使用了 map --hook 命令之后,又用了新的 map
            命令映射了别的磁盘,那么,你可以用 map --rehook 命令来激活全部这些仿真。这条命令

等价于以下两条命令接连发出:

            map --unhook
            map --hook

            当撤销磁盘仿真时,仅仅用 map --unhook 是不够的,还需要用类似于 map (fd0) (fd0)

的命令来撤销 (fd0)
            的仿真。“map --unhook”命令仅仅使得在 grub 命令行之下不再使用仿真了,当您用

boot 命令时,会自动再次 hook
            上。要想使得某个 map DESTINATION FROM_DRIVE 命令彻底失效,必须用 map FROM_DRIVE
            FROM_DRIVE 命令来撤销它【将某个 BIOS 磁盘号码映射到它自己,就意味着撤销它】。撤

销部分 BIOS
            磁盘号码的仿真之后,一般还需要运行 map --rehook 命令。例如,“map (hd1) (hd1)”

命令撤销了对 (hd1)
            的仿真,但在运行“map --rehook”之后才起作用。

            GRUB for DOS 0.2.0 也许会成为终结版。以前曾经考虑为 GRUB for DOS
            增加新的功能,但是现在看来可能没有时间去做了,我可能要把兴趣转移到别处【如果可能

的话,希望以后还能再转回来】。欢迎有兴趣的朋友继续对
            GRUB for DOS 作进一步开发。

            一些遗留问题:

            1。支持从 ISO 映像文件启动。(情况复杂,有难度)
            2。支持从 CDROM 启动。(情况复杂,有难度)
            3。支持从 win98 下直接运行 grub。(技术难度高)
            4。自动探测和恢复 BIOS 中断向量,从而使 grub for dos 支持任意的实模式 DOS。(技术

难度中等)
            5。在 emm386 运行时也能运行 grub for dos(首先解决从保护模式切换到实模式)。(技术

难度高)
            6。解决在磁盘仿真时和 win98 的一些冲突问题。(技术难度高)
            7。增加退出到 DOS 的功能。(技术难度中等)
            8。创建一个可以生成“具有连续磁盘扇区的文件”的工具。


            致谢:
              中国 DOS 联盟之联合 DOS 论坛上的朋友们给予了大量的测试、建议、帮助,衷心感谢

各位。特别感谢 Wengier
            在技术上给予的很多直接帮助,尤其是他对于“32位磁盘存取”的深刻洞察,帮助解决了

GRUB for DOS 0.2.0
            所遇到的一个关键技术障碍。






            阅读:14022次

            责任编辑:不点

            来源:此处获得 grub for dos 的最新版
            网友评论
            大名评论标题:
            lfree 无标题
            详细内容:(2003-05-29 08:12:28)太好了!从另一个方面说明grub功能强大!
            Wengier GRUB for DOS
            详细内容:(2003-08-22 05:02:48)GNU GRUB确实很不错!请问除这个GRUB for
            DOS外,有将GRUB装入MBR的GRUB installer for DOS吗?
            不点 既然有人需要这个
            详细内容:(2003-08-22 11:39:32),那下一个版本就准备增加这个installer程序了。但是

,个人认为安装到 MBR
            或者别处都不太好,因为 MBR
            以及各个分区的引导扇区都是各种引导管理器所争夺的场所,一旦安装上,肯定覆盖掉原来

的引导管理器。有时候这会造成机器崩溃。
            不点 fdisk /mbr 命令都不安全
            详细内容:(2003-08-22 11:47:21)对于我们普通使用的微软兼容的引导管理器(lilo,grub

)来说,fdisk
            /mbr 是没有危险的。但是有人(在windows下)使用某些不兼容的管理器,这些管理器把MBR

中的分区表移动到别处,这时候,再用
            fdisk /mbr 命令就毁了整个硬盘。
            不点 同样的道理,
            详细内容:(2003-08-22 11:52:58)这时候在 MBR 中安装 LILO 或者 GRUB
            也会毁掉整个硬盘,因为硬盘第一个扇区中的分区表不知放到哪里去了(有的管理器甚至加

密之后存放到别处,windows病毒也可能做这样的事情)。

            arccreator 无标题
            详细内容:(2003-08-22 14:52:31)在cosoft.org.cn中的协同开发平台上注册一个项目,可

有存储空间保存文件
            lfree 无标题
            详细内容:(2003-08-25
            10:12:45)不点兄,ftp.cosoft.com.cn在我这边无法实现域名解释,必须使用ip=

211.100.7.71。
            不点 谢谢两兄提供的线索
            详细内容:(2003-08-25
            20:48:40)以前我把文件放到ftp.gnuchina.org,结果,现在这个站点不能访问了:-(,被迫

转移到cosoft。可是居然有人也报告域名解析出现问题,不管是谁的原因,看来站点不稳定。似乎也有人

报告从国外一些地区访问不了这个站点。现在先凑合着,将来转移到sourceforge,唉!
            Wengier 保存站点
            详细内容:(2003-08-25 21:33:13)那我同时也将这些文件保存到“中国DOS联盟”的网站上

作为镜像下载地址如何?
            关于将GRUB安装到MBR的installer,其实可以在安装程序中提示一下用户:除非将GRUB安装

到MBR确实是他们所希望的操作,就请不要继续试图将GRUB安装到MBR中。这样做可以吗?
            不点 镜像当然没问题,谢谢老兄
            详细内容:(2003-08-26 13:27:45)今天搜索了一下,发现原来老兄就是将grub_for_dos介

绍给 FreeDOS
            开发者的那位,“中国DOS联盟”是个很不错的网站。关于提醒用户,目前只有一个

password命令可以阻止。GRUB没有其他接受用户输入的命令。不过,下一版我会修改menu.lst的提示方式

的。再次谢谢。
            Wengier 镜像已建好
            详细内容:(2003-08-27 07:35:57)我刚才已将GRUB for
            DOS的镜像下载网页做好了,您在这儿看看吧。如果有什么建议的话,请告诉我:
            http://newdos.yginfo.net/grubdos.htm
            不点 非常好,非常专家!
            详细内容:(2003-08-27
            14:24:49)把文件名改成DOS的8.3格式,不错。我曾经把grub_for_dos向国外网站

pclinuxonline.com,osnews.com介绍过,可是,人家不理!我想,大概人家觉得你连个网页都没有,不算

是软件吧。有了老兄帮忙,这下好了:-)有机会我再推广试试。
            Wengier FreeDOS的bug已fix
            详细内容:(2003-08-31 07:19:50)我几天前把FreeDOS
            Kernel的那个bug告诉了FreeDOS的开发者。今天Bart给我电邮,说此bug已被fix了。具体如

下: Your problem
            is now resolved in the current FreeDOS kernel CVS with this fix: ---
            kernel/main.c 28 Aug 2003 21:03:47 -0000 1.52 ++
            Wengier 补充一下
            详细内容:(2003-08-31
            07:34:08)上面的那个留言好像写不下,后半部分自动消失了,所以只好再写一次吧。我前

几天把FreeDOS的那个bug的详细情况通知了其开发者,结果Bart给我的回复的具体内容见这儿的下半部分

http://newdos.yginfo.net/grubdos.htm
            Wengier 无标题
            详细内容:(2003-08-31 08:31:17)刚才他已将此bugfix的内容加入到这儿的FreeDOS
            Technote中了:http://www.freedos.org/freedos/news/technote/201.html
            不点 回 Wengier 兄
            详细内容:(2003-09-23 20:49:28)对不起,我经常浏览论坛,但不常看邮箱。谢谢你!希

望你能帮助建立一个 GRUB FOR
            DOS 的开发主页,并希望藉此,GRUB for DOS 被推广开来:-) 给你的信,请注意查收。
            asouxuning 不错
            详细内容:(2003-10-01
            23:43:09)有个问题就是我的img文件在hda8盘里,我就照猫画虎用8代替hd0的0,但不成功,

那要如何表示hda8盘呢?谢谢了
            不点 img 文件必须处在 FAT32 分区
            详细内容:(2003-10-03
            09:59:14)因为ext2等分区无法制作扇区完全连续的1.44M文件。/dev/hda8是(hd0,7)。注意

,即使是 FAT32
            分区,新建的文件也不一定是连续的。如果整个FAT32分区是空的,则新建的文件就是连续

的了。你可以把一个文件拷贝成几个备份,看看哪个连续就用哪个。
            vangzi 对NTFS分区的支持怎样?
            详细内容:(2003-11-18 19:07:54)请问可以引导放在NTFS分区上的MDK9.2吗?
            不点 GNU GRUB 目前不支持 NTFS
            详细内容:(2003-11-19 12:14:42)但是,有人在做这样的事情。估计很可能下一个 GNU

GRUB 的版本就可以支持
            NTFS 以及 iso 等文件系统了。grub for dos 不重复这种劳动。等到 GNU GRUB 支持 NTFS

之后,grub
            for dos 也就自然可以支持了。
            不点 如果你只关心安装 Mandrake 的话
            详细内容:(2003-11-19 12:28:48)不管你用什么途径启动了 mdk 的安装程序,接下来它就

要寻找硬盘上的安装文件。因为
            LINUX 支持 NTFS 文件系统,所以很可能 NTFS 上的 ISO
            文件也是可以被安装程序找到的。但究竟行不行,我没有试验过。建议用 FAT32 文件系统


            黯月 无标题
            详细内容:(2003-11-20
            12:52:32)我装win2000srv时mbr被清了,用grub盘启动到硬件检测完毕就说找不到roo fs,

请教
            不点 这里似乎不是解决这个问题的地方
            详细内容:(2003-11-25 11:28:41)这可能是病毒干的, 分区表没了, 无论哪个操作系统也

没办法找到分区的.
            建议你把硬盘挂到别的机器上运行专门软件来试图恢复数据. 如果数据不重要, 干脆从软盘

启动 DOS 用 FDISK 重新分区和格式化.
            黯月 无标题
            详细内容:(2003-12-20 11:17:59)解决了,我的redhat9是默认安装,要加上initrd= 才行
            黯月 无标题
            详细内容:(2003-12-20 11:19:04)可不可以加个背景图,看起来挺漂亮的
            不点 我没有时间考虑这个问题
            详细内容:(2003-12-25 23:54:04)以后有兴趣的时候再说。确切地说,GRUB for DOS 是从

GNU GRUB
            衍生出来的,如果再接受别的补丁(例如 redhat 的补丁),则会增加 grub for dos 的维

护负担。所以最好大家首先说服
            GNU GRUB 的开发者,让他们加入 redhat 的背景图片补丁。
            ansin 垃圾,又在搞版本活动
            详细内容:(2003-12-26 13:27:51)我早在其它地方看了,这垃圾还搬出来威,唉。。。。

真失败
            wang575 源码在哪里?
            详细内容:(2004-01-09 16:33:36)0.0.x也可以。
            不点 源码是以补丁的形式出现的,
            详细内容:(2004-01-10 14:10:06) 您需要首先得到 GNU GRUB 的源码,然后实施 grub

for dos
            的补丁,就可以了。如果您还想加入别的东东,例如 redhat 的背景图片,加入之后在

LINUX 下编译一次就可以了。源代码的 diff
            文件可以从文章中所提及的网站上下载,解开压缩包就看到了。
            热血青年 无标题
太平洋里的水 该用户已被删除
发表于 2004-6-10 19:34:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-6-10 19:46:31 | 显示全部楼层
兄弟太棒了!加精!
发表于 2004-6-21 10:21:15 | 显示全部楼层
非常棒!应该精华!
发表于 2004-6-21 10:28:12 | 显示全部楼层
排版依然……遗憾
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表