无忧启动论坛

标题: [转自时空不点] 请各位提供实际使用中遇到的 CHS 值,作为进一步开发的依据 [打印本页]

作者: sratlf    时间: 2012-5-21 21:41
标题: [转自时空不点] 请各位提供实际使用中遇到的 CHS 值,作为进一步开发的依据
原帖地址:http://bbs.znpc.net/viewthread.php?tid=6223

CHS 值能否正确获得,直接影响启动能否成功。但是,困难恰恰就在于此,实际上并不容易获得正确的 CHS 值。

fbinst 能够获得正确的 CHS 值,但要动用 8M 的数据空间,这带来了若干弊端(此处不再详述)。

因此考虑改进 CHS 的探测方法,希望动用尽可能少的数据空间而达到目的。

分两步走:

第一步,统计现有的 CHS 值的变化,作为第一手资料。
第二步,根据 CHS 的变化情况,设计探测程序,完成任务。

现在是第一步,统计 CHS 的变化。

如何统计 CHS 数据?

只需要统计 USB 设备、TF/CF 卡之类的设备在 grub4dos 之下的 CHS 值。当设备支持 LBA 时,无需统计其 CHS 值。内置机械硬盘不需要统计,因为机械硬盘(实际上)都支持 LBA。

不要在虚拟机下统计,而要在真实机器上进入 grub4dos 环境,然后运行 geometry 命令来统计。无论您是如何进入 grub4dos,都是可以的。比如,您是用 GRLDR 进入的,或者是经由 grub.exe 进入的,或者是以 PXE 方式进入的,或者是经由光盘、USB-CDROM 进入的,或者是经由别的软件(syslinux、grub2,fbinst 等)周转之后进入的(此时 grub4dos 不是 “ 第一 ” 启动,而是 “ 第二 ” 启动),这些情况,都是可以的。

统计时,首先确定哪个盘是您的 USB(TF卡、CF卡)设备,通常它应该是 (fd0) 或 (hd0),有时候它是 (hd1)。极少数情况下,也可能是别的,比如 (fd1),(hd2) 之类的。

因此,通常运行
  1. map    --unmap=0:255
  2. map    --rehook
  3. geometry    (fd0)
  4. geometry    (fd1)
  5. geometry    (hd0)
  6. geometry    (hd1)
  7. geometry    (hd2)
复制代码
就够了。其中,前两条命令是撤销所有的 map,目的是避免盘号混乱。那些有 LBA 字样的,即表示该主板的 BIOS 可以用 LBA 模式访问该磁盘。正如前面解释的,您可以忽略它。只需要统计不带 LBA 字样的那些盘号以及相应的 CHS 值。这样就排除了内置机械硬盘的情况了,因为已经把 LBA 的情况排除在外了。

实际上只有 H 和 S 是重要的,C 值没有太大的意义。

您可以把整个 geometry 命令的输出结果抄录在这里,也可以只抄录 H 和 S 的值。但最好把 C 值也带上,它或许也有参考价值。其他的,比如容量以及分区的情况,也可以提供,如果方便的话。

如果您不怕麻烦,您可以把 LBA 的情况也抄录在此,即,把 geometry 命令所显示的全部结果都抄录下来。

如果您发现您将要报告的数据已经有人报告过了,您既可以简单指明  “ 与 XXX 的报告相同” ,也可以重复贴出您的报告,当然也可以省略。

抄录数据的多少,都无所谓,全凭您的爱好和感觉,全凭您的自愿。

只需了解:本次统计的重点是 H 和 S 的值。并且是在 grub4dos 之下的结果,而不是 Windows 或者 Linux 之下的结果。是真实机的情况,而不是虚拟机的情况(即,不需要 QEMU、VMware、VirtualBox、VirtualPC 等等这类虚拟机之下的结果)。



附 rockrock99 的测试结果,以供参考
http://bbs.znpc.net/viewthread.php?tid=6223&page=1#pid50026
联想945GZT-LM主板(fd0)(CHS模式)
朗科U208/8G:C/H/S=973/255/63
SSK/16G:C/H/S=131/255/63

华硕N45SF(hd0)(LBA模式)
朗科U208/8G:C/H/S=973/255/63
SSK/16G:C/H/S=1948/255/63

戴尔N4030(hd0)(LBA模式)
朗科U208/8G:C/H/S=973/255/63
SSK/16G:C/H/S=1948/255/63

备注:同时测试了PXE启动,联想主板直接辨认不到U盘(geometry (fd0)死机),其它两个平台返回结果一致

