无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3959|回复: 78
打印 上一主题 下一主题

grub4dos虚拟个内存盘(用高位),进win98还能用上它?(已有结论,无法实现)

  [复制链接]
跳转到指定楼层
1#
发表于 2023-10-3 10:31:04 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 窄口牛 于 2023-10-4 20:33 编辑

我想把win98不识别的内存搞个虚拟磁盘给进了系统的98用,怎么写菜单?
来自 20#
 楼主| 发表于 2023-10-4 20:31:35 | 只看该作者
  1. find --set-root --ignore-floppies --ignore-cd /hdd.img.gz
  2. map --mem --top /hdd.img.gz (hd3)

  3. title Chainload IO.SYS for booting MS-DOS/Windows 9x/Me
  4. fallback +1
  5. find --set-root --ignore-floppies --ignore-cd /IO.SYS
  6. map () (hd0)
  7. map (hd0) ()
  8. map --hook
  9. rootnoverify (hd0)
  10. chainloader (hd0,0)/IO.SYS
  11. savedefault --wait=2
  12. boot
复制代码

最后可用的。不过进了win98找不到它,不能被系统使用。

点评

你这差不多应该算是成功了吧?我来猜猜看,问题可能出在什么地方。 我看到你只使用了一个 hdd.img,我猜,这是为了利用 4G 之上的高位内存而建立的内存盘。4G 之下的低位内存,有 3G 多,都给 win98 使用了,你  详情 回复 发表于 2023-10-4 22:30
回复

使用道具 举报

来自 31#
 楼主| 发表于 2023-10-5 10:39:01 | 只看该作者
本帖最后由 窄口牛 于 2023-10-6 14:42 编辑

又测试了,win98可以识别非--top的盘;xp安装svbus驱动,可以识别大的--top的盘,大盘作为(可能是因为镜像是img非ima)fd,无法工作,必须是hd才行。
今天又鼓捣了一上午结果一致。

点评

你修改帖子之后,我猜到问题在什么地方了。你试图把含有分区表的 img 仿真成软盘 fd0,这肯定不行。你需要的是一个不含 mbr 磁道,只有分区(卷)的 img,这才可以仿真为软盘。  详情 回复 发表于 2023-10-6 16:28
我不认为这段话的描述是可信的。尤其是 “大盘作为 fd 无法工作,必须是 hd 才行”。以前验证过的东西,应该不会突然之间就失效了。虚拟的 fd,不限于 1.44M,它可以是任意的几何参数,可以和硬盘一样大。否则,我们  详情 回复 发表于 2023-10-6 12:11
以前试验过了,虚拟软盘的大小没有限制。完全可以和硬盘一样大。不过,你自己试验的结果,你肯定更相信一些。实在找不到什么人对此感兴趣了。既不会有人支持你的结论,也不会有人反对你的结论。  详情 回复 发表于 2023-10-5 10:50
回复

使用道具 举报

2#
 楼主| 发表于 2023-10-3 10:33:17 来自手机 | 只看该作者
现在知道98可以用到2g,8g剩下的6g搞个虚拟磁盘。
回复

使用道具 举报

3#
发表于 2023-10-3 12:02:38 | 只看该作者
进win98,牛!
回复

使用道具 举报

4#
发表于 2023-10-3 12:49:23 | 只看该作者
支持
回复

使用道具 举报

5#
发表于 2023-10-3 13:39:33 | 只看该作者
还用Win98
回复

使用道具 举报

6#
发表于 2023-10-3 13:41:48 | 只看该作者
是的,win98 不能在超过 2G 的内存之下运行。所以,要生办法让 win98 只看到 2G 或更少。

思路就是,用内存盘占据高位内存,只留下 2G 或 1G 供 win98 使用。

map 的参数中就有故意浪费内存的用法,你研究一下就能找到。现在我已经对 grub4dos 不太熟悉了,长期不接触开发工作,因此也记不住那些命令参数。

不过我要说的是,无需浪费内存,只需用几个 map 命令加载映像文件到内存中,把内存真的用光(当然要留下 2G 或 1G 供 win98 使用)。没有什么特别的技巧,谁都可以尝试这么做,无非就是用一条(或几条) map --mem --top …… 命令而已。为什么需要几条 map 命令?因为你可能有好几个内存碎块,这样就需要多个内存盘才能填满这些内存块。注意用 displaymem 命令查看你的内存碎块分布情况。map --status 能够显示出哪些内存已经被内存盘占用了。你需要——恰好——把不想要的内存块占满,因此你的映像文件的长度需要经过精准计算。太大了拒绝加载,太小了未能填满相应的内存块。未占据的部分,仍有可能被 win98 看见。



