无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 555|回复: 28
打印 上一主题 下一主题

看下为啥起不来

[复制链接]
跳转到指定楼层
1#
本帖最后由 窄口牛 于 2024-12-19 20:45 编辑

之前相关帖子

机器上两块硬盘,一块上装了win2000,引导也在这块盘,在同一分区放了g4d
那么这块盘的mbr就是g4d,第一分区pbr还是nt5(2000的)
我在高位内存搞了一个虚拟盘文件加载在高位内存(12/16)



    find --set-root --ignore-floppies --ignore-cd /hdd.img.gz
    map --mem --top /hdd.img.gz (hd2)

    title find and load NTLDR of Windows NT/2K/XP\n find and load NTLDR of Windows NT/2K/XP
    fallback +1
    find --set-root --ignore-floppies --ignore-cd /ntldr
    map () (hd0)
    map (hd0) ()
    map --hook

    find --set-root --ignore-floppies --ignore-cd /ntldr
    rootnoverify (hd0)
    chainloader /ntldr
    savedefault --wait=2
    boot

还照之前写的
现在是这个画面,win2000起不来


2#
发表于 3 天前 | 只看该作者
乱码,被视为命令,当然会报错了。

你的菜单里面含有非法字符?

你在语句之间插入 pause 之类的命令,跟踪一下,看看哪些命令执行了,而哪条命令还未执行。

这样,自己就知道哪里有错了。

回复

使用道具 举报

3#
发表于 3 天前 | 只看该作者
用AI给你修改了一下代码 你可以试试看 请先备份好你自己的代码 如果不行 好恢复。
  1. # 定义一个函数来检查并设置根设备
  2. function set_root {
  3.     find --set-root --ignore-floppies --ignore-cd $1
  4.     if [ $? != 0 ]; then
  5.         echo "Could not find $1. Booting fallback."
  6.         savedefault --wait=2
  7.         boot
  8.     fi
  9. }

  10. # 定义一个函数来尝试加载Windows
  11. function load_windows {
  12.     set_root "/ntldr"
  13.     if [ $? == 0 ]; then
  14.         rootnoverify (hd0)
  15.         chainloader /ntldr
  16.         if [ $? == 0 ]; then
  17.             echo "Loading Windows NT/2K/XP..."
  18.             boot
  19.         else
  20.             echo "Failed to chainload ntldr."
  21.             fallback +1
  22.         fi
  23.     else
  24.         fallback +1
  25.     fi
  26. }

  27. # 尝试从硬盘镜像启动
  28. title "Boot from HDD Image"
  29. find --set-root --ignore-floppies --ignore-cd /hdd.img.gz
  30. if [ $? == 0 ]; then
  31.     map --mem --top /hdd.img.gz (hd2)
  32.     if [ $? == 0 ]; then
  33.         echo "Mapping HDD image to memory..."
  34.         map () (hd0)
  35.         map (hd0) ()
  36.         map --hook
  37.         load_windows
  38.     else
  39.         echo "Failed to map HDD image."
  40.         fallback +1
  41.     fi
  42. else
  43.     echo "HDD Image not found."
  44.     fallback +1
  45. fi

  46. # 直接尝试加载Windows
  47. title "Boot Windows NT/2K/XP directly"
  48. load_windows

  49. # 回退选项
  50. title "Fallback"
  51. echo "Fallback to default entry..."
  52. savedefault --wait=2
  53. boot
复制代码
改进点说明:

函数封装:将重复的代码段封装成函数,提高可读性和维护性。
错误处理:增加了更多的错误检查和处理逻辑,确保在每一步出现问题时有适当的反馈和回退选项。
注释:添加了注释以解释每一步的目的。
启动项:将启动项分成两个部分,一个尝试从硬盘镜像启动,另一个直接尝试加载Windows,这样可以提供更多的选择和灵活性。
回退:增加了一个明确的回退选项,确保在任何情况下都能回到默认启动项。

请注意,这个脚本假设你已经正确设置了GRUB的环境变量和配置文件,并且你的系统支持所有用到的命令和功能。在实际应用中,可能需要根据具体的硬件和操作系统配置进行微调。


点评

grub4dos的代码给你改成grub2了……  详情 回复 发表于 前天 13:51

评分

参与人数 1无忧币 -10 收起 理由
sunsea -10 胡乱使用AI

查看全部评分

回复

使用道具 举报

4#
 楼主| 发表于 3 天前 | 只看该作者
还发现12g的img打包为gz就只能用4g了,解压出来是真的12g。
换个什么打包方式呢?
回复

使用道具 举报

5#
发表于 前天 00:30 | 只看该作者
hdd.img.gz填高位内存,不是要一块一块填吗?

回复

使用道具 举报

6#
 楼主| 发表于 前天 07:23 | 只看该作者
本帖最后由 窄口牛 于 2024-12-19 07:43 编辑

去掉map --hook这句就能用了,这是为什么?
回复

使用道具 举报

