无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7139|回复: 27

[求助] GRUB4DOS在某品牌机上加载VHD到内存后有时不能正确引导

[复制链接]
发表于 2020-1-11 14:47:19 | 显示全部楼层 |阅读模式
本帖最后由 2013lirunext 于 2020-1-15 16:17 编辑

--------------------2020-1-15更新---------------
把debug off给去掉,依次手动输入代码试了一下,

map --mem --top (hd0,0)/RAMOS/RAMOS.VHD (hd0)
执行上面这句没问题,可以载入VHD到内存,载入后不卡死

map --hook
执行上面这句没问题,无任何信息输出,不卡死

root (hd0,0)
执行上面这句,屏幕输出:Filesystem type is ntfs,partition type 0x07,没有卡死

chainloader /bootmgr
执行上面这句,屏幕输出:Will boot NTLDR from drive=0x80,partition=0x0(hidden sectors=0x800),没有卡死

boot
最后执行上面这句,光标一闪一闪,卡死了

--------------------分割线-------------------------

情况是这样子的:最近入手了一台HP的600 G1 SFF机器,准备接上我自己以前的老硬盘当文件共享服务器和跑跑虚拟机用。照惯例用RAMOS,即把Windows 7安装到VHD,VHD内的系统装上FiraDisk驱动,修改VHD内的BCD中启动设备的启动磁盘为VHD后,就可以用GRUB4DOS把VHD加载到内存运行成为RAMOS了。以前一直在好几台机器都是这么搞的都没什么问题。这台机器这么搞也没问题,也能用,就有个奇葩的问题:

有时候GRUB4DOS成功加载VHD到内存后,左上角的加载信息“[xxxxMB/xxxxMB]_”变成了一个光标“_”一闪一闪,不能正常引导进系统。这此时机器应该没死机,按键盘Caps Lock键,键盘灯有响应。问题出现的原因不清楚,概率的话大概一个礼拜总得出现个两三次。

注意:是每次都能成功加载VHD到内存,但是有时候可以成功引导进桌面,有时候加载到内存后就引导失败,只有个光标一闪一闪。

我自己研究了一下:
1、重启机器不能解决问题,出现问题后,多次重启进入都没用。
2、此问题和VHD文件无关,非VHD文件损坏问题,也非VHD内系统的问题。
3、奇葩的是出现这个问题后,在第一块硬盘上的普通Windwos 7系统和PE系统都能正常启动,不会受此问题影响
(机器总共有4块硬盘,主板和BIOS的编号都是0、1、2、3,硬盘0是主硬盘,也就是俗称的第一块硬盘。这块硬盘安装了普通Windows7系统和“微PE”,存放VHD文件和GRUB4DOS。)

可以暂时解决的方法有两个,只要这么操作后马上就有效:
1、物理上拔掉除了主硬盘0之外的其它3块硬盘的SATA线(试过拔掉任意一个硬盘SATA线都可以暂时解决)
2、BIOS里屏蔽掉除了主硬盘0之外的其它3块硬盘(BIOS有屏蔽设备功能,试过屏蔽掉任意一个硬盘都可以暂时解决)

进行上面这两个方法之中任意一个的操作后,GRUB4DOS就可以正常加载VHD系统并引导,再关机插上SATA线或进BIOS取消屏蔽硬盘,再用GRUB4DOS加载VHD到内存启动也是正常的,但就是这个方法只能管个两三天,机器关机、重启次数多了就马上问题又出来了。

所以来求助一下大佬们,可能是啥问题,该怎么解决?是硬件或BIOS坑爹,还是GRUB4DOS未知的bug。。。不清楚GRUB4DOS有没有抓log的方法,传上log给大佬们分析一下,或者出问题前/后能不能输入什么指令来显示出一些有用信息贴上来供分析。。
附上GRUB4DOS启动代码,GRUB4DOS版本是0.4.6a 2019-10-28
debug off
timeout 5
default 0