作者: Plantsoot    时间: 2012-5-21 22:11
看来不点真要制作一个新的方案,取代fbinst了。或者说改良。
作者: 不点    时间: 2012-5-22 08:38
标题: 回复 #2 Plantsoot 的帖子
谢谢 sratlf,谢谢百草霜。

今天看到有人报告某些笔记本的 VBE 不支持 16 位色深,导致无法进入 grub4dos 的 VBE 图形模式。

说实在话,这也是十分遗憾的一件事。但是,我觉得这个问题不是特别严重。与谁相比不严重?与 “ 启动死机 ” 相比不严重。

fbinst 仍有启动死机的情况,并且不是少数,而是有一定的比例。尽管目前所暴露的都是旧机器,但这也足以引起我的重视。为什么?因为 “ 启动死机 ” 是严重问题。如果这个问题 “ 可以忽略 ”,那就没有什么问题是 “ 不可以忽略 ” 的了。就算我身体差最终可能完成不了,我相信,bean,chenall,roy,yaya,zw2312914 以及其他关心这方面技术的人,也会继续努力的。
作者: Plantsoot    时间: 2012-5-22 09:01
标题: 回复 #3 不点 的帖子
技术方面我对底层理解的还不够,我就帮忙测试吧。

最近我被生活所累,太忙,有空的时候我利用手上的一大把U盘和一大批机器进行一次测试。
作者: rockrock99    时间: 2012-5-22 12:57
标题: 回复 #3 不点 的帖子
严重同意不点的观点,启动死机是最严重问题了,假如死机了就没办法继续下去了
作者: reak    时间: 2012-5-23 18:14
宏基4750G(hd0)
(LBA)c/h/s=60802/255/63
(hd1)某金士顿DT2 4G优盘
c/h/s=488/255/63
作者: 翅膀    时间: 2012-5-24 16:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: 翅膀    时间: 2012-5-24 17:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: 不点    时间: 2012-5-24 19:45
对于 grub4dos 来说,C 值无用。相当于说,总扇区数无用。

不要看重 C 值以及总扇区数的值。它们仅仅只有参考的意义。

geometry 显示的 C 值和 总扇区数,也都不必是正确的。
作者: rockrock99    时间: 2012-5-24 22:02
原帖由 <i>不点</i> 于 2012-5-24 19:45 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2448834&ptid=210596" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />
对于 grub4dos 来说,C 值无用。相当于说,总扇区数无用。<br />
<br />
不要看重 C 值以及总扇区数的值。它们仅仅只有参考的意义。<br />
<br />
geometry 显示的 C 值和 总扇区数,也都不必是正确的。
<br />
是否应该提醒一下大家,LBA模式的就不用提报告了?
作者: sratlf    时间: 2012-5-29 13:43
Lenovo ThinkCenter 6155t test report

UFD1: it1167 32G usb-hdd

    fd0:

        notice: umber of heads for drive 0 tund from 255 to 7.
        driver 0x00(CHS): C/H/S=3448/7/63, Sector Count/Size=55377407/512
   
    then down, manually shut down.

    fd1: the same situation to fd0
   
    hd0: drive 0x80(LBA): C/H/S=1004/255/63 Sector Count/Size=16129260/512

    hd1: drive 0x81(LBA): C/H/S=60802/255/63 Sector Count/Size=976784130/512

UFD2: is902 16G usb-cdrom

    fd0: drive 0x00(CHS): C/H/S=1/1/18 Sector Count/Size=18/512

    fd1: not exist

    hd0: drive 0x80(LBA): C/H/S=60802/255/63 Sector Count/Size=976784130/512

    hd1: drive 0x81(LBA): C/H/S=1023/255/63 Sector Count/Size=16434495/512

UFD3: cbm2096 8G usb-hdd

    fd0: drive 0x00(CHS): C/H/S=1/1/18 Sector Count/Size=18/512

    fd1: not exist

    hd0: drive 0x80(LBA): C/H/S=207/255/63 Sector Count/Size=3325455/512

    hd1: drive 0x81(LBA): C/H/S=60802/255/63 Sector Count/Size=976784130/512

    hd2: drive 0x82(LBA): C/H/S=819/255/63 Sector Count/Size=13157235/512

UFD4: sm3252 16G usb-cdrom,

    fd0: drive 0x00(CHS): C/H/S=1/1/18 Sector Count/Size=18/512

    fd1: not exist

    hd0: drive 0x80(LBA): C/H/S=60802/255/63 Sector Count/Size=976784130/512

    hd1: drive 0x81(LBA): C/H/S=1559/255/63 Sector Count/Size=25045335/512
