无忧启动论坛

标题: 【讨论】grub4dos 应该避免访问第二软盘 (fd1) [打印本页]

作者: 不点    时间: 2014-10-31 16:10
标题: 【讨论】grub4dos 应该避免访问第二软盘 (fd1)
最近在一台机器上操作,在最新版 grub4dos 环境下执行 root ( 此处按Tab,自动补全发生假死。

一开始我以为死机了,但等了几分钟,列出了 fd0,fd1 和硬盘等设备。导致假死的是 fd1 设备。fd0 是启动设备,不会导致死机。

因此,grub4dos 的内部操作,例如自动补全以及 find 命令,都应该最多只访问一个软盘设备,即 (fd0),而不要去试图访问其他软盘设备。

希望开发者、维护者们留意此话题。


作者: 2013gdh    时间: 2014-10-31 17:50
您是说找到1个软盘就不再找后边的软盘了? 用文件map的是不是要特别对待(继续找)?
作者: 不点    时间: 2014-10-31 19:09
一直是只处理 bios 数据区规定数目的软盘,最多只有两个,通常是 0 个或 1 个。

所以,修改后的处理方式,不影响正常使用。

对于其他极端的非正常使用,影响也不大。具体的影响情况如下:有人建立多个虚拟的 bios 软盘,让软盘总数超过 1 个,并希望 find 命令查找 fd1,fd2,fd3。

其实,我们早就建议 find 不用查找软盘。所以,find 命令不用修正,保持现在的状态便可。

但内部的自动补全则需要修正,不然的话,补全时假死,给用户带来极其恶劣的使用感受。用户可能以为是真死机了,重新启动,浪费了用户键盘输入,也浪费了时间。

因此,自动补全可以只考虑 fd0,忽略其他软盘。这不会带来程序设计方面的问题,只是影响命令行的处理方式。



作者: 不点    时间: 2014-11-3 08:15
关于这个问题,我又思考了两天,觉得逐步清晰了。

死机不只是发生在 (fd1),有时候 (fd0) 也会发生死机。那么,怎么样有个比较好的策略呢?

我想到了这样一个方案:

如果启动设备不是 (fd0),就直接从 BIOS 数据区的 0x410 处屏蔽掉软驱。这样,find 命令和自动补全就都不会有问题了。

如果启动设备是 (fd0),就直接从 BIOS 数据区的 0x410 处屏蔽掉 (fd1) 以上的软驱,只保留 (fd0)。这样,find 命令和自动补全也都不会有问题了。

map 命令新建虚拟软驱时,BIOS 数据区的软盘数目会增加,不过,那都是安全的,因为虚拟的软驱是不会导致死机的。这就是说,经由 map 创建的虚拟软驱不受影响。

这样,我们既解决了主板软驱所引发的死机问题,又不影响原来的虚拟软驱的使用者,可谓皆大欢喜。



作者: chenall    时间: 2014-11-3 10:10
还有一点也要考虑,比如我用GRLDR虚拟了一个(fd0)然后再次启动了另一个grldr但不是从(fd0)启动的..

作者: 不点    时间: 2014-11-3 10:43
chenall 发表于 2014-11-3 10:10
还有一点也要考虑,比如我用GRLDR虚拟了一个(fd0)然后再次启动了另一个grldr但不是从(fd0)启动的..

是的,屏蔽 BIOS 软盘之前,先要看看有没有虚拟软盘存在,不要把虚拟软盘也屏蔽掉了。


作者: 不点    时间: 2014-11-3 16:51
chenall 发表于 2014-11-3 10:10
还有一点也要考虑,比如我用GRLDR虚拟了一个(fd0)然后再次启动了另一个grldr但不是从(fd0)启动的..

修理好了,试试看,应该没问题了。

grub4dos-0.4.5c-2014-11-03.7z

257.82 KB, 下载次数: 13, 下载积分: 无忧币 -2

如果正常,可以提交。


作者: chenall    时间: 2014-11-3 17:28
简单测试了一下,没有发现问题,更新了.
作者: zhaohj    时间: 2014-11-4 08:01
4#的方案比较合理!




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