title Load RAMOS
find --set-root /RAMOS/RAMOS.VHD
map --mem --top /RAMOS/RAMOS.VHD (hd0)
map --hook
root (hd0,0)
chainloader /bootmgr
boot

p.s 硬盘0、1均为MBR格式。硬盘2、3由于是6T的硬盘,是GPT格式。

硬件信息:
        
电脑型号:惠普 HP ProDesk 600 G1 SFF Low Profile Desktop
操作系统:Windows 7 旗舰版 64位 SP1 ( 4.09.00.0904 )
处理器:英特尔 Xeon(至强) E3-1231 v3 @ 3.40GHz 四核
主板:惠普 18E7 ( 英特尔 Haswell - Lynx Point )
内存:32 GB ( 海力士 DDR3L 1600MHz )
主硬盘:西数 WDC WDS500G2B0A ( 500 GB / 固态硬盘 )
显卡:Nvidia Quadro K600 ( 1 GB / Nvidia )
显示器:FGT3200 K32R ( K32R )
声卡:瑞昱 ALC221 @ 英特尔 Lynx Point  高保真音频
网卡:英特尔 Ethernet Connection I217-LM / 惠普

硬盘信息:

硬盘0
产品        西数 WDC WDS500G2B0A (固态硬盘)
容量        500 GB
硬盘已使用        共 24 次,累计 260 小时
固件        X61190WD
接口        SATA III
数据传输率        600 MB/秒
特征        S.M.A.R.T,  APM,  48-bit LBA,  NCQ

硬盘1
产品        日立 HGST HTS721010A9E630
容量        1 TB
形状特征        2.5 寸
转速        7200 转/分
缓存        32 MB
硬盘已使用        共 423 次,累计 1630 小时
固件        JB0OA3W0
接口        SATA III
数据传输率        600.00 MB/秒
内部数据传输率        1284.00 Mb/秒
特征        S.M.A.R.T,  APM,  48-bit LBA,  NCQ

硬盘2
产品        日立 HGST HDN726060ALE614
容量        6001 GB
转速        7200 转/分
硬盘已使用        共 6347 次,累计 7183 小时
固件        APGNW7JH
接口        SATA Rev 2.5
数据传输率        150 MB/秒
特征        S.M.A.R.T,  APM,  48-bit LBA,  NCQ

硬盘3
产品        日立 HGST HDN726060ALE614
容量        6001 GB
转速        7200 转/分
硬盘已使用        共 6432 次,累计 7182 小时
固件        APGNW7JH
接口        SATA Rev 2.5
数据传输率        150 MB/秒
特征        S.M.A.R.T,  APM,  48-bit LBA,  NCQ
        
网卡信息
网卡1 英特尔 Ethernet Connection I217-LM
网卡2 英特尔 82576 Gigabit Dual Port Network Connection




发表于 2020-1-11 15:49:53 | 显示全部楼层
镜像不能大于3.45G
回复

使用道具 举报

 楼主| 发表于 2020-1-11 16:30:43 | 显示全部楼层
kkkssc 发表于 2020-1-11 15:49
镜像不能大于3.45G

这和镜像不能大于3.45G没关系吧,前两年同样的方法,在64G内存机器,我用24G的镜像都可以
回复

使用道具 举报

发表于 2020-1-11 16:36:43 | 显示全部楼层
2013lirunext 发表于 2020-1-11 16:30
这和镜像不能大于3.45G没关系吧,前两年同样的方法,在64G内存机器,我用24G的镜像都可以

map 后面不加--men  就跟大小没关系,加了就是要预加载到内存,好像有的是不支持的~
回复

使用道具 举报

 楼主| 发表于 2020-1-11 16:59:01 | 显示全部楼层
kkkssc 发表于 2020-1-11 16:36
map 后面不加--men  就跟大小没关系,加了就是要预加载到内存,好像有的是不支持的~

我这个就是要把镜像加到内存运行的呀,所以叫RAMOS。和大小没关的,现在的问题是同一个VHD镜像,有时候加载到内存后能正常引导进系统,有时候加载到内存后,就引导失败了
回复

