无忧启动论坛

标题: GRLDR,偶然发现的问题 [打印本页]

作者: captain_g    时间: 2014-8-20 10:12
标题: GRLDR,偶然发现的问题
2G的U盘,用FBT1.607.2014.0811强格、制成启动盘,UD扩展分区250M,剩余空间为可见分区(FAT32)。
仅仅加入一个GRLDR文件(0.46a 2014-08-17),没有菜单。所用的都是缺省设置,数据结构自检没错。
用其启动一上网本(单硬盘4个NTFS分区,1主3逻辑)。
启动后在 grub>后输入find命令发现:
grub> find
(hd0)
(ud)
(hd0,0)
(hd0,1)
(hd0,2)
(hd0,3)
(hd1,0)
(hd1,2)
(hd1,3)
(hd1,4)
(hd1,5)
(hd1,6)
grub> _

用 ls 查看发现(hd0)、(ud)、(hd0,0)的内容实际上是一样的,且有提示:Error 1: File name must be either an absoulte pathname or blocklist
用 ls 查看发现(hd0,1)、(hd0,2)、(hd0,3)提示:Error 22: No such partition

再用 ls 查看发现(hd1,0)、(hd1,4)、(hd1,5)、(hd1,6)与(ud)的内容实际上是一样的,且有提示:Error 1: File name must be either an absoulte pathname or blocklist
再用 ls 查看发现(hd1,2)、(hd1,3)提示:Error 22: No such partition

用 geometry (hd0)、geometry (ud)、(hd0,0)、geometry (hd0,3)查看,内容实际上是一样的:
drive 0x80(LBA):C/H/S=246/255/63,Sector Count/Size=3951990/512
Partition num: 0, active, Filesystem type is fat32, partition type 0x0B

用 geometry (hd1,0)、geometry (hd1,2)、geometry (hd1,3)、geometry (hd1,6)查看,内容实际上是一样的:
drive 0x81(LBA):C/H/S=19457/255/63,Sector Count/Size=312576705/512
Partition num: 0, Filesystem type is ntfs, partition type 0x07
Partition num: 4, Filesystem type is ntfs, partition type 0x07
Partition num: 5, Filesystem type is ntfs, partition type 0x07
Partition num: 6, Filesystem type is ntfs, partition type 0x07

换用(0.45c 2014-08-17)的GRLDR文件:
启动后在 grub>后输入find命令发现:
grub> find
(ud)
(hd0,0)
(hd1,0)
(hd1,4)
(hd1,5)
(hd1,6)
grub> _
使用 ls (ud)、ls (hd1,0)后很长时间内只见光标闪动,可以按Ctrl+Alt+Del重启。
如果是进菜单后按"c"键到 grub>,发现光标根本不闪动。

(grldr从chenall.net下载)
作者: 不点    时间: 2014-8-20 12:04
你是否明白 0.4.5 与 0.4.6 两个系列版本的差异?如果你比较清楚,你自己先猜测一下吧,猜测其结果差别的原因在哪里。具体的操作过程,你自己比较清楚,别人只能看你的描述,而对于有些细节你不一定能够给出描述。




作者: captain_g    时间: 2014-8-20 15:23
很不好意思,我只是一个普通的使用者。就上面发现的情形(也许不能称为“问题”),我的困惑是:

0.46a

一、既然ls后会提示说Error 22: No such partition,为什么还要在find的结果中列出来呢?开发者可能有自己的考虑吧,不揣测了。

二、为什么直接对find出来的某些(hd1,x)进行ls后得到的是与(ud)的内容一样的东西呢?试了一下,先root某某后再ls才可以出正常结果。

0.45c

三、为什么直接对find出来的(ud)(hd0)(hd0,0)(hd1,0)等进行ls后会常时间没反应?试了一下,先root某某后再ls才会有反应且可以出正常结果。

四、刚刚下载了2014-0812的帮助文档,说,用法: ls [DEV] [FILE_OR_DIR] 描述:list file or directory 列表文件或目录。文档还举例道,ls  列出当前设备根目录下的文件和目录。在0.45c中试了,单用 ls 正常,可为什么用 ls (ud) 就没反应了呢?(ud)不是当前设备?没记住?为什么单用 ls 给出的内容却与 (ud) 中的内容一样?

开发者或深研者使用 ls 肯定不会“偏离”设定的使用“条件”,对他们来说是“理所当然”的,但总不应假定一般的使用者会完全按照这设定的“条件”进行操作。

建议:在0.46a中不应显示当前设备的内容作为替代,而应给出操作提示;在0.45c中,不应出现长时间无反应的“假死”现象,同样应给出操作提示。

也许我的情况是孤立的,请勿见笑、责备。作为一个普通的、浅尝辄止的使用者,我知道自己很“孤陋”,之所以贴出来,是因为喜爱G4D。

中餐是美味的,但不应是后厨不干净的结果。
作者: jianliulin    时间: 2014-8-20 16:16
0.46a 在查找分区上有bug,前几天已经反馈了,估计yaya在处理中。
作者: captain_g    时间: 2014-8-20 16:36
多谢!
作者: 不点    时间: 2014-8-20 18:11
@captain_g