7#
发表于 前天 07:31 | 只看该作者
我自己从未用过 4G 以上的 gz 文件。你说的问题,也没见到其他人报告。确认是不是你的压缩工具有问题,或者与 grub4dos 不兼容?个人感觉 grub4dos 中的 gz 有可能存在 4G 问题。模糊的印象中,gz 在文件尾部保存原始未压缩文件的长度,而且只用 4 字节来保存,所以最大不超过 4G。

另外,gz 格式是有缺陷的(缺陷主要是文件头部没有原始未压缩文件的长度信息)。后来 grub4dos 支持了 lzma 的压缩格式,并建议用户尽量采用 lzma 压缩格式,取代 gz 格式。但是要注意,有些 LZMA 压缩工具生成的 lzma 文件的开头是 0xFFFFFFFFFFFFFFFF,这表示原始未压缩文件的长度未知(未填写)。这是不行的,不能够被 grub4dos 认可。
回复

使用道具 举报

8#
发表于 前天 07:52 来自手机 | 只看该作者
g4d系统内,文件无论压缩前后,都不能大于等于4G。好多函数内部有判断代码,超过就退出运行。

点评

vhd也不能超过4g吗?  详情 回复 发表于 前天 08:51
碰巧我刚才抢先发帖了。 gz 是原始 grub legacy 支持的格式,那时的 grub 系统本身不考虑 64 位,只支持 32 位。这一点,在 grub4dos 中似乎仍然保持原样,未有改进。 但后来支持的 lzma 格式,是全新编写的,  详情 回复 发表于 前天 08:20
回复

使用道具 举报

9#
发表于 前天 07:58 | 只看该作者
谢谢分享
回复

使用道具 举报

10#
发表于 前天 08:20 | 只看该作者
本帖最后由 不点 于 2024-12-19 10:32 编辑
2011yaya2007777 发表于 2024-12-19 07:52
g4d系统内,文件无论压缩前后,都不能大于等于4G。好多函数内部有判断代码,超过就退出运行。

碰巧我刚才抢先发帖了。

gz 是原始 grub legacy 支持的格式,那时的 grub 系统本身不考虑 64 位,只支持 32 位。这一点,在 grub4dos 中似乎仍然保持原样,未有改进。

但后来支持的 lzma 格式,是全新编写的,当然支持 64 位长度。岁数大了,记忆实在不好了。大约是 karyonix 编写的 lzma 支持代码。chenall 和 我貌似也进行了后期的补充完善。有可能阴差阳错,记不清了,抱歉。
回复

使用道具 举报

11#
发表于 前天 08:51 | 只看该作者
2011yaya2007777 发表于 2024-12-19 07:52
g4d系统内,文件无论压缩前后,都不能大于等于4G。好多函数内部有判断代码,超过就退出运行。

vhd也不能超过4g吗?

点评

只读取引导吧,全部加载的时候已经交给win 的引导了。  详情 回复 发表于 前天 09:15
回复

使用道具 举报

12#
 楼主| 发表于 前天 09:14 来自手机 | 只看该作者
那就又不会了,怎么把它搞成一个分区呢,三个4g的。
回复

使用道具 举报

13#
 楼主| 发表于 前天 09:15 来自手机 | 只看该作者
wintoflash 发表于 2024-12-19 08:51
vhd也不能超过4g吗?

只读取引导吧,全部加载的时候已经交给win
的引导了。
回复

使用道具 举报

14#
 楼主| 发表于 前天 10:23 来自手机 | 只看该作者
不从虚拟盘启动就不需要map--hook了,是吗?
回复

使用道具 举报

15#
发表于 前天 10:47 | 只看该作者
lzma 压缩格式支持超过 4G 长度。karyonix 做了完整的工作,包括(编写汇编代码)支持 4G 以上的内存访问。

这应该不会有问题的。

不从虚拟盘启动,可以不写 map --hook 命令。但这条命令(map --hook)会在 boot 命令执行的那一刻自动执行。所以,你最好还是写上吧(你不写,它也会自动执行;你写上,让自己明白,没坏处)。

点评

写上它就乱码,进不了系统了,就是这句的问题。  详情 回复 发表于 前天 12:03
回复

使用道具 举报

16#
发表于 前天 11:56 | 只看该作者
评论的才是高人
回复

使用道具 举报

17#
 楼主| 发表于 前天 12:03 来自手机 | 只看该作者
不点 发表于 2024-12-19 10:47
lzma 压缩格式支持超过 4G 长度。karyonix 做了完整的工作,包括(编写汇编代码)支持 4G 以上的内存访问。 ...

写上它就乱码,进不了系统了,就是这句的问题。

点评

你对你的情况最了解。比如,菜单是否有问题(包括存在不可见字符,等等),再比如你的 grub4dos 是从哪里获得的,是不是被某个第三方发行者修改过的?版本是新还是旧?等等,就不列举了。 我认为,不能写 map -  详情 回复 发表于 前天 13:05
回复

使用道具 举报

18#
发表于 前天 12:13 来自手机 | 只看该作者
静态vhd,不能超过4G。动态vhd以及其他压缩文件,不能超过4G。解压缩后放在内存,是可以超过4G的。换句话说,文件在磁盘,只能读写4G以内。文件在内存,没有这个限制。