使用道具 举报

发表于 2020-1-11 18:03:10 | 显示全部楼层
本帖最后由 mdyblog 于 2020-1-11 18:43 编辑

title Load RAMOS
   if not exist %@root%/RAMOS/RAMOS.VHD find --set-root /RAMOS/RAMOS.VHD
   map --mem --top /RAMOS/RAMOS.VHD (hd0)
   map --hook
   root (hd0,0)
   map --harddrives=1 && map --hook
   chainloader /bootmgr

最好自己先root到该分区
保证只有一个 /RAMOS/RAMOS.VHD
另外, 要用新的 Grub4dos0.46 (>=2019)


回复

使用道具 举报

 楼主| 发表于 2020-1-11 18:11:06 | 显示全部楼层
本帖最后由 2013lirunext 于 2020-1-11 18:14 编辑
mdyblog 发表于 2020-1-11 18:03
title Load RAMOS
   if not exist %@root%/RAMOS/RAMOS.VHD find --set-root /RAMOS/RAMOS.VHD
   map - ...

谢谢你哈,我用你的代码+最新的grub4dos-0.4.6a-2019-12-30测试几天,如果一周都没再复现问题,估计就解决了
回复

使用道具 举报

发表于 2020-1-11 21:20:59 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-1-11 21:44 编辑

楼主的/RAMOS/RAMOS.VHD是放在MBR的500GB的硬盘0上面的是吧?
我觉得是find --set-root /RAMOS/RAMOS.VHD这一句搜索到GPT分区的6TB的硬盘2 3导致的不稳定,卡死。grub4dos是实模式的启动器,需要依赖于主板BIOS的寻址能力来搜索硬盘,GPT硬盘上面的搜索(超过2TB的)可能会导致卡住,在使用一键RAMOS的过程中,有网友给我反馈过类似的问题,由于是他的电脑,我没法深度探究问题并反映给grub4dos开发者们。超过2TB的硬盘GPT分区在WIN7操作系统下面访问是没问题的,WIN7是保护模式下的操作系统,跟grub4dos实模式下的寻址能力(也就是BIOS的寻址能力)不同。
在grub4dos菜单下按下c键进入命令行,用find,ls命令看下/RAMOS/RAMOS.VHD在grub4dos菜单里面倒底是多少,直接把map --mem --top /RAMOS/RAMOS.VHD (hd0)改成类似下面的:
map --mem --top (hd0,0)/RAMOS/RAMOS.VHD (hd0)
(hd0,0)只是举例,根据实际可能是(hd0,1)  (hd0,2)等等,map --mem的时候也有显示的。


find是遍历搜索,需要访问超过2TB的GPT分区(你有两个6TB的GPT硬盘),不要用find,直接指定root应该就可以了。

点评

今天这问题又出现了,取消用find命令,用map --mem --top (hd0,0)/RAMOS/RAMOS.VHD (hd0)也不管用,虽然可以加载到内存,但是接下来引导就不行了。确认过了VHD所在分区是(hd0,0)。另外我也尝试过了在BIOS把UEFI引  详情 回复 发表于 2020-1-13 19:01
感谢帮助! 楼主的/RAMOS/RAMOS.VHD是放在MBR的500GB的硬盘0上面的是吧?--是的,在硬盘0上,也就是俗称的第一块硬盘 我觉得是find --set-root /RAMOS/RAMOS.VHD这一句搜索到GPT分区的6TB的硬盘2 3导致的不稳定,卡  详情 回复 发表于 2020-1-12 14:15
回复

使用道具 举报

 楼主| 发表于 2020-1-12 14:15:03 | 显示全部楼层
liuzhaoyzz 发表于 2020-1-11 21:20
楼主的/RAMOS/RAMOS.VHD是放在MBR的500GB的硬盘0上面的是吧?
我觉得是find --set-root /RAMOS/RAMOS.VHD ...

