首页 > 编程知识 正文

ntfs和fat32的转换,文件系统ntfs是什么

时间:2023-05-05 16:04:42 阅读:110800 作者:2592

FAT32文件系统(一)为什么需要文件系统)2) FAT32文件系统结构)3)分阶段介绍各个部分)1)首先介绍MBR )2)介绍DBR )3)介绍FAT表)4)

(一)为什么需要文件系统

文件系统是操作系统用于澄清存储设备或分区上的文件的方法和数据结构。 这意味着如何组织存储设备上的文件。 如果没有文件系统,要找到硬盘上存储的数据就很困难了。 文件系统的作用是为用户创建、读取和修改文件,并控制文件的读取。 常用的格式化硬盘是写入文件系统。 文件系统的种类有很多,各有特点。 本文主要介绍FAT32文件系统。

)2) FAT32文件系统构成FAT32文件系统包括DBR及其预留扇区、FAT1、FAT2、和数据的四个部分(下图的MBR是主引导记录,并非都是所有的盘)

(三)分步介绍)1)首先介绍MBR MBR主要存储的磁盘分区信息。 如果存在MBR,则第一扇区的512个字节、前446个字节是MBR引导代码(这里未注意)、下一16*4个字节是磁盘分区表、每分区信息为16个字节。 因此,MBR分区表

如果SD卡的开头是EB 58 90,说明SD卡上没有MBR,需要重新创建MBR。 创建过程可以参考SD卡,移植FAT32文件系统中没有MBR。 看看MBR的内容:

识别长度的说明值Active1字节0x80是活动分区,0x00是非活动分区0x80StartHead1字节分区的开始头0x20StartCylSect2字节开始柱面和扇区(需要检查信息(0x210x00PartType1字节划分类型)0x0b和0x0c为0x0c 磁头0xFEEndCylSect2字节结束柱面和扇区)柱面和扇区各占不同的位数,需要资料)0xff0xE1StartLBA4字节分区的第一个扇区0x000x080x000x00Size4字节分区

对于这一点信息,初学者只要知道分区的最初扇区和分区的大小就可以了,从上面可以看出开头扇区是0x00000800 (注意小端序模式!=2048个扇区,总扇区数为0x00f3c000时,总大小为0xf3c000*512/1024/1024=7.6g

注:

(1) MBR分区方案包括三种分区:主分区、扩展分区、逻辑分区。 发生分区和逻辑分区扩展是为了突破分区表中只能保存4个分区的限制。 扩展分区不能直接使用。 必须在使用扩展分区之前划分一个或多个逻辑分区。

)2)通常每扇区的容量为512字节,4字节的扇区中可表示的最大容量为2-TB (2^ 32 * 512/1024/1024/1024=2048 g=2tb ),对于MBR划分表,划分的开始位置为2-TB

一些硬盘制造商试图扩大扇区的大小,以突破MBR不适合2TB以上硬盘的限制。 因此,我们可以看到,市场上的硬盘驱动器不是每扇区512字节,而是每扇区1024到2048字节。 然而,这种方法没有被广泛接受,因为扩大扇区的大小还带来了许多其他的问题,特别是对硬盘的速度有很大的影响。

)2) DBR介绍DBR是在格式化分区时创建的,每个分区都有DBR信息。 一个DBR只能定义一个分区系统文件,占用512字节

如上面的MBR所示,第一个分区位于2048个扇区(2048*512字节=0x100000 )。 直接跳过:吧

跳转命令: EB 58 90:本身占用2个字节,将程序的执行过程跳转到引导程序

OEM代码:该部分为8字节,其内容由制作该文件系统的OEM制造商具体安排。

跳转命令后面是8字节的OEM ID。 这是一个字符串,OEM ID标识用于格式化分区的操作系统的名称和版本号。 为了与MS-DOS兼容,Windows 2000格式化的磁盘通常在FAT16和FAT32磁盘的该字段中包含“MSDOS 5.0”、NTFS磁盘(对于NTFS,请参见其他内容) 通常,OEM ID字段显示MSWIN4.0,Windows 95 OSR2和Windows 98格式化的磁盘显示MSWIN4.1。

BPB :下面是从上图剪切的BPB的内容