作者: 不点    时间: 2012-5-29 19:03
fd0:
        notice: umber of heads for drive 0 tund from 255 to 7.
        driver 0x00(CHS): C/H/S=3448/7/63, Sector Count/Size=55377407/512

这个软盘很重要。BIOS 提供的 H 值 255 是错的,然后,grub4dos 把它纠正为 7。

但 7 也是很变态的一个数值。不太可能有这样的参数。

这个软盘大有文章可做。你留下它,今后必有大用。你能确定这个软盘是真的存在吗?即,它代表 u 盘的某个分区吗?

怀疑根本没有这个软盘,而是用来破坏 grub4dos 运行的。你也说,它导致了死机。


fd0: drive 0x00(CHS): C/H/S=1/1/18 Sector Count/Size=18/512

这个盘也很重要。它竟然只有 18 个扇区!而且 H 只有 1!好像也是用来破坏 grub4dos 或者破坏某个别的开源软件的。

既然这次它没死机,你可以试着用

  1. cat    --hex    (fd0)+18
复制代码


看看能否显示出扇区数据。
作者: sratlf    时间: 2012-5-29 19:42
标题: 回复 #12 不点 的帖子
这类机器还有很多  公司台式机都是联想think center 6155系列的

软盘实际上不存在  没有软驱  也不是u盘的某个分区  我的u盘都是量产的usb-cdrom或者fixed类型的usb-hdd  没有usb-zip

cat --hex (fd0)+18

明天贴下结果  已经下班到家了
作者: 不点    时间: 2012-5-29 20:00
好的,那已经明白了。那软盘正是用来破坏开源软件运行的。

这就是一个例证,启动时避免自动搜索或访问软盘。因为自动访问软盘,就有可能掉进陷阱。

只能在命令行状态下,由用户自己手动访问软盘才安全。此时死机也不怕,因为是在命令行,用户只要按机器上的 Reset 按钮重启就行了。

自动的程序永远不要去碰 (fdX) 这样的软盘。
作者: sratlf    时间: 2012-5-29 20:02
Lenovo ThinkPad T510 test report

UFD1: it1167 32G usb-hdd

     fd0: driver 0x00(CHS): C/H/S=1/1/1, Sector Count/Size=1/512

     fd1: the same to fd0
     
     hd0: drive 0x80(LBA): C/H/S=1004/255/63 Sector Count/Size=16129260/512

     hd1: drive 0x81(LBA): C/H/S=20673/240/63 Sector Count/Size=312575760/512

UFD2: is902 16G usb-cdrom

     could not boot from usb-cdrom

UFD3: cbm2096 8G usb-hdd

     fd0: driver 0x00(CHS): C/H/S=1/1/1, Sector Count/Size=1/512

     fd1: the same to fd0

     hd0: drive 0x80(LBA): C/H/S=207/255/63 Sector Count/Size=3325455/512

     hd1: drive 0x81(LBA): C/H/S=20673/240/63 Sector Count/Size=312575760/512

UFD4: sm3252 16G usb-cdrom

     fd0: driver 0x00(CHS): C/H/S=1/1/1, Sector Count/Size=1/512

     fd1: the same to fd0

     hd0: drive 0x80(LBA): C/H/S=20673/240/63 Sector Count/Size=312575760/512
作者: sratlf    时间: 2012-5-29 20:05
标题: 回复 #14 不点 的帖子
已经在避免了  默认只在chpu四个设备上查找  忽略软驱
作者: 不点    时间: 2012-5-29 20:32
C/H/S=1/1/1

好狠毒啊!连 S 也竟然敢是 1,比历史上最小的 S=8 还要小!这样一来,grub4dos 内置的磁盘几何参数自适应代码肯定失败。
作者: 翅膀    时间: 2012-5-30 09:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: sratlf    时间: 2012-5-30 12:05
标题: 回复 #12 不点 的帖子
今天试了下  执行 cat --hex (fd0)+18  会直接报 error25: disk read error
作者: sgw888    时间: 2012-5-30 16:54
测试了三个U盘,在同一个机器上面进行测试,结果所有的都支持LBA
U盘被识别为 hd2

drive 0x82(LBA): c/h/s=429/255/63 sector count/size=6902784/512

986/255/63   15840090/512
64/255/63  1028160/512
作者: 不点    时间: 2012-5-30 17:24
标题: 回复 #20 sgw888 的帖子
谢谢。

补充说明,提醒各位注意:如果 U 盘被识别为 hd2,那么你不是从 U 盘启动的。

当你是从 U 盘启动时,U 盘通常只能识别为 fd0 或 hd0,不会是别的。

