FAT32&BIO&DISK

众所周知存取数据最常见的是以文件方式。每当需要存取数据的时候,首先需要open and creat一个文件,随后read and write,完成后close,清空点格式化,查看文件敲ls/ll;这些看似简单的命令是如何到达disk(disk表示我可不知道命令、文件,我只认识数据)。

一个很明显的需求摆在眼前,我们需要在disk和文件直接建立映射关系。怎么建立?文件系统就是我们建立关系载体,bio就是的手段,disk就是目标。

1、 叫你一声你敢答应么

当我们在windows上插入一张从未使用过的盘片的时候,会出现什么状况?

——请格化

windows怎么知道你没被格式化呢?

——叫你一声没人应

VxWorks面临一样的问题,我初次见到你怎么确定我们是否认识?叫你一声(读引导记录扇区),看你一眼(读文件系统保留区), 问你一句(读空间分配状态和文件/目录存储关系区)。OK,我们看看VxWorks下FAT32是怎么识别盘片的。

发read sector=0 length = 1 bio两次,识别第一个block中的某些字段(0~1BD引导代码、分区表),如果不匹配则初始化它为rawfs,如果匹配则从sector=X开始读大概几百兆(和盘片容量有关,下文解释)的数据,如果其中特定的字段是匹配的,再次读sector=X,这样就代表probe FAT32 成功了,接下来就可以对disk文件操作(cd/ls/creat/rm/copy)了。(经测试在读取数据的时候抹去当前page末的227字节数据也能匹配fs成功,说明文件系统不是比较其中的每次字节都匹配,只对其中特殊的字段作比较)

2、 文件系统即数据

DOS的外壳---引导记录扇区:

FAT32属于DOS文件系统的一种,那么FAT32的外壳就应该是DOSFS(测试观察dosfs和ntfs 的 第一个扇区的478~493不同)如下为lba = 0 的数据:

{33 c0 8e d0 bc 00 7c 8e c0 8e d8 be 00 7c bf 00 06 b9 00 02 fc f3 a4 50 68 1c 06 cb fb b9 04 00 
bd be 07 80 7e 00 00 7c 0b 0f 85 0e 01 83 c5 10 e2 f1 cd 18 88 56 00 55 c6 46 11 05 c6 46 10 00 
b4 41 bb aa 55 cd 13 5d 72 0f 81 fb 55 aa 75 09 f7 c1 01 00 74 03 fe 46 10 66 60 80 7e 10 00 74 
26 66 68 00 00 00 00 66 ff 76 08 68 00 00 68 00 7c 68 01 00 68 10 00 b4 42 8a 56 00 8b f4 cd 13 
9f 83 c4 10 9e eb 14 b8 01 02 bb 00 7c 8a 56 00 8a 76 01 8a 4e 02 8a 6e 03 cd 13 66 61 73 1c fe 
4e 11 75 0c 80 7e 00 80 0f 84 8a 00 b2 80 eb 84 55 32 e4 8a 56 00 cd 13 5d eb 9e 81 3e fe 7d 55 
aa 75 6e ff 76 00 e8 8d 00 75 17 fa b0 d1 e6 64 e8 83 00 b0 df e6 60 e8 7c 00 b0 ff e6 64 e8 75 
00 fb b8 00 bb cd 1a 66 23 c0 75 3b 66 81 fb 54 43 50 41 75 32 81 f9 02 01 72 2c 66 68 07 bb 00 
00 66 68 00 02 00 00 66 68 08 00 00 00 66 53 66 53 66 55 66 68 00 00 00 00 66 68 00 7c 00 00 66 
61 68 00 00 07 cd 1a 5a 32 f6 ea 00 7c 00 00 cd 18 a0 b7 07 eb 08 a0 b6 07 eb 03 a0 b5 07 32 e4 
05 00 07 8b f0 ac 3c 00 74 09 bb 07 00 b4 0e cd 10 eb f2 f4 eb fd 2b c9 e4 64 eb 00 24 02 e0 f8 
24 02 c3 49 6e 76 61 6c 69 64 20 70 61 72 74 69 74 69 6f 6e 20 74 61 62 6c 65 00 45 72 72 6f 72 
20 6c 6f 61 64 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 00 4d 69 73 73 69 6e 
67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 00 00 00 63 7b 9a 2d 0e df 60 00 00 }引导代码