我们主要关注红色字体表示的内容:

长度说明值BytesPerSec2字节的每个扇区的字节数。 通常为512、1024、2048、40960x000x02SecPerClus1字节的每个簇扇区数。 此值必须是2的整数次方,而不是0。 例如,1、2、4、8、16、32、64、1280x08ResdSecCnt2字节保留扇区的数量0x5E0x06NumFATs1字节FAT表的数量0x02RootEntCnt2字节FAT32为00 x 00 x 000 t ot

ec162字节FAT32固定为00x00 0x00Media1字节存储介质,0xF8标准值,可移动存储介质0xf8FATSz162字节FAT32固定为00x00 0x00SecPerTrk2字节磁道扇区数0x3f 0x00NumHeads2字节磁头数0xff 0x00HiddSec4字节FAT区前隐藏扇区数0x00 0x08 0x00 0x00TotSec324字节总扇区数0x00 0xC0 0xF3 0x00FATSz324字节一个FAT表扇区数0xd1 0x3c 0x00 0x00ExtFlags2字节FAT32持有0x00 0x00FSVer2字节FAT32持有0x00 0x00RootClus4字节第一个目录的簇号0x02 0x00 0x00 0x00FSInfo2字节保留扇区数,FSINFO(文件系统信息扇区)扇区号是1,该扇区为操作系统提供关于空簇总数及下一可用簇的信息0x01 0x00BkBootSec2字节通常为60x06 0x00Reserved12字节用以扩展0x00 0x00 … 0x00DrvNum1字节驱动器号0x80Reserved11字节保留0x00BootSig1字节扩展引导标签0x29VolID4字节分区序列0x24 0x09 0x88 0x8aFileSysType11字节卷标略FilSysType18字节系统ID略

解读:
(1)从上面我们可以看出每扇区字节数为0x0200,即512字节
(2)每簇扇区数为0x08
(3)保留扇区数为:0x065e=1630
(4)FAT表数目为2
(5)总扇区为:0x00f3c000即15974400个扇区
(6)一个fat表扇区数:0x000003cd1即15569
(7)第一个目录簇号0x00000002
(8)第一个fat表的扇区号=DBR所在扇区+保留扇区=2048+1630=3678
(9)第一个目录的扇区号=第一个fat表的扇区号+2*(一个fat表扇区数)=3678+2*15569=34816
FAT32文件系统在DBR的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着DBR后的一个扇区,其内容如下

引导程序代码:FAT32的DBR引导程序占用420字节,对于没有安装操作系统的分区来说这段程序是没有用处的.
结束标识:DBR的结束标志与MBR,EBR的结束标志相同,为“55 AA”。

(3)FAT表介绍

文件系统分配磁盘空间按簇来分配。因此,文件占有磁盘空间时,基本单位不是字节而是簇,即使某个文件只有一个字节,操作系统也会给它分配一个最小单元:即一个簇。对于大文件,需要分配多个簇。同一个文件的数据并不一定完整地存放在磁盘中一个连续地区域内,而往往会分若干段,像链子一样存放。这种存储方式称为文件的链式存储。为了实现文件的链式存储,文件系统必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继的下一个簇的簇号,对于文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,FAT 表对应表项中记录着它所代表的簇的有关信息:诸如是空,是不是坏簇,是否是已经是某个文件的尾簇等。

定位FAT绝对位置的方法如下:

1、首先从MBR的分区表中得知分区的起始扇区,偏移到此扇区。

2、从DBR的BPB中得知DBR的保留扇区数,FAT表的个数,FAT表的大小。

3、因此FAT1=分区起始扇区+DBR保留扇区,FAT2=分区起始扇区+DBR保留扇区+FAT1。

从上面我们计算出第一个fat表的扇区号在3678扇区,第一个目录的扇区号34816,我们使用winhex查看一下:

第0号表项:0x0FFFFFF8,表示FAT表固定标识
第1号表项:0xFFFFFFFF,不用,默认值
第2号表项:0x0FFFFFFF,根目录所在簇,由于此时只占用1簇,所以是结束标识
下面我们在SD卡里创建一个大于4k(每簇占8个扇区即4k,只有大于4k才占用多簇)文件,重新查看该位置的内容

