3964|6

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

FAT文件系统高手来帮忙解答,小弟将不胜感激涕零 [复制链接]

我在嵌入式平台上移植的FAT32文件系统,自己写MBR区域以及DBR区域和后继的文件系统等。
发现一个问题,实在不知道如何解答和处理。
首先说一下,我的MBR区域、DBR区域以及相关情况:
1.我用的是80G的硬盘,扇区总数为156301488.
2.我在MBR区域第一个分区表中建立的是一个扩展分区,它的(1c6偏移位置)sectors preceding partition 为16065,(1ca)sectors in partition 1 我写的是156285423(156301488-16065=156285423)
3.跟到16065号扇区,我的扩展分区表的内容是,sectors preceding partition 为63,sectors in partition 1我写的是156285360(156301488-16065-63=156285360).
4.跟到16128号扇区,也就是我写的DBR区域,hidden sector是16128,sectors(on large volumes)156285360.
5.根据我的理解,这样写完全可以,因为它总的来说,是一环扣一环,不应该有问题的。我在嵌入式平台上,在我的硬盘里建立一个FAT32文件目录(文件夹),插在我的个人PC上面完全可以识别,可以识别我写的文件系统是FAT32的,可以看到我建立的文件目录(文件夹),对这个文件夹操作也没有问题。


但是,我用一个软件时却发现了问题,它是Norton Partition Magic 8.0,它提示我说:
已检测到起始于磁盘2 扇区16065上的分区有错误110.
分区表中的长度不正确。
CHS长度为156296385 LBA长度为156285423.
Norton Partition Magic已经决定长度可以更改为正确的值156280320.
并且提示我修改与否。

如果我修改的话,它就将我的MBR区域的,(1ca)sectors in partition 1 我写的是156285423(156301488-16065=156285423)给改写为156280320,它还是显示说我的硬盘为坏,而且用它格式化的时候显示说论据错误格式化不了。

如果我不修改的话,它就显示我的这个硬盘为坏,不予识别,格式化的时候显示说论据错误格式化不了。


后来我通过WINHEX工具观测我的硬盘数据,发现它在hard disk 1显示的磁盘空间分配有一行是 unpartitionable space  大小是2.5兆,起始于156296385号扇区到156301488,共计大小为5103个扇区,2551.5k,等于2.491兆,约等于2.5兆。
然后我联想到魔法分区师的提示,CHS长度为156296385 ,而我在MBR区域写的是 (1ca)sectors in partition 1156285423(156301488-16065=156285423) ,它减去5103就是正确的魔法分区师写的正确的数值156280320,我个人认为这不是巧合,肯定是什么地方出了问题,因为我不理解winhex显示的 unpartitionable space  是什么东西,它的空间应该排除在分区之外,我没有排除,我不知道这个空间它是从哪儿来,如何计算,还有就是CHS长度和硬盘的总共扇区数156301488,之间有什么关系,看魔法分区师的意思是应该在CHS长度范围内分区,它们之间的差值为不可分区区域的长度也就是5103
不可分区的长度应该排除在分区长度之外.


现提出以下问题,望大家能给与意见和建议,懂的高手能予以解答:
(1)、CHS如何计算,我读到的硬盘参数是,heads = 16,cylinders = 16383,sectors pe track = 63,它们的乘积是16514064不等于CHS长度(156296385),它到底如何计算还是说我的硬盘参数读取有误。

(2)、unpartitionable space  具体是什么区域,位于硬盘数据区具体的什么地方,它如何产生,如何就不能分区,我知道有一句话:分区不能跨柱面,是否和这句话有关,它的大小如何计算,是否像我看到的那样由总共扇区数156301488和CHS长度之差。

(3)、我在用魔法分区师修改完之后,在工具里看到的还是说的硬盘为坏,格式化不了,它是否还是由空间分配引发的问题分配的空间都多了5103个扇区,而只修改了MBR中的错误,扩展分区表和DBR的大小都没改。

(4)、我上面写的各个字段分配的空间有和不妥的地方,可以指出来,大家可以讨论一下,这还是很有意义的。

最新回复