{

00 -----是否可引导,0不可,0x80可引导

20 21 00 ----分区起始chs

07----分区类型,(不重要,由分区引导决定)

fe ff ff-----分区chs结束地址

00 08 00 00----分区lba地址0x00000800=X(上文中提到的)

00 08 eb 01----分区大小扇区数

}分区表1

下同

{

80

fe ff ff

0c

fe ff ff

00 10 eb 01

00 50 60 02

}分区表2

{

00

feff ff

07

fe ff ff

00 60 4b 04

00 b8 7c 6b

}分区表3

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

{55 aa}签名

DOS的外壳FAT的核----FAT保留区:

从上面分区信息可以看到分区起始LBA地址为0x800,这个地址就是FAT保留区,下文为0x800数据:

eb 3e 90 ---汇编指令,跳转到引导代码处

56 58 35 44 4f 53 33 32---文件系统标志

00 02---每个扇区字节数(0x0200)

40---每个block扇区数

20 00 ---保留扇区数

02---FAT表个数

00 00 ---FAT32为0

00 00 ---扇区总数,超过长度存放于0x20~0x23

f8 ---介质描述符

00 00---FAT32为0

d0 9d ---每个此道扇区数

18 00---磁头数

00 08 00 00 ---分区前已用扇区数

00 10 c8 6f ---文件系统扇区总数

41 7e 03 00---每个FAT表大小

00 00 ---标记

00 00---版本号

02 00 00 00----根目录起始block号

01 00 --FSINFO所在扇区号,通常为1号扇区

06 00---备份引导扇区

00 00 00 00 00 00 00 00 00 00 00 00

80 ---bios int 13h设备号

00---

29---扩展引导标识,如果猴年三个值有效则为0x29

00 01 98 07---卷序列号

00 47 01 bd d0 32 b8 45 32 00 00---卷标

46 41 54 33 32 20 20 20 ---文件系统格式

{

00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa 
52 52 61 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 72 72 41 61 4c 04 bf 01 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00

}引导代码错误信息

{55 aa}签名

DOS的外壳FAT的核---FAT表:

FAT表描述block分配状态及表明文件和目录的下一个block号。

FAT32每个block地址使用4个字节记录在FAT表中,FAT表中所有的字节位置意4字节对齐,对所有 的划分后的位置由0进行地址编号,0号 1号地址被系统保留并存储特殊的标识内容,从2号地址每个地址对应的数据区的block号当文件系统被创建时,也就是格式化的时候分配给FAT区域的空间将被清空,在FAT1与FAT2的0号表项与1号表项写入特定的值在2号表项写入结束标识。

eg: 看0x820扇区数据:

|——0号—|   |——1号—|   |——2号—|

f8   ff   ff   ff   ff   ff   ff   f7  ff   ff   ff   0f  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

如果某个block未被使用对应的FAT表项4字节为0。

当某个block已被使用对应的FAT表项的4字节为该文件的下一关存储位置的block号。

如果该文件结束于该block,则在它的FAT表项中记录一关文件结束标记0x0fffffff。

如果该扇区为坏扇区记录0x0ffffff7,FAT32的0号表项为0xf8ffff0f。

文件系统建立新文件的时候,如果建立的新文件只占用一个block,则在其所占的FAT表项会被写入结束标记。

DOS的外壳FAT的核---数据区:

根目录一般位于2号block(位于数据区的2号block),用于存放文件基本信息(包括文件名、文件建立时间、修改时间、文件数据等)。

根目录在文件系统创建时创建,并将结束符写入2号block对应的FAT表项。

目录项:文件名部分不足8个字符,用0x20补齐。

3、系统调用的来龙去脉

4、 格式化的神秘面纱

1、 获取盘片在位状态

2、 获取盘片容量和blocksize

3、 获取xbd 设备

4、 读sector 0 两次,比较两次读取的数据是否一致

5、 写文件系统引导代码及分区表数据到sector 0、写FAT保留区、写FAT表项。

6、 向盘片发送flush命令

7、 Read sector 0

