无忧启动论坛

标题: 还在使用 GNU Grub 0.9.7 的朋友请注意 [打印本页]

作者: blank007    时间: 2010-10-5 23:28
标题: 还在使用 GNU Grub 0.9.7 的朋友请注意
还在使用 GNU Grub 0.9.7 的朋友,如果你的计算机内存已经 超过了 2G ,请看看如下的语句执行时会出现什么情况?

title  0.                           Ghost 11.5.1

kernel /boot/grub/memdisk raw c=125 h=4 s=36 floppy
initrd /boot/image/msdos/ghost.zip

呵呵,会出现这样的错误:

selected item can't fit into memory  (大概的情况)

这就是说,这样的语句是不能正确执行的。

那么,在怎么办呢?方法有两个:

1.改用最新的 Grub4DOS 。最新的 Grub4DOS 已经修正了 4G 内存时的情况。可以正常执行上述语句。

2.继续使用 GNU Grub 0.9.7。但要将上述语句修改为:

title  0.                           Ghost 11.5.1

#强制将 内存设定为 128M
uppermem 131072
kernel /boot/grub/memdisk raw c=125 h=4 s=36 floppy
initrd /boot/image/msdos/ghost.zip




uppermem 131072 的意思是强制让 grub 认为计算机的内存只有 128M。这样理解:

在这种情况,凡是用 initrd 虚拟的磁盘,都会被放在 128M以内的地方。即使你有4G以上的内存,grub 也会这样做。

这样,就避免了计算机内存大于2G时,grub 无法处理的问题。

我猜测,uppermem 语句 对 map 指令也有类似的影响。

请大家试试。

[ 本帖最后由 blank007 于 2010-10-5 23:30 编辑 ]
作者: ql1307096    时间: 2010-10-6 11:47
我用map,早就不用memdisk了
作者: 2010wbhqf    时间: 2010-10-6 11:50
呵呵,grub 0.97现在用的人不多了,都用grub4dos或grub2了。
作者: yudian4756    时间: 2010-10-7 00:22
基本上只有在linux系统发行在09年6月以前的发行版中存在的、默认的比较多用grub0.97进行引导!grub0.97好象已经停止研发有4年多了,老了。意义不大了。
现在国际上主流的linux发行版基本不使用grub4dos,估计是认为grub4dos“不正统”吧。多是采用比较“正统”的grub2。
作者: yjd    时间: 2010-10-7 09:26
确实老了,好像从06以后就没再用过这个了。
作者: 不点    时间: 2010-10-12 19:06
新版的 grub4dos 确实可以访问超大的内存了。但是,mini98 却不能在大内存下运行。

今天我刚刚在一台有 4G 内存的电脑上启动 mini98.gz,失败。用以下方法启动,可以成功:

  1. map --mem=0x200000  /mini98.gz (hd0)
  2. map --hook
  3. chainloader (hd0)+1
  4. root (hd0,0)
  5. boot
复制代码


此处,--mem=0x200000 就表示将映像放置在内存 1G 处。也就是说,1G 以上都被虚拟磁盘占据。win98 的操作系统只能发现 1G 的内存,所以,启动成功。

我试过 --mem=0x400000,而 win98 启动失败。也就是说,2G 内存仍然失败。估计比 2G 稍微低一点,就可以成功了。
作者: blank007    时间: 2010-10-12 21:01
标题: 回复 #6 不点 的帖子
呵呵。阁下也来回帖?荣幸之至啊。
新版的 Grub4dos 取消了 uppermem 指令。
而我还是喜欢用 gnu grub 0.97 。
这个现象是我在无意中发现的。因为在以前,我用 gnu grub 0.97 ,试图启动内存大于4g 的计算机时,除了 winpe 能启动外,凡涉及 memdisk 和 initrd 指令的各类系统均不能启动。后来,仔细看了看 其中的指令,试了一下。果然,uppermem 指令起作用了。
作者: 不点    时间: 2010-10-13 12:50
uppermem 的目的是限定内存的容量。map --mem=... 也可达到一样的效果。被内存盘所占据的内存,都不能被操作系统使用了,所以,这间接达到了限定内存的目的。

uppermem 对内存的操作有副作用,因此取消了。grub4dos 的内存操作很规范(简化了),都是通过 int15 来实现的,与操作系统能够良好兼容。uppermem 受 multiboot 规范的影响。而 grub4dos 已经把 multiboot 隔离开来了,不启动 multiboot 内核的时候,不使用 multiboot 的相关代码。而 uppermem 却和 multiboot 的内存搅和在一起。因此把 uppermem 去掉了。
作者: 2010倒影    时间: 2010-10-14 00:06
呵呵,老版本的早就没用了,也没注意有这问题
!~




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3