针对你提到的第一个问题:我自己认为的CHS长度是三个参数相乘      后来查了一下资料 也不对 柱面数最多为1024个  CHS能寻址的最大空间为 1024个柱面*63个扇区*256个磁头*512byte .   CHS长度(156296385)这个是在魔法分区师工具上看到的。 针对你提到的第二个问题:unpartitionable space  这个区域我也认为有别于  MBR到FAT卷分区前隐藏的扇区。  但是这个unpartitionable space  到底怎么计算 我不知道  。 针对你提到的第三个问题:分区不能跨柱面 。 它的意义到底体现在哪  我还是不知道    如果你知道的话  可以指出我上面的操作  有无体现这句话   我认为体现这句话了  我的扩展分区所在的扇区号是16065号  一个柱面容是255*63=16065,我确实是在另外一个柱面的开始写扩展分区的    这是我理解的方式  不知道对不对 针对你提到的第四个问题:我的硬盘 就分了一个区 。魔法分区师  不识别我的硬盘  但是我的XP认识它  用XP就可以格式化我的硬盘    微软还是强大啊   它可以做到不顾及我分区表中的CHS值  就按照我想的那样去分区之类的   XP就能识别 还能正常操作我的硬盘   不服微软不行啊 针对你提到的第五个问题:我是在嵌入式平台上面移植文件系统的   没有系统函数可以使用 PS:我在MBR第一个分区里写的是一扩展分区   分区类型标记写的是0F    在16065号扇区写的是一FAT32分区  分区类型标记写的是)0B   详情 回复 发表于 2009-12-16 19:56
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你是在什么系统上移植?大部分系统不用自己动手做吧
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用winHEX这个工具,找到分区表,看偏移 1be 那里 连续放的是4个分区表,不过一般只有2个是使用的,第一个是 我的硬盘的分区表,我们要的就是硬盘分区表下的第一个分区表指向主分区,找到最后4个字节,比如:E2 48 95 00 计算:00 95 48 E2 H = 9783522 这里是代表本分区共有9783522个扇区,每个扇区 512字节,所以这个分区一共9783522*512=5009163264字节,注意:硬盘存储的数据是先低位再高位存储的。然后再转换为LBA。
至于剩下几个问题,我也不是黑清楚~~~
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
1. 我读到的硬盘参数是,heads = 16,cylinders = 16383,sectors pe track = 63,它们的乘积是16514064不等于CHS长度(156296385),它到底如何计算还是说我的硬盘参数读取有误。
你的CHS长度(156296385)是如何获取的?
2. unpartitionable space  具体是什么区域
硬盘上所有的划入分区的空间,都应该在mbr分区表中记录,为在这里纪录的就称为unpartitionable space,这个有别于分区中的reserved space
3. 分区不能跨柱面,是否和这句话有关
那肯定有关了,呵呵
4. 法分区师修改完之后,在工具里看到的还是说的硬盘为坏,格式化不了
建议直接用法分区师全盘进行格式化并分区
5. 我上面写的各个字段分配的空间有和不妥的地方,可以指出来
如同yashi大哥所说,
无论是你对于硬盘还是其他的固态存储,直接用ms的函数操作不就行了,把握分区不能跨柱面得原则就行了,没有必要直接去控制mbr等信息
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 1 楼 yashi 的回复:
你是在什么系统上移植?大部分系统不用自己动手做吧


在嵌入式平台  MIPS芯片    移植大多数就是需要修改   重写的地方不多
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 xilidecai 的回复:
用winHEX这个工具,找到分区表,看偏移 1be 那里 连续放的是4个分区表,不过一般只有2个是使用的,第一个是 我的硬盘的分区表,我们要的就是硬盘分区表下的第一个分区表指向主分区,找到最后4个字节,比如:E2 48 95 00 计算:00 95 48 E2 H = 9783522 这里是代表本分区共有9783522个扇区,每个扇区 512字节,所以这个分区一共9783522*512=5009163264字节,注意:硬盘存储的数据是先低位再高位存储的。然后再转换为LBA。
至于剩下几个问题,我也不是黑清楚~~~



你说的这个  我也知道  也有注意到   LBA长度是逻辑分区的长度   没有算错
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 guopeixin 的回复:
1. 我读到的硬盘参数是,heads = 16,cylinders = 16383,sectors pe track = 63,它们的乘积是16514064不等于CHS长度(156296385),它到底如何计算还是说我的硬盘参数读取有误。
你的CHS长度(156296385)是如何获取的?
2. unpartitionable space? 具体是什么区域
硬盘上所有的划入分区的空间,都应该在mbr分区表中记录,为在这里纪录的就称为unpartitionable space,这个有别于分区中的reserved space
3. 分区不能跨柱面,是否和这句话有关
那肯定有关了,呵呵
4. 法分区师修改完之后,在工具里看到的还是说的硬盘为坏,格式化不了
建议直接用法分区师全盘进行格式化并分区
5. 我上面写的各个字段分配的空间有和不妥的地方,可以指出来
如同yashi大哥所说,
无论是你对于硬盘还是其他的固态存储,直接用ms的函数操作不就行了,把握分区不能跨柱面得原则就行了,没有必要直接去控制mbr等信息


针对你提到的第一个问题:我自己认为的CHS长度是三个参数相乘      后来查了一下资料 也不对 柱面数最多为1024个  CHS能寻址的最大空间为 1024个柱面*63个扇区*256个磁头*512byte .   CHS长度(156296385)这个是在魔法分区师工具上看到的。

针对你提到的第二个问题:unpartitionable space  这个区域我也认为有别于  MBR到FAT卷分区前隐藏的扇区。  但是这个unpartitionable space  到底怎么计算 我不知道  。

针对你提到的第三个问题:分区不能跨柱面 。 它的意义到底体现在哪  我还是不知道    如果你知道的话  可以指出我上面的操作  有无体现这句话   我认为体现这句话了  我的扩展分区所在的扇区号是16065号  一个柱面容是255*63=16065,我确实是在另外一个柱面的开始写扩展分区的    这是我理解的方式  不知道对不对

针对你提到的第四个问题:我的硬盘 就分了一个区 。魔法分区师  不识别我的硬盘  但是我的XP认识它  用XP就可以格式化我的硬盘    微软还是强大啊   它可以做到不顾及我分区表中的CHS值  就按照我想的那样去分区之类的   XP就能识别 还能正常操作我的硬盘   不服微软不行啊

针对你提到的第五个问题:我是在嵌入式平台上面移植文件系统的   没有系统函数可以使用


PS:我在MBR第一个分区里写的是一扩展分区   分区类型标记写的是0F    在16065号扇区写的是一FAT32分区  分区类型标记写的是)0B
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表