您在一楼的报告,没有毛病。我没有责怪您的意思。请不要误会。我真正的意思是说,这问题难以定位,最好是您能够先猜测一下,确定大致的原因。而接下来您在下一个帖子里面确实给出了更详细的描述。非常好。

我会找时间仔细看您的帖子,然后给出自己的答复。
作者: 不点    时间: 2014-8-21 00:11
以下就依我的认识能力以及理解能力,谈谈对若干问题的看法。

一、既然ls后会提示说Error 22: No such partition,为什么还要在find的结果中列出来呢?开发者可能有自己的考虑吧,不揣测了。


确实是不该列出,我认为属于 bug 的范畴,应该得到解决。但究竟能不能得到解决,以及何时得到解决,那是不确定的。这依赖于有多少人报告 bug,也依赖于有多少人参与开发以及参与排错。【下同,不再重复这些话。】

二、为什么直接对find出来的某些(hd1,x)进行ls后得到的是与(ud)的内容一样的东西呢?试了一下,先root某某后再ls才可以出正常结果。


同样,这也属于 bug,应该得到解决【同上】。


三、为什么直接对find出来的(ud)(hd0)(hd0,0)(hd1,0)等进行ls后会常时间没反应?试了一下,先root某某后再ls才会有反应且可以出正常结果。


同样,这也属于 bug,应该得到解决【同上】。

四、刚刚下载了2014-0812的帮助文档,说,用法: ls [DEV] [FILE_OR_DIR] 描述:list file or directory 列表文件或目录。文档还举例道,ls  列出当前设备根目录下的文件和目录。在0.45c中试了,单用 ls 正常,可为什么用 ls (ud) 就没反应了呢?(ud)不是当前设备?没记住?为什么单用 ls 给出的内容却与 (ud) 中的内容一样?

开发者或深研者使用 ls 肯定不会“偏离”设定的使用“条件”,对他们来说是“理所当然”的,但总不应假定一般的使用者会完全按照这设定的“条件”进行操作。


你提到的或许属于 bug,正如前面的问题那样。也或许是你自己理解有误。通常一个命令的默认参数是当前设备,这很自然,并不偏离什么。如果偏离了常规,那通常是 bug,应该得到解决【同上】。


建议:在0.46a中不应显示当前设备的内容作为替代,而应给出操作提示;在0.45c中,不应出现长时间无反应的“假死”现象,同样应给出操作提示。


你说的这些都属于 bug,我所认为的处理方法同上。

也许我的情况是孤立的,请勿见笑、责备。作为一个普通的、浅尝辄止的使用者,我知道自己很“孤陋”,之所以贴出来,是因为喜爱G4D。


不管怎么样,开源软件是靠很多人共同开发测试。有毛病不奇怪。如果某个毛病很容易被碰上,那它被解决的概率也很大。反之,如果不容易被碰上,则能够解决它的概率就不太大。



作者: captain_g    时间: 2014-8-21 08:44
谢谢不点。

只有发现并周知问题才有可能解决问题。
作者: qingqing123    时间: 2014-8-23 19:08
学习了
作者: 2011yaya2007777    时间: 2014-9-1 16:32
这里反映的问题,与2014-08-04 4.6a 读取分区不准确是同一问题。
其原因是由于支持分区 ID=00 引起的。
有些软件将分区 ID=00 判定为无效分区项。不知是什么文件系统使用 ID=00,如此特殊。它有多大受众,支持它是否必要?
如果非必要,撤销补丁。如果必要,是否可将3处
if (/* type != PC_SLICE_TYPE_NONE        && */
         ! IS_PC_SLICE_TYPE_BSD (type)
        && ! IS_PC_SLICE_TYPE_EXTENDED (type))       

修正为
if (!(type == PC_SLICE_TYPE_NONE && len == 0)
        && ! IS_PC_SLICE_TYPE_BSD (type)
        && ! IS_PC_SLICE_TYPE_EXTENDED (type))       
作者: 不点    时间: 2014-9-1 18:03
Windows 和 Linux 用户,都有使用 00 分区类型的情况,讨论是在英文论坛上。

早在一两年前就已经支持 ID=00 了,只是不完全支持,所以这次就彻底支持了。

0.4.5 没问题,问题出在 0.4.6,这我不熟悉,yaya 你看该怎么解决就怎么解决。

建议在 BIOS 环境以及 MBR、GPT 模式的分区处理上,0.4.6 要保持与 0.4.5 的完全一致,就连代码都要完全一致,不要弄出不同的东西出来,造成不兼容,或者 bug。

如果一致了,就不会有问题出现。即使有问题,也能统一解决,而不是针对 0.4.6 采取特殊的解决方法。

0.4.5 正常,就表示 0.4.6 是不同的。而在这些方面是不该有差别的。

所以,我认为 yaya 应该检查代码,找出不兼容的根源,修复这种不兼容现象。


作者: 2011yaya2007777    时间: 2014-9-1 20:29
明白了,0.4.5c 在查找函数里有
  1. if ((start == 0) || (len == 0))
  2.     continue;
复制代码

预先对分区空项做了判断
作者: 2011yaya2007777    时间: 2014-9-2 10:30
已经更新于支持含有碎片的文件仿真




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