感谢帮助!
楼主的/RAMOS/RAMOS.VHD是放在MBR的500GB的硬盘0上面的是吧?--是的,在硬盘0上,也就是俗称的第一块硬盘
我觉得是find --set-root /RAMOS/RAMOS.VHD这一句搜索到GPT分区的6TB的硬盘2 3导致的不稳定,卡死--我的情况是每次VHD都可以成功加载VHD到内存,但是有时候可以进入内存里的Windows,有时候就加载完VHD后就只有个光标一闪一闪了,不能引导内存中的系统。
在文中我给出的grubdos代码,我的理解是先搜索VHD,搜索到后加载,但是你的分析是搜索的时候出问题了,所以不知道VHD成功加载到内存后,之前的find操作搜索到了gpt是否会影响加载VHD到内存后的引导?
我也用你的命令试试哈,太感谢了
回复

使用道具 举报

发表于 2020-1-13 09:18:00 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-1-13 09:19 编辑

规避这类问题,还有个办法,是在BIOS中关闭GPT硬盘的引导功能,具体是在启动→安全启动→启动选项#3 #4这样子的设置里面,选择关闭即可。不影响系统中GPT硬盘的显示和使用。
http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=415147&pid=3819012&fromuid=298214


借用clautton的图:




回复

使用道具 举报

 楼主| 发表于 2020-1-13 18:52:24 | 显示全部楼层
mdyblog 发表于 2020-1-11 18:03
title Load RAMOS
   if not exist %@root%/RAMOS/RAMOS.VHD find --set-root /RAMOS/RAMOS.VHD
   map - ...

今天又频繁出现这问题了,用你给的代码也不管用了
回复

使用道具 举报

发表于 2020-1-13 18:55:34 | 显示全部楼层
2013lirunext 发表于 2020-1-13 18:52
今天又频繁出现这问题了,用你给的代码也不管用了

看看供电有没有问题。
是否主板积灰,清灰下。
回复

使用道具 举报

 楼主| 发表于 2020-1-13 19:01:09 | 显示全部楼层
liuzhaoyzz 发表于 2020-1-11 21:20
楼主的/RAMOS/RAMOS.VHD是放在MBR的500GB的硬盘0上面的是吧?
我觉得是find --set-root /RAMOS/RAMOS.VHD ...

今天这问题又出现了,取消用find命令,用map --mem --top (hd0,0)/RAMOS/RAMOS.VHD (hd0)也不管用,虽然可以加载到内存,但是接下来引导就不行了。确认过了VHD所在分区是(hd0,0)。另外我也尝试过了在BIOS把UEFI引导给关了,也还是不管用

截屏2020-01-13下午6.57.17.jpg
回复

使用道具 举报

 楼主| 发表于 2020-1-13 19:02:42 | 显示全部楼层
2013lirunext 发表于 2020-1-13 18:52
今天又频繁出现这问题了,用你给的代码也不管用了

木有灰,机器在封闭机柜里的,很干净。是VHD镜像可以加载到内存,但是接下来的引导就出问题了,应该和灰尘无关哦?
回复

使用道具 举报

发表于 2020-1-13 22:12:32 来自手机 | 显示全部楼层
2013lirunext 发表于 2020-1-13 19:02
木有灰,机器在封闭机柜里的,很干净。是VHD镜像可以加载到内存,但是接下来的引导就出问题了,应该和灰 ...

  内存条有坏块吧?拔若干个条子试试看,或者用内存检测工具检测下。      

点评

内存应该没有坏块,11月底入手的,当时用微软内存检测工具和论坛里的memtest pro等工具都跑过12个小时以上没问题,平常用着也没蓝屏之类的现象  详情 回复 发表于 2020-1-13 22:33
回复

使用道具 举报

 楼主| 发表于 2020-1-13 22:33:54 | 显示全部楼层
liuzhaoyzz 发表于 2020-1-13 22:12
内存条有坏块吧?拔若干个条子试试看,或者用内存检测工具检测下。