回复

使用道具 举报

7#
发表于 2023-10-3 15:37:04 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 2023-10-3 16:13:49 | 只看该作者
给你点赞!成功了,分享一下,再次感谢!
回复

使用道具 举报

9#
 楼主| 发表于 2023-10-3 18:05:49 | 只看该作者
本帖最后由 窄口牛 于 2023-10-3 18:07 编辑


就搞4736M大小好了
回复

使用道具 举报

10#
发表于 2023-10-3 22:14:43 | 只看该作者
从图片看到,内存有两个碎片,属于正常情况(其实是碎片最少的情况,也就是最好的情况)。

第一块是从 1M 开始,长度为 3G 多(精确的长度是 3536768 KB)。这是 4G 以内的部分。

第二块是从 4G 开始,长度为 4736M。

可以考虑制作一个不含分区表的映像,长度正好是 4736M。把它map --top --mem 成为虚拟软盘(fdX),这样就不会自动添加分区表。如果制作硬盘映像也行,映像本身可以带上分区表,这样,map 成虚拟硬盘 (hdX) 时也就不会额外再添加分区表了。

这样,你就成功地把 4G 以上的那一块填满了。

你还需要另外一个 1G 多的 img,用来把 3G 多的那一块消耗掉,只留下 2G 或更少。建议先只留下 1G 试试看,如果正好是 2G 的话,你知道,它的起始地址在 1M 处,而不是在 0 处。所以,尾端的地址就会超过 2G。此时 win98 能否正常运行,还不好说。


另外,图片中的 grub4dos 版本有点老了。如果出现失败,可以先更新到最新版。

回复

使用道具 举报

11#
发表于 2023-10-4 08:58:56 | 只看该作者
这也能实现  
回复

使用道具 举报

12#
发表于 2023-10-4 09:18:27 | 只看该作者
可以按不点所述,找一台XP或者更新的机器,使用
  1. fsutil file createNew XXX
复制代码
命令创建一个指定字节长度的【空白】文件,XXX为【精确的】【字节数】,然后使用BOOTICE管理磁盘镜像的功能格式化,从而得到一个带分区表的硬盘镜像文件。
回复

使用道具 举报

13#
 楼主| 发表于 2023-10-4 09:34:33 | 只看该作者
  1. find --set-root --ignore-floppies --ignore-cd /win98.img
  2. map --mem --top /win98.img (hd3)

  3. title Chainload IO.SYS for booting MS-DOS/Windows 9x/Me
  4. fallback +1
  5. find --set-root --ignore-floppies --ignore-cd /io.sys
  6. chainloader /io.sys
  7. savedefault --wait=2bi
复制代码
必须有磁盘交换,win98没起来,虚拟磁盘也没搞成。
回复

使用道具 举报

14#
发表于 2023-10-4 12:21:00 | 只看该作者
本帖最后由 不点 于 2023-10-4 15:51 编辑

XP、Win98 的启动盘,必须从 hd0 或 fd0 启动。如果你用 hd3 做启动盘,肯定不行。

假如你是用原有的 hd0 里面的 io.sys 来启动 dos,那是可以的。但你的 win98 安装在 hd3,有点奇怪。我的意思是说,win98 启动以后,它要找自己的系统文件,它不一定知道它自己呆在 hd3 之下。所以,它可能找不到自己启动、运行所必须的一些配套文件。通常你会把 win98.img 虚拟成 hd0, 而把系统中原有的 hd0 虚拟成 hd1。


补充一下。如果你只是觉得好玩,来启动 win98,那就不建议这么弄了。你完全可以在 vmware 之类的虚拟机里面玩,不会有问题。如果是因为工作需要,必须使用旧版 Windows,那当然是值得折腾的。虚拟机可以虚拟各种硬件,所以可以运行 win98。


如果你是在较新的电脑上运行 win98,我想,你很有可能会失败的。因为,XP 都封杀了,这种新硬件就不支持旧版 windows。真实机的真实硬件是死的、不变的,因此它不如虚拟机里面灵活多变的虚拟硬件。除非由于某种原因自己实在没辙,必须使用 win98,否则,还是省省心,用新版 Windows 吧。


运行 win98 必须要有个 win98 可以支持的不太新的电脑。成功与失败,主要是在于硬件兼容性。