DOS文件系统-FAT32的理解相关推荐

  1. Linux和DOS文件系统的区别,对比Linux文件系统和DOS文件系统

    对比Linux文件系统和DOS文件系统 二 盖 氢拿 对比 文件系统和 娄 秦皇岛职业技术学院 文件系统 雨 河北 秦皇岛 [摘 ,. 共]件系统是操作系统用以表明磁盘或分区上的文件的一种方法以及数据 ...

  2. U盘文件系统FAT32、exFAT、NTFS之间有什么区别?

    U盘文件系统FAT32.exFAT.NTFS之间有什么区别? U盘的存在对于经常拷贝资料的用户来说是再熟悉不过了,TA支持热插拔,使用方便,操作也很简单.但不同的U盘有这不同的文件系统格式,像FAT3 ...

  3. VxWorks下DOS文件系统与SATA块设备驱动交互流程

    Vxworks 介绍 VxWorks 是专门为实时嵌入式系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度.中断管理,实时的系统资源以及实时的任务间通信.在各种 CPU 平台上提供了统一的 ...

  4. linux对文件的描述,对Linux文件系统的简单理解

    姓名:邝念君 学号:14020150024 [嵌牛导读]:EXT3,EXT4,BTRFS和XFS是现在最常见的四个Linux文件系统.为了便于理解,本文以相对简单的EXT2为切入点,介绍其原理.便不难 ...

  5. linux一切皆是文件_Linux 的虚拟文件系统(真正理解“一切皆文件”)

    1,引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系 ...

  6. 通过DOS 将FAT32转为NTFS,NTFS转FAT32

    一.FAT32转NTFS 在"运行"中输入"CMD"打开"命令提示符"窗口,输入:"CONVERT F: /FS:NTFS&quo ...

  7. (docker笔记):镜像原理之联合文件系统、分层理解、commit 镜像

    目录 Docker 镜像讲解 什么是镜像? Docker 镜像加载原理 分层理解 commit 镜像 Docker 镜像讲解 什么是镜像? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和 ...

  8. linux shell mkdosfs 命令用于建立 dos 文件系统

    device 指你想要建立 DOS 档案系统的装置代号,像是 /dev/hda1 等等. block_count 则是你希望配置的区块数. 如果 block_count 没有指定则系统会自动替你计算符 ...

  9. fat,fat32,ntfs,ext2,ext3等 文件系统说明

    A.FAT16(最大分区2GB,最大文件2GB ,最大容量) 在说明FAT16文件系统之前,我们必须清楚FAT是什么?FAT(File Allocation Table)是"文件分配表&qu ...

  10. 鸿蒙支持ntfs,文件系统 FAT/FAT32/NTFS/ufs/ext3/reiserfs介绍

    文件系统 FAT/FAT32/NTFS/ufs/ext3/reiserfs介绍 FAT16/FAT32 FAT(File Allocation Table)是"文件分配表"的意思. ...

最新文章

  1. byte数组和正数BigInteger之间的相互转换
  2. 如何使用subversion管理iOS源代码
  3. git2.29.2.2怎么安装_MySQL5.5怎么安装
  4. 视觉标定,再来一波!!更简单粗暴!!!!!!
  5. Silver Cow Party POJ - 3268(dijkstra+反向交换)
  6. Vmware 安装虚拟工具 (二)
  7. matlab 曲线拟合求导,基于matlab曲线拟合的数据预测分析
  8. Windows开发时IsWindowVisible返回错误的处理方法
  9. 工厂方法(Factory Pattern)
  10. 虚拟化--vsphere排错组件归纳
  11. java实现modbus rtu协议与 modscan等工具
  12. png、jpg图片格式的区别及
  13. 四旋翼电池、电机、螺旋桨选型与搭配
  14. 考试 倒计时 php,PHP实现考试倒计时功能代码
  15. 如何使用Kotlin构建Android旋转旋钮以帮助儿子练习钢琴
  16. DOS的建文件夹,移动图片,多级文件夹建立
  17. 郭德纲恶心别人的台词大全
  18. 黑马程序员 if elseif else 与if if if连用的区别
  19. HelloWord以及Java程序运行原理
  20. 中小企业适合使用什么企业管理系统?

热门文章

  1. QCC3020开发问题汇总(更新中。。。)
  2. 注册登录后才可以下载的源码_专注爬虫:20个精心总结爬虫项目,爬虫技术这里强(附源码)...
  3. java web课程报告_java web课程设计报告.doc
  4. mapgis坡度分析_gis气候分析图_用MAPGIS做城市气候的分析需要什么类型的数据可以从哪下载_滁州气象...
  5. Matlab中句柄类
  6. Clearcase no version selected issue
  7. 完稿—单片机原理与接口技术
  8. 数学建模 CUMCM2018年A题真题(本文由西南民族大学白白不加糖、薄荷CC糖原创)
  9. 科创板设立 币圈走向几何?
  10. 以太网--车载以太网