点评

grub4dos 的扇区序列仿真,从一开始就支持任意大小。不存在 4G 限制的问题。  详情 回复 发表于 前天 12:50
回复

使用道具 举报

19#
发表于 前天 12:50 | 只看该作者
2011yaya2007777 发表于 2024-12-19 12:13
静态vhd,不能超过4G。动态vhd以及其他压缩文件,不能超过4G。解压缩后放在内存,是可以超过4G的。换句话说 ...

grub4dos 的扇区序列仿真,从一开始就支持任意大小。不存在 4G 限制的问题。
回复

使用道具 举报

20#
发表于 前天 13:05 | 只看该作者
窄口牛 发表于 2024-12-19 12:03
写上它就乱码,进不了系统了,就是这句的问题。

你对你的情况最了解。比如,菜单是否有问题(包括存在不可见字符,等等),再比如你的  grub4dos 是从哪里获得的,是不是被某个第三方发行者修改过的?版本是新还是旧?等等,就不列举了。

我认为,不能写 map  --hook 命令,这肯定属于不正常情况。不过,选择权完全掌握在你自己手上。比如说,如果你能够正常使用,没有出现别的问题,你可以忽略这个问题。又比如,如果你想折腾,你可以继续调试、定位、追查。
回复

使用道具 举报

21#
发表于 前天 13:05 | 只看该作者
来学习下
回复

使用道具 举报

22#
发表于 前天 13:51 | 只看该作者
wangyibin 发表于 2024-12-18 23:10
用AI给你修改了一下代码 你可以试试看 请先备份好你自己的代码 如果不行 好恢复。
改进点说明:

grub4dos的代码给你改成grub2了……
回复

使用道具 举报

23#
发表于 前天 13:57 | 只看该作者
找一个VSCode之类的编辑器,拖进去看一下换行符是CRLF还是LF,原来你放map --hook那句的位置是不是有什么不可见字符,有的话删掉、换行符换成LF试试。
回复

使用道具 举报

24#
 楼主| 发表于 前天 14:32 来自手机 | 只看该作者
在控制台把那行删除,增加空行,重新写进去依然不行。
回复

使用道具 举报

25#
发表于 前天 15:36 | 只看该作者
楼主报告的情况,感觉很异常。正常情况下是不该出现的。

在没有提供更详细的信息之前,我暂且认为,这个 grub4dos 的来历不明。或者使用了开发者不推荐的、“容易产生不易排查的错误” 的方式、方法,比如 gfxmenu、message 之类的。一句话,不正常的前提条件,产生了不正常的结果。

grub4dos 本身出现这么大的 bug 的可能性有没有呢?当然有。但可能性不大。因此,我觉得没必要再关注这个话题了。
回复

使用道具 举报

26#
 楼主| 发表于 前天 15:43 来自手机 | 只看该作者
算来历不明吧,QQ群共享下载的,官方网站下载不到20240226。

点评

我个人比较关注 grub4dos 的 bug 问题。 官方网站确实有问题。姑且认为 qq 群共享的,也可接受吧,至少它有版本的日期。 我想,要排除 bug,就得有很多思路、方法。首先,要确定 bug 产生的时间,精确到日期。  详情 回复 发表于 前天 16:03
回复

使用道具 举报

27#
发表于 前天 16:03 | 只看该作者
本帖最后由 不点 于 2024-12-19 16:24 编辑
窄口牛 发表于 2024-12-19 15:43
算来历不明吧,QQ群共享下载的,官方网站下载不到20240226。

我个人比较关注 grub4dos 的 bug 问题。

官方网站确实有问题。姑且认为 qq 群共享的,也可接受吧,至少它有版本的日期。

我想,要排除 bug,就得有很多思路、方法。首先,要确定 bug 产生的时间,精确到日期。

所以,就要尝试不同时期的 grub4dos 版本,看看究竟是哪一天的改动,产生了新的问题。

比如说,用一个非常老的版本来试验(比如说,2020年的版本),看看问题是不是同样存在。

这个过程很辛苦。如果没有时间,或者没有兴趣,就不要去试验了,——可以等待另外一个人报告 bug(等待他能给出详细的排查结果)。



【补充】你说的 20240226 是 qq 群提供的 grub4dos 的版本日期吗?如果 qq 群提供的不是这个版本日期,那就不要用它(因为它肯定不是最新版)。自己再多找几个版本进行测试,直到能确定 bug 最早出现的日期为止。

当然了,这是假定 grub4dos 存在 bug。

另外,也可能是 menu.lst 文件中含有非法字符,由此带来的问题。

你可以彻底删除 menu.lst 文件。进入 grub4dos 命令行,手动敲入所需要的命令,看看 map --hook 命令能否得到执行。

只要多想想办法,总能挖出问题的根源。

回复

使用道具 举报

28#
 楼主| 发表于 前天 22:05 来自手机 | 只看该作者
本帖最后由 窄口牛 于 2024-12-19 23:23 编辑

原因可能是菜单显示里的换行符
回复

使用道具 举报

29#
发表于 3 小时前 | 只看该作者
学习
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-21 21:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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