另外,作为首次尝试,你可以先下载别人做好的 win98.img,用 grub4dos 启动成功以后,心里有底,然后再自己安装。

还有个明显的问题,请留意。你的两个内存块都超过 2G。我前面已经提到了,你需要 2 个 img。而在你的菜单中,只发现有一个 img。


语法、用法方面,还要注意 map --hook 的时机。在贴出的菜单中没有发现这条命令。通常在 map 完一个或多个映像之后,就该执行 map --hook 了。

加了内存,WIN98却不能启动,为什么?
https://iask.sina.com.cn/b/1H58f5kxFwZr.html

上述网页讲解了如何通过 win98 的配置文件来限制 win98 使用的内存,这就从根本上解决了 win98 无法在大内存之下运行的问题。


另外,还有别的网友指出,超过 512M 内存,win98 就会不稳定。


回复

使用道具 举报

15#
 楼主| 发表于 2023-10-4 16:40:53 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2023-10-4 17:03 编辑

前面那一段只是虚拟内存盘(内存盘镜像叫了个win98)的命令,后面是启动win98的
回复

使用道具 举报

16#
 楼主| 发表于 2023-10-4 17:02:41 | 只看该作者
本帖最后由 窄口牛 于 2023-10-4 17:04 编辑
  1. <font size="6">find --set-root --ignore-floppies --ignore-cd /hdd.img.gz
  2. map --mem --top /hdd.img.gz (hd3)
  3. map --hook

  4. </font>
复制代码
这一段虚拟内存盘没有问题了,控制台已经可以看到内存盘。
  1. <font size="6">
  2. title Chainload IO.SYS for booting MS-DOS/Windows 9x/Me
  3. fallback +1
  4. find --set-root --ignore-floppies --ignore-cd /IO.SYS
  5. map () (hd0)
  6. map (hd0) ()
  7. rootnoverfy (hd0)
  8. chainloader IO.SYS
  9. savedefault --wait=2
  10. boot

  11. title Chainload BOOTSECT.DOS for booting MS-DOS/Windows 9x/Me
  12. fallback +1
  13. find --set-root --ignore-floppies --ignore-cd /BOOTSECT.DOS
  14. map () (hd0)
  15. map (hd0) ()
  16. rootnoverfy (hd0)
  17. chainloader /BOOTSECT.DOS
  18. savedefault --wait=2
  19. boot
  20. </font>
复制代码
看上说明,写的启动98的菜单,起不来。


这按E进来,啥也改不了呀,只能删除行,按O添加也打不上去任何东西呀?

点评

这个错误很容易犯。因为 grub4dos 的菜单,相当于一个批处理程序。而程序难免会出错。 比如说,chainloader IO.SYS,这就少了一个斜杠。应该是 chainloader /IO.SYS 这是原始 gnu grub 的语法设计。没办法  详情 回复 发表于 2023-10-4 17:28
交换磁盘后,要执行 map --hook 才能生效。 你在 rootnoverfy (hd0) 前只执行一次 map --hook就行。  详情 回复 发表于 2023-10-4 17:21
回复

使用道具 举报

17#
发表于 2023-10-4 17:21:18 | 只看该作者
窄口牛 发表于 2023-10-4 17:02
这一段虚拟内存盘没有问题了,控制台已经可以看到内存盘。
看上说明,写的启动98的菜单,起不来。


交换磁盘后,要执行 map --hook 才能生效。
你在 rootnoverfy (hd0) 前只执行一次 map --hook就行。
回复

使用道具 举报

18#
发表于 2023-10-4 17:28:48 | 只看该作者
窄口牛 发表于 2023-10-4 17:02
这一段虚拟内存盘没有问题了,控制台已经可以看到内存盘。
看上说明,写的启动98的菜单,起不来。

这个错误很容易犯。因为 grub4dos 的菜单,相当于一个批处理程序。而程序难免会出错。

比如说,chainloader IO.SYS,这就少了一个斜杠。应该是

chainloader /IO.SYS

这是原始 gnu grub 的语法设计。没办法,只能遵守。
回复

使用道具 举报

19#
发表于 2023-10-4 18:45:05 | 只看该作者
是的,对虚拟盘的虚拟状态(创建一个虚拟盘或删除一个虚拟盘)进行修改之后,就需要 map --hook,使得新的改动能够立即生效。

如果缺少了 map --hook,那么 grub4dos 会在最后执行 boot 命令的时候,顺便自动执行一次 map --hook。

