春节前微软MF负责人员就提出用C#实现MF的文件系统,由于前一段时间事务相对比较繁忙,所以直到上礼拜六才开始深入研究FAT文件系统。其实FAT文件系统早在九十年代中期上大学初的时候就已经了解,当时有一款叫PCTools的工具软件,可以直接读写磁盘的扇区,由于当时的软盘很容易坏(常见的就是0磁道被划伤),所以那个时候能用PCTools修复软盘的在我眼中都是高手。当时对FAT表,32个字节的文件(或目录)信息表基本都了解,唯一比较可惜的是,自己从来都没有用PCTools修改过磁盘的扇区信息(为什么呢?我想不外乎如下几个原因,一、相关资料比较匮乏(互联网真是一个好东西);二、掌握这种技能的人相对比较保守,不肯轻易示人;三、当时我的主要兴趣是用C语言实现各种数学算法,直到现在,我的内心深处也是对相对偏硬的知识有一种近乎本能的排斥(我当时编写的那些程序直到今天都运行正常,那些相对偏硬(或偏底层)一点的技术,如驻留内存技术、直接打屏技术、修改中断向量表技术、操作Bios中断、DOS中断技术、西文DOS下显示汉字技术,其实到目前已经作古))。

下面几点疑问其实就是我的疑问,不敢说我的理解是正确的,但最起码比以前的理解更接近真相。

1、  FAT32比FAT16文件系统在数据存取方面更有效率,因为它的簇数所占字节数比后者小?

答:这种理解是比较片面的。如下表(微软默认格式化参数)

FAT16文件系统
 FAT32文件系统
 
磁盘大小
 扇区/簇
 字节数
 磁盘大小
 扇区/簇
 字节数
 
4.1~16MB
 2
 1k
 32.5~260MB
 1
 512
 
<=128MB
 4
 2k
 <=8GB
 8
 4k
 
<=256MB
 8
 4k
 <=16GB
 16
 8k
 
<=512MB
 16
 8k
 <=32GB
 32
 16k
 
<=1GB
 32
 16k
 >32GB
 64
 32k
 
<=2GB
 64
 32k

其实对小容量存储器<=256M我倒是时比较建议用FAT16格式,至于小于4M的存储器那就不要难为FAT16了,直接采用FAT12吧。

2、  怎样区分FAT12、FAT16、FAT32文件系统?

答:通过数据区所占用的簇数来判断,微软的文档中号称这是检查FAT文件系统类型的唯一办法,称这个世上不存在簇数大于4084的FAT12卷,也不存在簇数小于4085或是大于65524的FAT16卷,同样没有哪个FAT32卷的簇数小于65525。如果你坚持要违背这个规则来创建一个FAT卷,那么微软的操作系统将无法对此卷进行操作,因为它不认为这是FAT文件系统。

簇数=(扇区总数-(保留扇区数+(FAT表个数*FAT表所占扇区数)+根目录所占扇区数))/每簇扇区数

3、  主要分区、扩展分区、逻辑驱动器?

答:磁盘系统最初设计的时候,认为一个磁盘分四个分区就够了,这四个分区就是主要分区,由磁盘引导扇区DPT磁盘分区表进行配置(一个分区配置占16个字节,共64个字节)。随着硬盘容量的增大(更有可能的是最初设计的时候就已经考虑到了这种情况),分四个分区不能满足需要了,特别是FAT16时代,一个硬盘大于8G,分四个区后,剩下的空间就没法利用了。扩展分区这个时候的意义就来了,可以把扩展分区又看成一个小磁盘,它的初始扇区的地址由DPT磁盘分区表任意4个中的任一个指定(注意,在磁盘类型这个字节的配置中一定设置为0x05,它告诉系统,这个地址指向的分区是扩展分区,其它常用的值如,01-FAT32 ,06-FAT16,07-NTFS分区,在不知道这个知识的情况下,害的我到处到在google上搜索,怎样区分MDR和DBR扇区信息)。逻辑驱动器是扩展分区这个小磁盘上的主要分区,不过这个分区前面一定要有虚拟MDR引导记录扇区,这个扇区中DPT磁盘分区表再指向实际的磁盘分区(有点绕),这时候的分区内容就和主要分区一样了。所以嘛,如果你仅分四个以内(包括四个)的分区,我建议最好都分成主分区。