因为大家通常都是用 U 盘来维修电脑,所以,U 启的情况更重要一些。
作者: 不点    时间: 2012-5-30 17:29
原帖由 sratlf 于 2012-5-30 12:05 发表
今天试了下  执行 cat --hex (fd0)+18  会直接报 error25: disk read error


去读时失败。读不出来。说明这软盘实际上也就相当于根本不存在。

幸好还没死机。我们不怕 disk read error,怕就怕死机。只要不死机,则出现任何消息都是好消息。
作者: rockrock99    时间: 2012-5-30 22:08
标题: 回复 #22 不点 的帖子
看了楼上几个帖子,列举的变态数值是否量产导致的?估计不是BIOS的错
作者: 翅膀    时间: 2012-5-30 23:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: sgw888    时间: 2012-5-31 09:05
回复 #20 sgw888 的帖子

谢谢。

补充说明,提醒各位注意:如果 U 盘被识别为 hd2,那么你不是从 U 盘启动的。

当你是从 U 盘启动时,U 盘通常只能识别为 fd0 或 hd0,不会是别的。

因为大家通常都是用 U 盘来维修电脑,所以,U 启的情况更重要一些。


pxe 启动的. 我会继续测试U启的情况是否有变化.
作者: 不点    时间: 2012-5-31 09:19
标题: 回复 #25 sgw888 的帖子
PXE 启动,尚能识别 U 盘,并支持 LBA。这样的电脑 BIOS 确实值得称赞。

这就有一个好处了:万一 PXE 启动有缺陷,还可以在 PXE 启动后临时转到 U 盘上,启动 U 盘的 PE。

记得 zhaohj 的一台机器在 PXE 启动后,居然本地硬盘都无法访问了!

顺便说,PXE 启动时,一个很普遍的问题是,PXE 自身的代码占用了大量的常规内存空间。

最近的一两个新版的 grub4dos 在屏幕顶行能够显示常规内存的占用情况。你能够看到 PXE 启动后常规内存量减少的情况。

因此,如果有兴趣,你也可以顺便报告一下 PXE 启动后看到的常规内存量。这样就可以确切地知道,你的这个 BIOS 究竟有没有更出色的表现。

你也可以说说它的品牌、型号、价格、购买日期等信息,供别人参考。
作者: sgw888    时间: 2012-5-31 10:12
pxe 启动 显示如下:  (备注: 加载了中文字库)
0.4.5 c 2012-3-22 Mem: 638k/766M/0M,End 355e2f

另外,直接从U盘启动GRLDR测试了,好像没有差别,只测试了两个U盘.
0x80(LBA): 64/255/63  1028160/512
429/255/63 6902784/512

但有个非常奇怪的现象: 测试第二个U盘的时候,启动过程中,我按C进入命令行以后一切正常,但是如果不按C,让G4D自动寻找菜单之后结束(我没有放菜单MENU.LST),我再输入HELP等命令的时候,提示无效命令,并且后面紧接着显示一大堆的字符,过会,我放上菜单试一下,有可能是硬盘上的MENU.LST的缘故,暂时不能确定.
作者: sgw888    时间: 2012-5-31 10:19
再次测试,确认不是菜单的问题.
放上menu.lst 之后,可以找到菜单,我只写了一个菜单
title command
commandline
进入命令行之后,输入 help 出错,提示无效命令,后面是满屏的 h字符. 别的命令也无效.
作者: 不点    时间: 2012-5-31 10:22
标题: 回复 #27 sgw888 的帖子
你的 grub4dos 版本太旧,无法显示真正的 PXE 常规内存占用。请用 5 月 22 日的(或者以后的)。

应该比 638K 低很多,估计 PXE 要占用 100K 左右。PXE 占用之后,用户可以自由使用的常规内存就只有 538K 左右了。

通常,同一个主板识别同一个 U 盘,应该都是采用一样的几何参数、一样的模式(LBA 模式或者 CHS 模式)。
作者: 不点    时间: 2012-5-31 10:23
标题: 回复 #28 sgw888 的帖子
这搞不懂。你自己先研究吧。
作者: sratlf    时间: 2012-5-31 10:37
标题: 回复 #28 sgw888 的帖子
这个是个已知的bug  后来版本已经修复了  你换用新版应该就没有问题了
作者: sgw888    时间: 2012-5-31 10:59
0.4.5.c 2012-5-22   538k/766M/0M End 356027
作者: 不点    时间: 2012-5-31 11:12
标题: 回复 #32 sgw888 的帖子
竟然让我碰巧说对了!真的是 538K。这就等于说,你的 PXE 刚好占用了 100K。

你的 BIOS 中的 EBDA 占用了 2K。

所以,你的全部 640K 常规内存是这样分配的:

最低端的 538K 可以由用户自由使用。紧接着往上的 100K 被 PXE 占用。这就达到 638K 了。还剩下 2K 是 EBDA。

PXE 占用 100K,目前看来这还算是比较小的,这个占用情况完全可以避免与 grub4dos 发生冲突。有些糟糕的 PXE 会占用 110K、120K,那就容易与别的软件产生冲突了。

什么牌子的机器?机器型号?主板型号?何时生产的?何时购买的?硬件配置怎样?价格多少?
作者: sgw888    时间: 2012-5-31 11:40
组装机,旧机器,主板是从其他机器拆来的,具体来源不清楚.
主板上面有一个 MSI 的标志,非常明显,在PCI插槽有一个 848P-V2 的标志.
BIOS启动信息:
Phoenix - AwardBIOS v6.00 PG

还有一行信息   W7157IMS v1.2 052305  01:16:12

下面是鲁大师检测到的信息:
主板型号        微星 MS-7097
芯片组        英特尔 82865G/PE/P, 82848P - 82801EB/ER(ICH5/ICH5R)
BIOS        Phoenix Technologies, LTD 6.00 PG
制造日期        05/23/2005
作者: sunsea    时间: 2012-6-14 07:05
我也来报告
一只宇瞻的4G优盘U起检查到的CHS(此机无软驱,BIOS里也关掉了软驱,用的是USB-HDD)
检查结果:
drive 0x00(CHS): C/H/S=1/1/18, Sector Count/Size=18/512
Filesystem type unknown, using whole disk
drive 0x80(LBA): C/H/S=486/255/63, Sector Count/Size=7807590/512
   Partition num: 3, active,  Filesystem type is fat, partition type 0x0B
那个怎么会有软驱?而且只有18个扇区?

[ 本帖最后由 2011czmxbb52 于 2012-6-14 07:07 编辑 ]
作者: 不点    时间: 2012-6-14 10:41
标题: 回复 #35 2011czmxbb52 的帖子
drive 0x00(CHS): C/H/S=1/1/18, Sector Count/Size=18/512

上面这个软盘 00,是根本不存在的。是属于 BIOS 的 bug(或者人为制造的陷阱,故意让某软件死机的),前面的帖子对此也分析过了。

drive 0x80(LBA): C/H/S=486/255/63, Sector Count/Size=7807590/512

上面这个硬盘 80,支持 LBA,这才是你的 4G 的 U 盘。整个来说,只要主板 BIOS 能够以 LBA 访问 U 盘,那就很不错。这样的 U 盘也支持 wee ,是没有问题的。

[ 本帖最后由 不点 于 2012-6-14 10:43 编辑 ]
作者: sunsea    时间: 2012-6-15 21:30
继续
这是我在我家老机上测试的
只能用USB-ZIP
我用U起
driver 0x00(CHS): C/H/S=486/255/63, Sector Count/Size=7807590/512
  Partition num: 0, active,   Filesystem type is fat, partition type 0x0B
作者: 幸运的草    时间: 2012-6-26 15:27
标题: 回复 #36 不点 的帖子
这类机的BIOS有BUG或者是个陷阱,他会虚拟出一个不存在的(fd0)。这样,你仿真(fd0)时,用find命令根本就找不到你仿真的(fd0),当然直接访问是可以的。结果就是由于find查找不到出错或者死机。因为,使用find命令要慎重。

 其实一年半前在测试ZXW的RUN时就发现这个问题了。

解决办法:1、尽可能将U盘格式成HDD格式,除非特殊情况,不要弄成ZIP格式。
     2、在菜单初始化时或在批处理中如果判断为ZIP时,加上一句map --floppies=1即可解决find找不到(fdX)的问题。

另外,这类BIOS,也有可能虚拟出一个不存在的(hd0)。特提醒注意。
作者: sunsea    时间: 2012-7-16 10:16
插一句嘴
不知道发在这合不合适
我目前测试了几台机器
机器年代从2003年-2011年的都有
测试工具:
N台电脑
一个4G的Apacer的U盘 CHS识别为=486/255/63 总扇区数7822560 USB-HDD(单分区)
我统计不好
不要见怪
发现:
开头是EB指令,BPB为空,被测机器识别为ZIP概率8%
开头是EB指令,有BPB,被测机器识别为ZIP概率90%
开头不是EB指令,BPB是代码,被测机器识别为ZIP只有2台
只要被识别成ZIP,90%的被测机器访问都是CHS
家里电脑两台
学校电脑5台
家里电脑一台2012年刚买的
一台2003年的
学校电脑2003年的、2010年的、2011年的都有




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