通常需要根据自己的命令序列的具体情况和自己的便利,选择在适当的时机执行 map --hook。
回复

使用道具 举报

21#
发表于 2023-10-4 22:30:03 | 只看该作者
窄口牛 发表于 2023-10-4 20:31
最后可用的。不过进了win98找不到它,不能被系统使用。

你这差不多应该算是成功了吧?我来猜猜看,问题可能出在什么地方。


我看到你只使用了一个 hdd.img,我猜,这是为了利用 4G 之上的高位内存而建立的内存盘。4G 之下的低位内存,有 3G 多,都给 win98 使用了,你并没有映射出第二个盘,但却成功进入 win98,说明内存大小的问题,你已经解决了,不管是怎么解决的。


我猜,你的 Win98 位于真实磁盘 (hd0) 上,而不是虚拟的 (hd3) 上。你想让 win98 认出虚拟盘,就要把虚拟盘号设置得精准一些。如果你只有一个真实硬盘 hd0,你必须把虚拟硬盘的号码设置为 hd1,不能让 hd1 处于空缺状态(即,处于不存在的状态),而去创建虚拟硬盘 hd2 或 hd3,hd4 ……等等。盘号应该是连续的。


再比如说,你有两块真实硬盘 hd0 和 hd1,那么,新建立的虚拟硬盘,应该是 hd2,不可以是 hd3,hd4 等等。就是说,不能让硬盘号跳着走。假如你的 hd0,hd1,hd2 都已经存在了,此时,你再建立新的虚拟硬盘,这个新的盘号就应该是 hd3 了。这是操作系统识别盘号的规范。盘号是连续的,不可以有空缺(间隙)。grub4dos 本身可以识别有间隙的盘号,但操作系统不能识别。


还要注意,win98 不认识 ntfs 文件系统。必须用 FAT12、FAT16、FAT32 之类的文件系统类型。

回复

使用道具 举报

22#
 楼主| 发表于 2023-10-4 22:51:38 | 只看该作者
现在确实轮到hd3了,hd2上是win98,hd0是优盘(用它g4d引导的),hd1是个大硬盘。
优盘分区开始是(hd0,3),我修改了下大小,才正常为(hd0,1)。

点评