4、  U盘能否分区?

答:原先我以为U盘和硬盘一样,随意分区,和什么样的优盘没有什么关系,事实证明我错了。目前据我所知道的是,如果你优盘插入后,系统把它当作硬盘,那么恭喜你,你的优盘可以分区了(不要想当然的认为,格式化为HDD格式就可以了,其实和这个没有关系,应该和U盘里面的相关驱动程序有关系,我把一个可分区的优盘信息内容全部克隆到另一个优盘上了,事实上仅可以看到第一个分区的内容,如果你用磁盘管理程序来看该磁盘内容,你可以看到那个分区,但是不能格式化,系统提示:分区未启用)。

5、  怎样直接读写硬盘指定的扇区?

答:以前认为很复杂,其实很简单,用流函数操作即可(需要超级用户的权限)。

CreateFile,CloseHandle,WriteFile,ReadFile四个API函数搞定,唯一区别的是,文件名称要特别设置。

对逻辑磁盘,其文件名称为:“\\.\C:”、“\\.\D:”  … … 其读写的0扇区从引导扇区开始算起(即DBR所在的扇区)。

对物理磁盘,其文件名称为:“\\.\PhysicalDrive0”、“\\.\ PhysicalDrive1”  … …其读写的0扇区就是主引导记录所在的扇区。

6、  什么是隐藏扇区、保留扇区?

以FAT16文件系统为例

隐藏扇区
 保留扇区
 FAT表
 根目录区
 数据区
 
分区前 ß
 à分区后  文件系统开始的部分

隐藏扇区可以没有,隐藏扇区第一扇区就是存放MBR(或扩展分区中虚拟MBR),保留扇区第一个扇区存放的就是引导扇区信息(DBR)。

上图是我用C#做的磁盘读写程序,已经可以分区和格式化了。

参考资料:

1、《Microsoft Extensible Firmware Initiative FAT32 File System Specification》 V1.03,December 6,2000

2、网友整理的《FAT文件系统原理》

附记:

学会一件东西需要有三要素:1、相关资料齐备(否则麻烦就大了,还好我们有互联网,这里向那些斩荆劈藜的先驱致敬) 2、多读、多想、多做 3、再加一点领悟能力

什么叫悟性,看过武打小说的人对这个“悟性”这个词一定心神领会,没有悟性的人即使武林秘籍在手,也练不成绝世武功。在佛教徒里,没有“悟性”的人是成不了佛的。有些人认为悟性是天生的,和天资聪颖是一回事。

我个人拙见,人认识和理解新事物分三个步骤,第一步把新事物和以前已知的事物进行类比,做出第一步猜想;第二、验证猜想;第三、回到第一步,继续循环,直到接近事物的本源(其实很多科学规律的就是这样发现的)。悟性和认识事物的这个过程的时间长短成反比。如果时间为一刹那,那么他就成佛了。

做出猜想是成功的第一步,尤为重要,而这一步我认为和后天的经验有关,是可以通过学习得到的。其实很聪明,悟性很高的人,涉猎很广,对很多知识都有很强的求知欲,相关知识积累到一定层度,最后量变就引起质变。现在的原子弹不是也不用实际爆破试验了吗,通过计算机就可以模拟试验了,大大加快了研发进程(这是因为技术储备到一定层度了)。

本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/324291,如需转载请自行联系原作者