此时已经看到新增加了三簇内容:该test文件簇链为0x05—>0x06–>0x07(结束),注意簇链结束标识为0x0FFFFFFF,文件大小小于一簇大小的直接占用1簇,以0X0FFFFFFF结束

(4) 数据区

数据区时真正用于存放用户数据的区域,数据区的位置在FAT2的后面,具体定位方式如下;

1、通过MBR中的分区表信息得知分区的起始位置。

2、通过分区中DBR得知DBR的保留扇区数以及FAT表的大小,FAT表的个数。

3、通过上面的信息就可以找到数据区的起始位置,数据区 = 隐藏扇区数+DBR保留扇区+(每个FAT表扇区数*2)。

数据区的类容主要由三部分组成:根目录,子目录和文件内容。在数据区中是以“簇”为单位进行存储的,2号簇被分配给根目录使用。
数据起始扇区=根目录起始扇区号+(簇号-2)x每簇的扇区数
注:FAT表对所有划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,也就是数据区起始位第2簇!FAT表中0和1号表项没有对应物理地址。
前面我们算出第一个目录(根目录)的扇区号34816,我们使用winhex直接跳转34816过去看下:

FAT32文件系统中,分区根目录下的文件和目录都放在根目录区中,子目录中的文件和目录都放在子目录区中,并且每32个字节为一个目录项(FDT),每个目录项纪录着一个目录或文件(也可能是多个目录项记录一个文件或目录),上图所示就是一个目录项。

在FAT32文件系统中,目录项可以分为四类:卷标目录项、“.”和“…”目录项、短文件名目录项、长文件名目录项。
我们分别创建SHUIYUE目录和SHUIYUE.txt文件来看下


FDT第1字节又表明了该文件的状态,它有如下四种取值方式:
a. 00H–目录项的空目录。
b. E5H–表示该目录项曾经使用过,但文件已被删除。
c. 2EH–表示子目录下的两个特殊文件 “. “或 “… “目录项
d. 其它任何字符–表示一个文件名(或目录名)的第一个字符的ASCII码值.
我们来看下SHUIYUE.txt目录项代表的东西

标识长度介绍值deName8字节文件名,不足部分补空格(0x20)0x53 0x48 0x55 0x49 0x59 0x55 0x45 0x20(SHUIYUE)deExtension3字节扩展名,不足部分补空格(0x20)0x54 0x58 0x54(TXT)deAttributes1字节文件属性0x20(存档)deLowerCase1字节系统保留0x10deCTime3字节创建时间0x8c 0x00 0xabdeCDate2字节创建日期0x8d 0x51deADate2字节最后访问的日期0x8d 0x51deHighClust2字节开始簇的高两个字节0x00 0x00deMTime2字节最后修改的时间0x09 0xabdeMDate2字节最后修改的日期0x8d 0x51deLowCluster2字节开始簇的低两个字节0x06 0x00deFileSize4字节文件的大小0xd8 0x21 0x00 0x00

从上面我们可以看出SHUIYUE.txt开始簇为0x06我们查找FAT表:

从第6簇开始,占据了3簇,我们跳到第6簇看下内容,第6簇在数据区起始扇区34816+(6-2)*8=34848

从上可以看出刚好是我们写入的数据,其他可以自己尝试,例如新创建一个不同大小的文件、创建子目录观察数据的变化。

注:
(1)目录所在的扇区,都是以32 Bytes划分为一个单位,每个单位称为一个目录项。

(2)根据文件名及后缀,我们可以分为短目录文件,长目录文件,简单点理解,如果文件名>8 byte 或者后缀名>3, 则为长文件目录,否则为短文件目录

参考文章:
(1)FAT32长文件名短文件名目录项
(2)详解FAT32文件系统
(3)FAT32文件系统格式详解
(4)FAT32文件系统详解
(5)SD卡中FAT32文件格式快速入门(详细图文介绍)
(6)FAT32文件系统SD卡建立MBR引导扇区
(7)FAT32文件系统格式详解(图文针对具体文件存储,分析fat32 SD卡)

本文章仅供学习交流用禁止用作商业用途,文中内容来水枂编辑,如需转载请告知,谢谢合作

微信公众号:zhjj0729

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。