现在可以先试试用虚拟软盘 fd0。可以从网上下载一个 win98 启动软盘,1.44M 的即可,目的是测试。把它 map --mem 加载为 fd0,看看进入 win98 后能否看见这个软盘。(成功以后,再试试 map --mem --top 加载为 fd0,  详情 回复 发表于 2023-10-4 23:48
回复

使用道具 举报

23#
发表于 2023-10-4 23:48:59 | 只看该作者
本帖最后由 不点 于 2023-10-4 23:50 编辑
窄口牛 发表于 2023-10-4 22:51
现在确实轮到hd3了,hd2上是win98,hd0是优盘(用它g4d引导的),hd1是个大硬盘。
优盘分区开始是(hd0,3 ...

现在可以先试试用虚拟软盘 fd0。可以从网上下载一个 win98 启动软盘,1.44M 的即可,目的是测试。把它 map --mem 加载为 fd0,看看进入 win98 后能否看见这个软盘。(成功以后,再试试 map --mem --top 加载为 fd0,看看能否成功)。如果能看见,再把软盘弄成 4 G 多,就成功了。不一定非得是 win98 启动软盘,可以是别的软盘,我们只不过是试试罢了。
回复

使用道具 举报

24#
 楼主| 发表于 2023-10-5 08:14:20 | 只看该作者
试过了,还在xp系统也试了,系统里面都无法识别到g4d的虚拟磁盘。
看样子需要搞个驱动,让系统认识。

就需要高手解决了。

点评

win98 自己带有 realmode mapper 功能模块,可以自动识别实模式建立的虚拟盘。SVBUS 的开发者是个高手,他的驱动程序支持 XP 和 win2000。但碰巧不支持 win98。我认为,很难说服他,让他去支持 win98。因为,他也很  详情 回复 发表于 2023-10-5 10:25
xp 是不会认的,没必要试。按理说 win98 应该能认。  详情 回复 发表于 2023-10-5 09:05
回复

使用道具 举报

25#
发表于 2023-10-5 09:05:45 | 只看该作者
窄口牛 发表于 2023-10-5 08:14
试过了,还在xp系统也试了,系统里面都无法识别到g4d的虚拟磁盘。
看样子需要搞个驱动,让系统认识。
就 ...

xp 是不会认的,没必要试。按理说 win98 应该能认。
回复

使用道具 举报

26#
发表于 2023-10-5 09:56:45 | 只看该作者
win98 可以识别 grub4dos 建立的(内存,mem)虚拟软盘和虚拟硬盘。当时开发 grub4dos 时,已经测试过了。下载别人做好的 img,直接 map 就能成功。而且,这内存盘还是 win98 的系统盘。不过需要说明的是,当时电脑的内存普遍很少,不会有 4G 以上的高位内存。那时的测试,一般也只在 2G 内存以下进行测试,比如 128M,256M 之类的。

XP 下已经有 SVBUS 驱动,可以支持 grub4dos 虚拟盘。

win98 是操作系统本身支持 realmode mapper,所以,可以支持实模式建立的虚拟盘。如果你的 win98 把 与 realmode mapper 有关的模块精简掉了,那可能会出毛病。

我的新电脑不支持 bios,只能 EFI,所以,win98 已经无法在我的新电脑上运行了,我也就没兴趣试验了。否则,我还真想找个 img 试验一下。有兴趣者、不怕麻烦者,可以试验,只不过意义不大罢了。没有真实机,也可以用 vmware 来试验,不过,我没时间。以前在开发的时候曾经成功的,现在当然没必要重复试验了,尤其是在 bios 已经逐步淘汰的当代。
回复

使用道具 举报

27#
 楼主| 发表于 2023-10-5 10:05:02 来自手机 | 只看该作者
2g以内的话,有内存盘软件就能支持,没多大意思了。

点评

可是你已经用 1.44M 软盘进行了试验,失败了。这说明连 1.44M 都不支持了。我怀疑你这个结果的准确性。 不排除你什么地方弄错了的可能性。 前一帖我已经说了,实在是找不到人对此感兴趣了。假如有的话,其测试  详情 回复 发表于 2023-10-5 10:18
回复

使用道具 举报

28#
发表于 2023-10-5 10:10:44 | 只看该作者
本帖最后由 不点 于 2023-10-5 10:41 编辑

当时如果不支持 win98,或者支持得不完整,那么 grub4dos 可能也就没人用了,至少会有人来报告失败,要求开发者解决问题。就好比说,假如现在 grub4dos 在 win7、win10、win11 下有什么毛病,那不是有一堆人都来抱怨?开发者还能安心睡大觉吗?

现如今时代变化太大,win98 已经被大多数人当作 “奇葩”,懒得看一眼。此时,有兴趣来试验的人,可能连 2 个人 都找不到。而唯一的一个有兴趣进行试验的人,他说成功就是成功,他说失败,就是失败。别人已经不关心了。这就是这个问题的现状,谁也没法改变。
回复

使用道具 举报

29#
发表于 2023-10-5 10:18:43 | 只看该作者
窄口牛 发表于 2023-10-5 10:05
2g以内的话,有内存盘软件就能支持,没多大意思了。

可是你已经用 1.44M 软盘进行了试验,失败了。这说明连 1.44M 都不支持了。我怀疑你这个结果的准确性。

不排除你什么地方弄错了的可能性。

前一帖我已经说了,实在是找不到人对此感兴趣了。假如有的话,其测试结果,要么跟你一样,要么跟你相反。如果跟你一样,就强化了你的结论。如果跟你不一样,就否定了你的结论。没办法,时代走到现在了,连个测试者都很难再增加一个。
回复

使用道具 举报

30#
发表于 2023-10-5 10:25:38 | 只看该作者
本帖最后由 不点 于 2023-10-5 12:19 编辑
窄口牛 发表于 2023-10-5 08:14
试过了,还在xp系统也试了,系统里面都无法识别到g4d的虚拟磁盘。
看样子需要搞个驱动,让系统认识。
就 ...

win98 自己带有 realmode mapper 功能模块,可以自动识别实模式建立的虚拟盘。SVBUS 的开发者是个高手,他的驱动程序支持 XP 和 win2000。但碰巧不支持 win98。我认为,很难说服他,让他去支持 win98。因为,他也很清楚,win98 已经被新电脑判了死刑,而且是立即执行,不是缓期。


我只是猜测,没人愿意针对 win98 进行开发了。将心比心,如果我是那个开发者,我是不会再去开发了。开发它,肯定费劲。开发者甚至找不到当时的开发工具了。而且,又没有什么好处——没人鼓掌叫好,也不会有金钱方面的收入。费劲、费体力,而且名利两空,所以,我是不会去干的。因此推测,别人也不会那么做。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-27 19:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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