内存应该没有坏块,11月底入手的,当时用微软内存检测工具和论坛里的memtest pro等工具都跑过12个小时以上没问题,平常用着也没蓝屏之类的现象
回复

使用道具 举报

 楼主| 发表于 2020-1-15 16:20:44 | 显示全部楼层
自己顶顶
回复

使用道具 举报

发表于 2020-1-16 13:44:11 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-1-16 13:45 编辑

更换grub4dos的版本试试看看,然后用二分法,查找看看从哪个版本开始不行的,汇报给yaya。
从grub4dos-0.4.6a-2016-12-24开始。
或者试下grub4dos-0.4.5c版本。
感觉从ssd上面仿真启动的时候,更加容易碰到问题。可能与ssd存储有FTL逻辑转换电路有关。
之前我也碰到过NVME ssd上面g4d仿真出现问题的事情,出错提示跟你这个不同,后来用map --mem --top解决了,也是排查了很多版本。

http://wuyou.net/forum.php?mod=v ... 14103&extra=&page=1

点评

谢谢哈,这两天我也想了下有可能是新版本的bug,使用了2014年的老版本测试了发现同样也有问题。准备再用更老的grub4dos-0.4.5c版本试试。另外你提到可能是SSD的原因,我想了下也许可以复制一份VHD到第二个硬盘(机械  详情 回复 发表于 2020-1-17 03:01
回复

使用道具 举报

 楼主| 发表于 2020-1-17 03:01:44 | 显示全部楼层
liuzhaoyzz 发表于 2020-1-16 13:44
更换grub4dos的版本试试看看,然后用二分法,查找看看从哪个版本开始不行的,汇报给yaya。
从grub4dos-0.4 ...

谢谢哈,这两天我也想了下有可能是新版本的bug,使用了2014年的老版本测试了发现同样也有问题。准备再用更老的grub4dos-0.4.5c版本试试。另外你提到可能是SSD的原因,我想了下也许可以复制一份VHD到第二个硬盘(机械硬盘),然后root命令指定VHD所在磁盘路径,载入到内存引导试试,如果出现问题时,用机械硬盘可以避免这个问题,说明和SSD有关,如果问题照旧可能和SSD关系不大。

题外话,我隐隐有种感觉是BIOS太坑的bug,因为这货提供给操作系统的磁盘序号,经常是乱的。(磁盘管理器看到的)
回复

使用道具 举报

发表于 2020-1-18 22:46:04 | 显示全部楼层
2013lirunext 发表于 2020-1-17 03:01
谢谢哈,这两天我也想了下有可能是新版本的bug,使用了2014年的老版本测试了发现同样也有问题。准备再用 ...

VHD里面是什么系统?
回复

使用道具 举报

 楼主| 发表于 2020-1-18 22:55:22 | 显示全部楼层
mdyblog 发表于 2020-1-18 22:46
VHD里面是什么系统?

win7 sp1 x64原版
回复

使用道具 举报

发表于 2020-1-31 14:50:42 | 显示全部楼层
在我的一台老机器上也是这样,加载途中会中断,我也不知道为什么。我是放在U盘上加载的,放在硬盘上则没有这种现象。我感觉可能是加载时间过久就会这样。
回复

使用道具 举报

 楼主| 发表于 2020-4-10 12:15:02 | 显示全部楼层
frankqiuwm 发表于 2020-1-31 14:50
在我的一台老机器上也是这样,加载途中会中断,我也不知道为什么。我是放在U盘上加载的,放在硬盘上则没有 ...

貌似和你情况不一样,我的是每次都加载文件到内存完成了,引导的时候有概率出错。我曾经在另外一台64G内存的笔记本,加载24G的镜像到内存并引导,每次都可以成功,所以感觉和加载时间过久也没有关系
回复

使用道具 举报

发表于 2020-4-10 14:28:08 | 显示全部楼层
楼主的问题难道就成为无解之谜了吗?还没有找到原因吗?

点评

还没有找到原因哈,这是个台式机,疫情原因刚从老家回去,所以很久也没用了,更别说进一步测试和找原因了。在楼下看到不点大师有回复,我准备按他说的进一步测试一下。感谢版主的帮助和关注!  详情 回复 发表于 2020-4-12 12:54
回复

使用道具 举报

发表于 2020-4-11 20:10:14 来自手机 | 显示全部楼层
只有楼主自己有条件测试,别人无法代替。

楼主已经很辛苦了,但还需要更加辛苦才行。

楼上各位提到的解决办法,楼主似乎并未全部尝试。比如说,ssd 不可靠,换成机械硬盘进行测试,这一点,楼主就没有给出测试结果。

拔掉 ssd 硬盘,用机械硬盘进行测试,楼主应该做这个测试,以便缩小范围。

grub4dos 屏幕顶行显示的常规内存量是多大?如果远远低于 640K,那也是一个可疑之处。

还可以试试在 map --hook 之前添加一行 map --e820cycles=0 或 1 或 2 或 3 ……一直到 20,看看是否有用。

看到 ssd,我感觉这是最大的可疑之处。ssd 导致的问题太多了。


回复

使用道具 举报

 楼主| 发表于 2020-4-12 12:54:11 | 显示全部楼层
liuzhaoyzz 发表于 2020-4-10 14:28
楼主的问题难道就成为无解之谜了吗?还没有找到原因吗?

还没有找到原因哈,这是个台式机,疫情原因刚从老家回去,所以很久也没用了,更别说进一步测试和找原因了。在楼下看到不点大师有回复,我准备按他说的进一步测试一下。感谢版主的帮助和关注!
回复

使用道具 举报

 楼主| 发表于 2020-4-12 13:11:05 | 显示全部楼层
不点 发表于 2020-4-11 20:10
只有楼主自己有条件测试,别人无法代替。

楼主已经很辛苦了,但还需要更加辛苦才行。

感谢不点大师回复
1、“拔掉 ssd 硬盘,用机械硬盘进行测试”——这个接下来我测试一下
2、“grub4dos 屏幕顶行显示的常规内存量是多大?”——我看了一下是这样的Mem:631K/3237M/29152M
3、“还可以试试在 map --hook 之前添加一行 map --e820cycles=0 或 ...”——我在menu里做21个title,写上这些,等出现故障后一个一个测试。
等测试完后再告知大家
回复

使用道具 举报

发表于 2020-4-12 16:20:38 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-15 11:03 编辑
不点 发表于 2020-4-11 20:10
只有楼主自己有条件测试,别人无法代替。

楼主已经很辛苦了,但还需要更加辛苦才行。
可以试试在 map --hook 之前添加一行 map --e820cycles=0 或 1 或 2 或 3 ……一直到 20,看看是否有用。

感觉map --e820cycles参数对于NT5.x内核对于消除因为Intel optimus、或者AMD Hybrid CrossFireX混合交火,这一类的双显卡切换技术显卡导致的F4蓝屏还有用,对于NT6.x以上的PE或系统,原生支持双显卡切换技术,作用不大。而楼主的正是WIN7X64,也没有出现启动蓝屏的情况,所以这个参数没什么作用。

只是根据经验,纯粹做技术讨论。为了找出根本原因,做个测试也是可以的。


我直觉SSD的可能性更大,ssd与机械硬盘不同之处是存在FTL逻辑转换电路,可能导致实模式下寻址的一些问题,根据几个网友碰到的ssd上面用grub4dos的map --mem出现问题,纯属瞎猜的。

对了,楼主也可以尝试下用memdisk启动vhd。上传个syslinux6.03里面的memdisk,只有25KB。

title RAMOS-memdisk
kernel (hd0,0)/RAMOS/memdisk  raw img
initrd (hd0,0)/RAMOS/RAMOS.VHD

memdisk.rar

12.88 KB, 下载次数: 5, 下载积分: 无忧币 -2

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 07:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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