FAT文件系统几点释疑相关推荐

  1. 在SD/MMC卡中可读写的FAT文件系统

    2019独角兽企业重金招聘Python工程师标准>>> FAT文件系统 关于eLua中FAT文件系统的实现是使用了来自Elm Chan的一个很好的FatFS文件包.它可以在读写模式中 ...

  2. 建立FAT文件系统学习笔记

    FAT文件系统的概况图 1.MBR 进行百度得到,计算机在按下power键以后,开始执行主板bios程序.进行完一系列检测和配置以后.开始按bios中设定的系统引导顺序引导系统.假定现在是硬盘.Bio ...

  3. linux恢复fat文件系统,从FAT文件系统恢复已删除文件的数据

    介绍 尽管FAT32或FAT16是非常古老的文件系统,这反映出与其他文件系统替代产品相比,它们的性能较差,但它们仍被许多电子设备广泛使用.通常,这些设备包括USB memory 棒,数码相机,便携式摄 ...

  4. fat文件系统基础知识

    文件分配表(英语:File Allocation Table,首字母缩略字:FAT),是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的Windows系统使用的文件系统 ...

  5. 【技术三千问】之《FAT文件系统问题解析》,干货汇总!

    技术三千问: [技术三千问]之<玩转ART-Pi>,看这篇就够了!干货汇总 [技术三千问]之<AT组件问题汇总与解析>,干货汇总! [技术三千问]之<UART串口问题解析 ...

  6. K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

    开发板:K210 AIRV R3版 widora 开发环境:kendryte IDE 官方的 必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图 (一) 新建文 ...

  7. FAT文件系统原理(转载)

    转自: http://blog.chinaunix.net/uid-24611346-id-3246892.html 一.硬盘的物理结构:     硬盘存储数据是根据电.磁转换原理实现的.硬盘由一个或 ...

  8. 硬盘FAT文件系统原理的详细分析——转载

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

  9. 手工数据恢复你也行:FAT文件系统DBR损坏后的恢复

    对于FAT16文件系统,因为没有DBR备份扇区,所以当DBR损坏时,就需要根据分区中的数据存储情况重建其DBR,手工恢复如此,软件也如此,只不过软件是虚拟出一个文件系统而已. 对于FAT32文件系统, ...

  10. 野火STM32F103——Fat文件系统及Flash芯片W25Q64学习记录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一.Fatfs是什么? 二.W25Q64是什么 三.使用步骤 1.引入库 2.移植文件系统 文件简单读 ...

最新文章

  1. 【vijos】【二叉树】FBI树
  2. sql server系统表详细说明(转)
  3. MySQL 条件查询
  4. 微信这10个牛X的隐藏功能,你知道几个?
  5. 数据结构关键路径_2021年厦门大学考研丨能源学院845数据结构参考书目推荐
  6. 50套可视化报表模板直接用,做报告不用愁了!快收藏
  7. 【心电信号】基于matlab小波变换心电信号去噪【含Matlab源码 956期】
  8. Java—读取指定路径下文件的内容
  9. 吴恩达机器学习(四)代价函数
  10. WPF+VB.net制作桌面股票小助手
  11. python经典书籍推荐-7本经典的Python书籍,你都读过了么?
  12. C - Quick Sort (one of the simplest)
  13. 如何限制在制品?| Kanban
  14. 深信服安全运营工程师一面经验+二面经验
  15. 修改C盘下用户的文件名的一些坑!!!
  16. POS机电销常见话术_其中有危害吗
  17. Windows CMD命令行一启动就闪退问题解决
  18. Vue3项目基本知识点
  19. 收集的十个高清无版权图片网站
  20. mysql主从同步部分表_Mysql入门MySQL 主从同步部分数据表

热门文章

  1. oracle创建PDB数据库
  2. 【网络信息安全】电子邮件安全
  3. 老外用VB6写的Windows驱动备份软件
  4. 记一次简单的burpsuite弱口令爆破实验
  5. php递归算法-无限极分类
  6. AspUpload 组件上传 安装方法及其Demo(全)
  7. 流程图连接线生成算法
  8. 十六进制转二进制原理
  9. 接上文安装完opencv后安装viz模块
  10. 水晶易表Xcelsius 2008安装指南 支持WIN10 64位 + office2016