精华内容
下载资源
问答
  • fat

    2014-10-21 13:33:39
    1. FAT The traditional DOS filesystem types are FAT12 and FAT16.Here FAT stands for File Allocation Table: the disk is dividedinto clusters, the unit used by the file allocation,and the FAT describe

    . FAT

    http://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html

    The traditional DOS filesystem types are FAT12 and FAT16.Here FAT stands for File Allocation Table: the disk is dividedinto clusters, the unit used by the file allocation,and the FAT describes which clusters are used by which files.

    Let us describe the FAT filesystem in some detail.The FAT12/16 type is important, not only because ofthe traditional use, but also because it is useful fordata exchange between different operating systems, andbecause it is the filesystem type used by all kinds of devices,like digital cameras.

    1.1 Layout

    First the boot sector (at relative address 0),and possibly other stuff. Together these are the Reserved Sectors.Usually the boot sector is the only reserved sector.

    Then the FATs (following the reserved sectors; the number ofreserved sectors is given in the boot sector, bytes 14-15;the length of a sector is found in the boot sector, bytes 11-12).

    Then the Root Directory (following the FATs; the number of FATsis given in the boot sector, byte 16; each FAT has a numberof sectors given in the boot sector, bytes 22-23).

    Finally the Data Area (following the root directory; the numberof root directory entries is given in the boot sector, bytes 17-18,and each directory entry takes 32 bytes; space is rounded up toentire sectors).

    1.2 Boot sector

    The first sector (512 bytes) of a FAT filesystem is the boot sector.In Unix-like terminology this would be called the superblock. It containssome general information.

    First an explicit example (of the boot sector of a DRDOS boot floppy).

    0000000 eb 3f 90 49 42 4d 20 20 33 2e 33 00 02 01 01 00
    0000020 02 e0 00 40 0b f0 09 00 12 00 02 00 00 00 00 00
    0000040 00 00 00 00 00 00 00 00 00 00 70 00 ff ff 49 42
    0000060 4d 42 49 4f 20 20 43 4f 4d 00 50 00 00 08 00 18
    ...
    
    (See here for thecomplete sector. And also a MSDOS example)

    The 2-byte numbers are stored little endian (low order byte first).

    Here the FAT12 version, that is also the common part of theFAT12, FAT16 and FAT32 boot sectors. See further below.

    Bytes   Content
    0-2     Jump to bootstrap (E.g. eb 3c 90; on i86: JMP 003E NOP.
            One finds either eb xx 90, or e9 xx xx.
            The position of the bootstrap varies.)
    3-10    OEM name/version (E.g. "IBM  3.3", "IBM 20.0", "MSDOS5.0", "MSWIN4.0".
            Various format utilities leave their own name, like "CH-FOR18".
            Sometimes just garbage. Microsoft recommends "MSWIN4.1".)
            /* BIOS Parameter Block starts here */
    11-12   Number of bytes per sector (512)
            Must be one of 512, 1024, 2048, 4096.
    13      Number of sectors per cluster (1)
            Must be one of 1, 2, 4, 8, 16, 32, 64, 128.
            A cluster should have at most 32768 bytes. In rare cases 65536 is OK.
    14-15   Number of reserved sectors (1)
            FAT12 and FAT16 use 1. FAT32 uses 32.
    16      Number of FAT copies (2)
    17-18   Number of root directory entries (224)
            0 for FAT32. 512 is recommended for FAT16.
    19-20   Total number of sectors in the filesystem (2880)
            (in case the partition is not FAT32 and smaller than 32 MB)
    21      Media descriptor type (f0: 1.4 MB floppy, f8: hard disk; see below)
    22-23   Number of sectors per FAT (9)
            0 for FAT32.
    24-25   Number of sectors per track (12)
    26-27   Number of heads (2, for a double-sided diskette)
    28-29   Number of hidden sectors (0)
            Hidden sectors are sectors preceding the partition.
            /* BIOS Parameter Block ends here */
    30-509  Bootstrap
    510-511 Signature 55 aa
    

    The signature is found at offset 510-511. This will be the end ofthe sector only in case the sector size is 512.

    Media descriptor byte

    The ancient media descriptor type codes are:

    For 8" floppies:
    fc, fd, fe - Various interesting formats
    
    For 5.25" floppies:
    Value  DOS version  Capacity  sides  tracks  sectors/track
    ff     1.1           320 KB    2      40      8
    fe     1.0           160 KB    1      40      8
    fd     2.0           360 KB    2      40      9
    fc     2.0           180 KB    1      40      9
    fb                   640 KB    2      80      8
    fa                   320 KB    1      80      8
    f9     3.0          1200 KB    2      80     15
    
    For 3.5" floppies:
    Value  DOS version  Capacity  sides  tracks  sectors/track
    fb                   640 KB    2      80      8
    fa                   320 KB    1      80      8
    f9     3.2           720 KB    2      80      9
    f0     3.3          1440 KB    2      80     18
    f0                  2880 KB    2      80     36
    
    For RAMdisks:
    fa
    
    For hard disks:
    Value  DOS version
    f8     2.0
    
    This code is also found in the first byte of the FAT.

    IBM defined the media descriptor byte as 11111red, where ris removable, e is eight sectors/track, d is double sided.

    Cluster size

    The default number of sectors per cluster for floppies(with FAT12) is

    Drive size Secs/cluster   Cluster size
       360 KB       2             1 KiB
       720 KB       2             1 KiB
       1.2 MB       1           512 bytes
      1.44 MB       1           512 bytes
      2.88 MB       2             1 KiB
    
    The default number of sectors per cluster for fixed disks is(with FAT12 below 16 MB, FAT16 above):
    Drive size Secs/cluster   Cluster size
     <  16 MB       8             4 KiB
     < 128 MB       4             2 KiB
     < 256 MB       8             4 KiB
     < 512 MB      16             8 KiB
     <   1 GB      32            16 KiB
     <   2 GB      64            32 KiB
     <   4 GB     128            64 KiB   (Windows NT only)
     <   8 GB     256           128 KiB   (Windows NT 4.0 only)
     <  16 GB     512           256 KiB   (Windows NT 4.0 only)
    
    Usually people have file systems with average file sizea few KB. With a cluster size of 64 KiB or more the amountof slack (wasted space) can easily become more than halfthe total space. FAT32 allows larger file systemswith a small cluster size:
    Drive size Secs/cluster   Cluster size
     < 260 MB       1           512 bytes
     <   8 GB       8             4 KiB
     <  16 GB      16             8 KiB
     <  32 GB      32            16 KiB
     <   2 TB      64            32 KiB
    

    FAT16

    FAT16 uses the above BIOS Parameter Block, with some extensions:

    11-27   (as before)
    28-31   Number of hidden sectors (0)
    32-35   Total number of sectors in the filesystem
            (in case the total was not given in bytes 19-20)
    36      Logical Drive Number (for use with INT 13, e.g. 0 or 0x80)
    37      Reserved (Earlier: Current Head, the track containing the Boot Record)
            Used by Windows NT: bit 0: need disk check; bit 1: need surface scan
    38      Extended signature (0x29)
            Indicates that the three following fields are present.
            Windows NT recognizes either 0x28 or 0x29.
    39-42   Serial number of partition
    43-53   Volume label or "NO NAME    "
    54-61   Filesystem type (E.g. "FAT12   ", "FAT16   ", "FAT     ", or all zero.)
    62-509  Bootstrap
    510-511 Signature 55 aa
    

    FAT32

    FAT32 uses an extended BIOS Parameter Block:

    11-27   (as before)     
    28-31   Number of hidden sectors (0)
    32-35   Total number of sectors in the filesystem
    36-39   Sectors per FAT
    40-41   Mirror flags
            Bits 0-3: number of active FAT (if bit 7 is 1)
            Bits 4-6: reserved
            Bit 7: one: single active FAT; zero: all FATs are updated at runtime
            Bits 8-15: reserved
    42-43   Filesystem version
    44-47   First cluster of root directory (usually 2)
    48-49   Filesystem information sector number in FAT32 reserved area (usually 1)
    50-51   Backup boot sector location or 0 or 0xffff if none (usually 6)
    52-63   Reserved
    64      Logical Drive Number (for use with INT 13, e.g. 0 or 0x80)
    65      Reserved - used to be Current Head (used by Windows NT)
    66      Extended signature (0x29)
            Indicates that the three following fields are present.
    67-70   Serial number of partition
    71-81   Volume label
    82-89   Filesystem type ("FAT32   ")
    
    The old 2-byte fields "total number of sectors" and"number of sectors per FAT" are now zero; this informationis now found in the new 4-byte fields.

    An important improvement is the "First cluster of root directory"field. Earlier, the root directory was not part of the Data Area,and was in a known place with a known size, and hence was unable to grow.Now the root directory is just somewhere in the Data Area.

    1.3 The File Allocation Table

    The disk is divided into clusters. The number of sectors per clusteris given in the boot sector byte 13.

    The File Allocation Table has one entry per cluster.This entry uses 12, 16 or 28 bits for FAT12, FAT16 and FAT32.

    The first two FAT entries

    The first cluster of the data area is cluster #2.That leaves the first two entries of the FAT unused.In the first byte of the first entry a copy of the media descriptor is stored.The remaining bits of this entry are 1.In the second entry the end-of-file marker is stored.The high order two bits of the second entry are sometimes,in the case of FAT16 and FAT32, used for dirty volume management:high order bit 1: last shutdown was clean;next highest bit 1: during the previous mount no diskI/O errors were detected.

    (Historically this description has things backwards: DOS 1.0 did not havea BIOS Parameter Block, and the distinction between single-sided anddouble-sided 5.25" 360K floppies was indicated by the first byte inthe FAT. DOS 2.0 introduced the BPB with media descriptor byte.)

    FAT12

    Since 12 bits is not an integral number of bytes, we have to specifyhow these are arranged. Two FAT12 entries are stored into three bytes;if these bytes are uv,wx,yz then the entries are xuv and yzw.

    Possible values for a FAT12 entry are:000: free,002-fef: cluster in use; the value given is thenumber of the next cluster in the file,ff0-ff6: reserved,ff7: bad cluster,ff8-fff: cluster in use, the last one in this file.Since the first cluster in the data area is numbered 2,the value 001 does not occur.

    DOS 1.0 and 2.0 used FAT12. The maximum possible size of a FAT12filesystem (volume) was 8 MB (4086 clusters of at most 4 sectors each).

    FAT16

    DOS 3.0 introduced FAT16. Everything very much like FAT12,only the FAT entries are now 16 bit. Possible values for FAT16 are:0000: free, 0002-ffef: cluster in use; the value given is thenumber of the next cluster in the file, fff0-fff6: reserved,fff7: bad cluster, fff8-ffff: cluster in use, the last one in this file.

    Now the maximum volume size was 32 MB, mostly since DOS 3.0 used16-bit sector numbers. This was fixed in DOS 4.0 that uses32-bit sector numbers. Now the maximum possible size of aFAT16 volume is 2 GB (65526 clusters of at most 64 sectors each).

    FAT32

    FAT32 was introduced in Windows 95 OSR 2. It is not supported by Windows NT.Everything very much like FAT16, only the FAT entries are now 32 bitsof which the top 4 bits are reserved. The bottom 28 bits have meaningssimilar to those for FAT12, FAT16.For FAT32:Cluster size used: 4096-32768 bytes.

    Microsoft operating systems use the following rule to distinguishbetween FAT12, FAT16 and FAT32. First, compute the number of clustersin the data area (by taking the total number of sectors, subtractingthe space for reserved sectors, FATs and root directory, and dividing,rounding down, by the number of sectors in a cluster).If the result is less that 4085 we have FAT12. Otherwise, if it isless than 65525 we have FAT16. Otherwise FAT32.

    The maximum file size on a FAT32 filesystem is one byte less than 4 GiB(4294967295 bytes).

    Microsoft operating systems use fff, ffff, xfffffff as end-of-clusterchainmarkers, but various common utilities may use different values.Linux has always used ff8, fff8, but it now appears that someMP3 players fail to work unless fff etc. is used. Since 2.5.40this is also what Linux uses.

    1.4 Directory Entry

    An example (6 entries on the same MSDOS floppy):

    0009728 49 4f 20 20 20 20 20 20 53 59 53 27 00 00 00 00  IO      .SYS
    0009744 00 00 00 00 00 00 08 5d 62 1b 1d 00 16 9f 00 00
    0009760 4d 53 44 4f 53 20 20 20 53 59 53 27 00 00 00 00  MSDOS   .SYS
    0009776 00 00 00 00 00 00 08 5d 62 1b 6d 00 38 95 00 00
    0009792 43 4f 4d 4d 41 4e 44 20 43 4f 4d 20 00 00 00 00  COMMAND .COM
    0009808 00 00 00 00 00 00 07 5d 62 1b b8 00 39 dd 00 00
    0009824 44 42 4c 53 50 41 43 45 42 49 4e 27 00 00 00 00  DBLSPACE.BIN
    0009840 00 00 00 00 00 00 08 5d 62 1b 27 01 f6 fc 00 00
    0009856 4d 53 44 4f 53 20 20 20 20 20 20 28 00 00 00 00  MSDOS
    0009872 00 00 00 00 00 00 1a 88 99 1c 00 00 00 00 00 00
    0009888 46 44 49 53 4b 20 20 20 45 58 45 20 00 00 00 00  FDISK   .EXE
    0009904 00 00 00 00 00 00 36 59 62 1b 02 00 17 73 00 00
    
    Bytes   Content
    0-10    File name (8 bytes) with extension (3 bytes)
    11      Attribute - a bitvector. Bit 0: read only. Bit 1: hidden.
            Bit 2: system file. Bit 3: volume label. Bit 4: subdirectory.
            Bit 5: archive. Bits 6-7: unused.
    12-21   Reserved (see below)
    22-23   Time (5/6/5 bits, for hour/minutes/doubleseconds)
    24-25   Date (7/4/5 bits, for year-since-1980/month/day)
    26-27   Starting cluster (0 for an empty file)
    28-31   Filesize in bytes
    

    We see that the fifth entry in the example above is the volume label,while the other entries are actual files.

    The "archive" bit is set when the file is created or modified.It is cleared by backup utilities. This allows one to doincremental backups.

    As a special kludge to allow undeleting files that were deletedby mistake, the DEL command will replace the first byte of thename by 0xe5 to signify "deleted".As an extraspecial kludge, the first byte 0x05 in a directory entrymeans that the real name starts with 0xe5.

    The first byte of a name must not be 0x20 (space).Short names or extensions are padded with spaces.Special ASCII characters 0x22 ("), 0x2a (*), 0x2b (+), 0x2c (,),0x2e (.), 0x2f (/), 0x3a (:), 0x3b (;), 0x3c (<), 0x3d (=),0x3e (>), 0x3f (?), 0x5b ([), 0x5c (\), 0x5d (]), 0x7c (|)are not allowed.

    The first byte 0 in a directory entry means that the directoryends here.

    Subdirectories start with entries for . and .., but the root directorydoes not have those.

    VFAT

    In Windows 95 a variation was introduced: VFAT.VFAT (Virtual FAT) is FAT together with long filenames (LFN),that can be up to 255 bytes long. The implementation is anugly hack. These long filenames are stored in special directory entries.A special entry looks like this:

    Bytes   Content
    0       Bits 0-4: sequence number; bit 6: final part of name
    1-10    Unicode characters 1-5
    11      Attribute: 0xf
    12      Type: 0
    13      Checksum of short name
    14-25   Unicode characters 6-11
    26-27   Starting cluster: 0
    28-31   Unicode characters 12-13
    
    These special entries should not confuse old programs, since theyget the 0xf (read only / hidden / system / volume label) attributecombination that should make sure that all old programs will ignore them.

    The long name is stored in the special entries, starting with the tail end.The Unicode characters are of course stored little endian.The sequence numbers are ascending, starting with 1.

    Now an ordinary directory entry follows these special entries,and it has the usual info (file size, starting cluster, etc.),and a short version of the long name.Also the unused space in directory entries is used now:bytes 13-17: creation date and time (byte 13: centiseconds 0-199,bytes 14-15: time as above, bytes 16-17: date as above),bytes 18-19: date of last access.(And byte 12 is reserved for Windows NT - it indicates whetherthe filename is in upper or in lower case; bytes 20-21 are reservedfor OS/2: it stores there the index in EA DATA.SF, the file containingthe extended attributes of all files. CYGWIN also uses a file EA DATA.SF.)

    Old programs might change directories in ways that can separatethe special entries from the ordinary one. To guard against thatthe special entries have in byte 13 a checksum of the short name:

    int i; unsigned char sum = 0;
    
        for (i = 0; i < 11; i++) {
            sum = (sum >> 1) + ((sum & 1) << 7);  /* rotate */
            sum += name[i];                       /* add next name byte */
        }
    
    An additional check is given by the sequence number field.It numbers the special entries belonging to a single LFN 1, 2, ...where the last entry has bit 6 set.

    The short name is derived from the long name as follows:The extension is the extension of the long name, truncated to lengthat most three. The first six bytes of the short name equal the firstsix nonspace bytes of the long name, but bytes +,;=[], that are not allowedunder DOS, are replaced by underscore. Lower case is converted toupper case. The final two (or more, up to seven, if necessary)bytes become ~1, or, if that exists already, ~2, etc.,up to ~999999.

    VFAT is used in the same way on each of FAT12, FAT16, FAT32.

    1.5 FSInfo sector

    FAT32 stores extra information in the FSInfo sector, usually sector 1.

    Bytes   Content
    0-3     0x41615252 - the FSInfo signature
    4-483   Reserved
    484-487 0x61417272 - a second FSInfo signature
    488-491 Free cluster count or 0xffffffff (may be incorrect)
    492-495 Next free cluster or 0xffffffff (hint only)
    496-507 Reserved
    508-511 0xaa550000 - sector signature
    

    展开全文
  • Conman fat

    2019-10-24 21:03:13
    Conman fat
  • FAT文件系统 FAT文件系统 FAT文件系统 FAT文件系统
  • RFAT 得名于需要健壮的 FAT 实现。 手头的原始问题是在具有有限 RAM 的嵌入式系统上实现低延迟日志记录。 虽然有许多可用的替代方案,但似乎没有一个特别适合 SDCARD,或者处理 SPI/SDIO 总线连接可能容易出错的事实...
  • FAT及FATFS资料合集FAT32简单教材文件系统详解FATFS浅谈FAT32中文版: FAT32中文版.pdf FAT32文件系统详解.pdf FAT32简单教材.pdf FatFs使用说明—基于SmartARMCortexM3-1700.pdf fatfs官方源码及学习网址.txt FATFS...
  • fat16:fat16模拟文件系统
  • 文件系统 , FAT12 FAT16 FAT32讲解
  • FAT文件系统中文文档(FAT12、FAT16、FAT32) 很详细的介绍了FAT文件系统,这是一份翻译文档。 文件格式:PDF(非扫描版)
  • FATFAT-SF帧数据应用程序
  • FAT12:用C语言实现FAT 12系统仿真的实现
  • fat 学习笔记

    2017-07-27 11:25:32
    fat 学习整理,不错的快速入门FAT学习
  • 根据自己电脑的fat,fat32分区来学习fat,fat32文件系统
  • fat工作原理

    2017-10-30 21:40:56
    fat文件系统原理,详细描述fat文件系统的设计实现等各种细节。
  • SdFat版本2支持FAT16 / FAT32和exFAT SD卡。 它主要与FAT16 / FAT32卡的SdFat版本1向后兼容。 exFAT支持大于4GB的文件,因此对于支持exFAT的类,文件大小和位置均为uint64_t类型。 exFAT具有FAT16 / FAT32中不...
  • FAT32

    千次阅读 2019-04-01 11:05:29
    FAT32 DBR及保留扇区 FAT1 FAT2 数据区 DBR及保留扇区:DBR的含义是DOS引导记录,也称为操作...

    FAT32

     

     

     

    DBR及保留扇区

     

     

     

     

    FAT1

     

     

     

    FAT2

     

     

     

    数据区

     

     

    • DBR及保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。
    • FAT1FAT的含义是文件分配表,FAT32一般有两份FATFAT1是第一份,也是主FAT
    • FAT2FAT2FAT32的第二份文件分配表,也是FAT1的备份。
    • DATA:数据区,是FAT32文件系统的主要区域,其中包含目录区域。

     

    FAT32文件系统的DBR分析

    1:跳转指令

    EB 58 90 共3个字节,跳转指令本身占用2字节,它将程序执行流程跳转到引导程序处。例如,当前DBR中的“EB 58”,就是代表汇编语言中的“JMP 58”。需要注意该指令本身占用2个字节,计算跳转目标地址时该指令的下一个字节为基准,所以实际上执行的下一条指令应该位于 5A。紧接着跳转是一条空的指令NOP(90H)

    2:OEM代号

            4d 53 44 4f 53 35 2e 30(MSDOG5.0)占用8个字节,这个说明了微软不同的操作系统版本。修改这个值不影响文件系统的使用。

    3:BPB(BIOSParameter Block,BIOS参数块)

             BPB从DBR的第12个字节开始,占用79个字节,其又分为25字节的分区参数块(BPB)和52字节的扩展分区参数块(扩展BPB),记录了有关该文件系统的重要信息,其中各个参数的含义见下表

     

    偏移

    长度(B)

    字段名与定义

    说明

    BPB

    0X0B

    2

    每扇区字节数

    记录每个逻辑扇区的大小,其常见的值为512,但是并不是固定的值。该值可以由程序定义,合法值包括512、1024、2048、4096。

    0X0D

    1

    每簇扇区数

    记录着文件系统的簇大小,即由多少个扇区组成一个簇。簇是FAT12,FAT16及FAT32文件系统下数据的最小存储单元,一个簇由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂,如1,2,4,8,16,32,64,128.在Windows 2000以前族最大值为64扇区,之后最大值为128。在FAT文件系统中,所有的簇是从2开始编号,每个簇都有一个自己的地址编号,但是所有的簇都位于数据区,在数据区之前没有簇。

    0X0E

    2

    DOS保留扇区数

    DBR到FAT1表之间的扇区数,或者说是FAT1的开始扇区号,对于FAT32文件系统来说,该值的范围是32扇区到38扇区之间。

    0X10

    1

    FAT个数

    一般为2

    0X11

    2

    未用

    FAT32必须等于0FAT12/FAT16为根目录中目录的个数

    0X13

    2

    未用

    FAT32必须等于0,FAT12/FAT16为扇区总数

    0X15

    1

    介质描述符

    描述磁盘介质的参数,根据磁盘性质的不同,取不同的值。0xF8标准值,可移动存储介质,常用 0xF0

    0X16

    2

    未用

    FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。

    0X18

    2

    每磁道扇区数

    一般其值为63

    0X1A

    2

    磁头数

    一般为255

    0X1C

    4

    隐藏扇区数

    是MBR到DBR之间的扇区数,对于扩展分区中逻辑驱动顺来说,是其EBR到DBR。可以为0。

    0X20

    4

    分区扇区总数

    分区的总扇区数,也就是FAT32分区的大小

    扩展BPB

    0X24

    4

    每FAT扇区数

    FAT表占用扇区数

    0X28

    2

    标记

    FAT2是否可用,2为可用,此域FAT32 特有

    0X2A

    2

    版本

    FAT32版本号0.0,FAT32特有

    0X2C

    4

    根目录首簇号

    分区在格式化的时候,格式化程序会在数据区中指派一个簇作为FAT32的根目录的开始,并把该簇号记录在BPB中。通常都是把数据区中的第一簇分配给根目录使用,也就是2号簇。

    0X30

    2

    文件系统信息扇区号

     FAT32文件系统在DBR的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个可用的空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟在DBR之后的一个扇区。FSINFO(文件系统信息扇区)扇区号1,该扇区为操作系统提供关于空簇总数及下一可用簇的信息

    0X32

    2

    DBR备份扇区号

    FAT32文件系统在DBR的保留扇区中安排了一个DBR的备份,一般在6号扇区,也就是分区的第7个扇区,该备份扇区与原DBR扇区的内容完全一样,如果原DBR遭到破坏,可以用备份扇区号修复。

    0X34

    12

    保留

     

    0X40

    1

    BIOS驱动器号

    这是BIOS的INT 13H所描述的设备号码,一般硬盘为80H,一般软盘为00H等

    0X41

    1

    未用

     

    0X42

    1

    扩展引导标记

    用来确认后面的三个参数是否有效,FAT为29H

    0X43

    4

    卷序列号

    磁盘序列号,通常为一随机数

    0X47

    11

    卷标

    用户设置的卷标ASCII,如果没有则4E 4F 20 4E 41 4D 45 20 20 20 20 即NO NAME。如果建立文件系统的时候指定了卷标,会保存在此

    0X52

    8

    文件系统类型

    使用ASCII码记录当前分区的文件系统类型,46 41 54 33 32 20 20 20即FAT32

     

    4:引导程序

            Fat32的DBR引导程序占用420个字节,在98 之前的系统之下,这段代码负责完成DOS三个系统文件的装入; 2000之后的系统中,其负责完成将系统文件NTLDR装入。对于一个没有操作系统的分区来讲,这段代码是没有作用的。

    0x5A~0x1FD:90~509共410字节,未使用。该部分没有明确的用途。

     

    系统启动步骤:

    在系统启动过程中, 磁盘的主引导记录MBR 中的引导记录 找到可引导扇区引导代码并将控制权交给它 由它找到适当的操作系统文件并进行加载。

    注意: 一个FAT 卷即使不是可引导文件系统,也存在引导代码。

     

    5:结束标志

    签名标志0xAA55

     

     

     

    FSINFO 扇区解析

    1、 FSINSO 信息扇区( 保留区的1号扇区)

    位置:一般位于文件系统的 1 扇区。

    作用:简言之就是记录文件系统的当前信息, FAT32 在保留扇区中添加了一个FSINFO扇区, 用以记录文件系统中的空闲簇的数量以及下一个可用簇的簇号等信息,一共操作系统作为参考。

    2、 FSINFO 信息扇区结构

    偏移

    字节数

    说明

    00

    4

    扩展引导标志 52 52 61 41

    04

    480

    未使用

    1E4

    4

    FSINFO签名72 72 41 61

    1E8

    4

    空闲簇数

    1EC

    4

    下一个可用簇号

    1F0

    14

    未使用

    1EE

    2

    55 AA 结束标志

     

    提示: 通常情况下,文件系统的2号扇区结尾也会被设置“55AA”标识 6号扇区会有一个引导扇区的备份 7号扇区应该是一个备份FSINFO 信息扇区,但很多时候与1号扇区的内容不完全相同;8号扇区可以看做是2号扇区的备份,他的结尾也会有一个“55AA” 标识。

     

     

    FAT表解析

    1、 FAT 表概述

    位置: 紧跟在文件系统的“保留区”之后 ; 有两个数据结构完全相同的FAT(FAT,File Allocation Tbale 文件分配表)组成。

     

    作用: FAT表项,描述文件系统内的簇分配状态,说明文件系统内数据所分配的连续簇的顺序关系(即表明文件或目录的下一簇的序号)。

     

    数量: 通常情况下一个FAT 文件系统会有两个FAT 表, 但有时候也会允许只有一个FAT 表, FAT 表的具体个数记录在引导扇区的偏移 0x10 字节处。

    位置: 因为FAT区位于文件系统的保留区之后,所以FAT1在文件系统中的位置可以通过引导记录中偏移0x0E~0x0F 字节处的“保留扇区”数得到。

     

    FAT1表偏移 = 保留扇区数 * 每扇区字节数

     

    FAT2 紧跟在FAT1之后, 它的位置可以通过FAT1的位置加上每个FAT 表的大小扇区数获得。

     

    FAT2表的偏移 = FAT1表偏移+FAT表的大小

    = (保留扇区数 + FAT表扇区数) * 每扇区字节数

     

    FAT 表中记录了每个文件的簇链结构;

    FAT 表中记录的与数据区簇对应的表项,从0号标记开始至当前数据区所分配的簇的最大数值,记录簇信息到FAT 项;但是注意:其中 0号~1号簇的值都是操作系统预先不留设定的特殊标记,而数据区的起始簇是2号簇。

     

    2、FAT 表的特性

     

    表项数值

    对应含义

    0x00000000

    空闲簇,即表示可用

    0x00000001

    保留簇

    0x00000002 - 0x0FFFFFEF

    被占用的簇,其值指向下一个簇号

    0x0FFFFFF0 - 0x0FFFFFF6

    保留值

    0x0FFFFFF7

    坏簇

    0x0FFFFFF8 - 0x0FFFFFFF

    文件最后一个簇

    表项数值含义

     

    FAT 表由一些列大小相等的表项组成,有如下特性:

     

    FAT32 中每个簇的状态,使用32bit(4字节)记录在FAT表中。 FAT 表中的所有字节位置以 4个字节为单位进行划分;并以所有划分后的位置由0进行地址编号。“0号 和 1号”地址被系统保留并存储特殊标识内容。从 2号 地址开始, 每个地址对应于数据区的簇号, FAT 表中的地址编号与数据区中的簇号相同。 称FAT 中的这些四字节一组划分的项的地址为 FAT 表项, FAT表项中记录的值为FAT 表项值。

     

    当文件系统创建时(就是格式化操作时), 分配给FAT 区域的空间将会被清空, 在FAT1与FAT2 的0号和1号表项写入特定值。 由于创建文件系统的同时,也会创建根目录, 也就是为根目录分配了一个簇空间,通常为2号簇,所以2号簇所对应的“2号FAT表项”也会被写入一个结束标记

     

    如果某个簇未被使用,他所对应的FAT 表项内的FAT 表项值即用0进行填充,表示该FAT 表项所对应的簇未被分配使用

     

    当某个簇被分配使用时,那么他所对应的FAT表项的值为文件的下一个存储文件的簇号。 如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,对于FAT32 而言,代表文件结束的FAT表项值为0x0FFFFFFF

     

    如果某个簇存在坏扇区,则整个簇会用FAT表项值 0x0FFFFFF7 标记为坏簇,不再使用,这个坏簇标记就记录在它所对应的FAT表项中。

     

    ·由于簇号起始于2, 所以FAT表的0号表项与1号表项不予任何簇对应。 FAT32 的0号表项值总是“F8FFFF0F”

    注意: 可以搜索扇区偏移0字节处的该值(F8FFF0F)以查找FAT表。

     

    1号表项可能被用于记录“脏标志”, 以说明文件系统没有被正常卸载或者磁盘表面存在错误。 不过此值似乎不重要,正常情况下,1号表项值“FFFFFFFF”或“FFFFFF0F”。

     

    项内容填写规则:

     

          在文件系统中新建文件时,如果新建的文件只有一个簇,为其分配的簇所对应的FAT表项将会被写入结束标记。如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一个簇的簇号,在最后一个簇对应的FAT 表项中写入结束标记。

     

    新建目录时,只为其分配一个簇的空间,对应的FAT 表项中写入结束标记。当目录增大超过一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT 表中为其建立FAT 表链以描述它所占用的簇的情况。

     

    对文件或目录进行删除操作时,他们所对应的FAT 表项将会被清空,设置为0以表示其所对应的簇处于未分配的状态。

     

    3、 FAT表的使用

     

    一个文件的"起始簇号"记录在它的目录项中, 该文件的 "其他簇" 则用一个簇连结构记录在FAT 表中。

     

          如果一个簇所对应的FAT表项的表项值为非零, 则表明该簇已经被分配使用了,但是这时表项值可能为两种情况,一个是一个文件的下一个簇号值,也有可能是一个文件的结束标记0x0FFFFFFF,或者是一个坏簇标记0x0FFFFFF7 。

    如果要寻找一个文件的下一个簇,只需要查看该文件的目录项中描述的起始簇号所对应的FAT项,如果该文件只有一个簇,则此处的值为一个结束标记0x0FFFFFFF;如果该文件不只一个簇,则此处的值是它的下一个簇的簇号。

     

    查询簇连接结构模拟步骤:

     

    当我们要寻找某个文件时, 首先从该文件的“目录项”中获取该文件的第一“簇”的簇号,然后根据“第一簇”的“簇号 N”,然后根据N 从FAT区的FAT表找出N簇号所对应的FAT 表项,查看FAT 表项的内容:

    若是文件结束,该表项值为 0x0FFFFFFF; 若是没有结束,而该文件的大小超出一个簇,则N所对应的FAT表项的表项值为该文件下一个簇的簇号,然后再找到下一个簇号N+1 所对应的FAT表项,查看其表项值,依次类推,就推出了一个文件在FAT表中的 簇链连接结构; 也或者表项值为 0xFFFFFFF7 坏簇标识。

     

    其他

    查找FAT 表项: 要找到一个簇的FAT 表项,只要用他的 簇号乘以每个FAT 表项的字节数即可 。对于FAT32而言,每个FAT 表项占用4个四字节, 如果我们寻找9号簇的表项位置,则用 4*9=36,也就是说位于FAT 表内偏移36(0x24)字节处。

     

    注意:

    WinHex 提供了直接跳转到某个指定FAT 表项的功能。

     

    文件系统大小的上限值却绝育FAT 项的大小。 簇链中的每个FAT 项记录着下一个簇的簇地址,FAT 项所能表示的数字有一个上限,这个上限也就是文件系统中的最大簇号。 FAT 32文件系统的FAT 项只使用了32bit 中的28bit ,因此只能描述 268435456个簇(实际上还要考略小于这个值,因为这其中还包含了结束标志及坏簇标志的保留值)。

     

    操作系统通过检测FAT 表中的表项来确定文件系统中的各个簇是否被分配使用。当我们在Windows 下右击某个FAT 分区查看其属性时,显示的已用空间和未用空间就是根据FAT 表统计而来的。

     

     

     

    数据区分析

     

    作用: FAT32 的“数据区域”是真正用来存储用户数据的区域。 数据区域紧跟在FAT 区域之后,数据区域被划分为一个个的簇,所有的簇从2号开始编码,也就是说2号簇就是数据区域的起始位置。数据区的内容主要由三部分组成:根目录,子目录和文件内容。在数据区中是以“簇”为单位进行存储的,2号簇被分配给根目录使用。

     

    1、根目录

     

    虽然原则上FAT32 允许根目录位于数据区中的任何位置,但是“通常情况”下位于“2号簇”。也就是说根目录位于数据区域的起始位置。

     

    定位根目录

    首先要明确: 在FAT文件系统中,寻找第一簇(即2号簇)的位置是也就是寻找数据区的开始位置,并不是件简单的事情,因为它不是位于文件系统的起始处,而是位于数据区域的起始处。数据区域之前有保留区域和FAT 区域, 这两个区域都不使用FAT 表进行管理。因此,数据区以前的区域只能使用扇区地址(逻辑扇区地址),而无法使用簇地址。所以说,并不是每个逻辑卷地址都相应的有一个“逻辑文件系统地(内部以簇为单位)址”,FAT 系统就是个特别的例子。数据区的偏移如下计算可得:

     

    数据区偏移 = (保留扇区数 +  FAT表扇区数 * FAT表个数(通常为2)

    + (起始簇号-2) * 每簇扇区数) * 每扇区字节数

     

           所以一般情况下,数据区的开始为根目录。

    根目录分析

    作用: 根目录在文件系统创建时即已被创建,其目的就是存储“子目录”(也称为文件夹)或 文件的“目录项”。

     

    目录项大小:每个目录项的大小为 “32个字节”。

     

    在文件系统刚刚创建,还没有存储任何数据时,根目录下没有任何内容,文件系统只是为根目录分配了一个簇的空间(通常为2号簇),将结束标记0x0FFFFFFF 写入该簇对应的FAT 表项,表示该簇已经被分配使用。这时候根目录分配的空间没有任何内容。 但是如果创建文件系统时指定卷标,则会在根目录下为其建立一个卷标目录项,该目录项占用“根目录”中的第一个目录项位置。

     

    在根目录下新建目录或文件时,其实就是在为根目录分配的簇中为其建立目录项,如果需要则在未分配空间为其分配空间已存储数据内容。

     

    目录项的基本特性

     

    不管是根目录下还是子目录下的目录项,都有以下基本特性:

     

    1. 为文件或子目录分配的第一个簇的簇号,记录在它的目录项中,其他后续簇则由“FAT 表”中的“FAT表链”进行跟踪。

     

    1. 目录项中除了记录文件或子目录的第一个簇(起始簇号)外,还记录它的名字、大小(子目录没有大小)、时间等元数据信息。

     

    1. 每个子目录或文件除了有一个短文件名目录项外,还会有一个长文件名目录项。

     

    1. 短文件名目录项固定占用32个字节,长文件名目录项根据需要占用1个或若干个32字节。

     

    1. 对于同一个子目录或文件,它的长文件名目录放在他的短文件名目录项之前,如果长文件名目录项占用多个32字节,则按照倒序存放于短文件名目录项之前。

     

    2、子目录

     

    定义: 所有除根目录以外的目录度都称为子目录,不管是根目录的子目录,还是根目录的子目录的子目录。

     

    过程: 子目录是在存储过程中根据用户需要建立的,随着目录建立的同时,会在为其分配的簇空间开始处建立“两个目录项”来描述 “子目录本身和其父目录” 的信息,以使父子目录间建立起联系。

     

    FAT32文件系统中,在创建文件系统时就创建了根目录并且分配存储空间之外,其他所有目录只有在使用过程中根据需要建立。新建一个子目录时,在其父目录建立目录项,在空闲空间中为其分配一个簇,并对簇清零操作,同时将这个簇号记录在它的目录项。

     

    创建子目录时在为其父目录分配的簇中建立目录项,目录项描述了该子目录的起始簇号; 在为子目录建立目录项的同时,也在为子目录分配的簇中,使用前两个目录项描述他与父目录的关系。

     

    提示: 子目录的目录项中并不描述子目录的大小,要想知道子目录所占用的空间大小,可以从他的目录项中获得他的起始簇号并跟踪它的FAT 表链直到遇到结束标记为止。

     

    3、总结:

     

    目录项: 32字节长(短名称目录项32字节,长名称目录项1个或多个32字节;长名称目录项在前;若是长名称目录项长度为多个32字节则倒序排列,依然位于读文件名目录项前) 、 每个目录或者文件(文件夹)都有与其对应的目录项 、 作用(记住目录或文件夹的起始簇号)以及一些文件大小,文件名 等信息

     

    根目录

     

    位置:FAT32 文件系统的根目录位于文件系统的数据区的第一簇(2号簇,也就是数据区的起始簇)

     

    根目录创建时期: 当创建文件系统过程中,自动创建根目录(若当下根目录中未创建文件以及目录,则2号簇所对应的FAT 表项值为 0x0fffffff结束标记)

     

    根目录作用:存储根文件系统中子目录以及文件的目录项。

     

    文件系统中除去根目录以外,其他目录是子目录;目录与在其下创建的目录为父子关系;

     

    根目录创建子目录或文件的意义: 在根目录中创建文件或子目录实质含义是在为根目录分配的簇中创建子目录/文件的目录项。

     

    根目录创建子目录过程:  除根目录是是在创建文件系统时便创建完成外,(其他非根目录的均为)子目录,所有的子目录都是要在使用时才创建,子目录创建时同时在其为根目录中分配的簇中创建了子目录的目录项,并且同时在为该子目录分配的簇中创建目录项(使用前两个目录项描述该子目录与其父目录之间的关系);在子目录中创建下一级子目录或文件时,在为该子目录分配的簇中创建目录项,便需从“第三个目录项” 向后排序了。

     

     

    短文件名目录项

    1. 短文件名目录项参数

           目录区是由一个个目录项构成,类似于FAT表。其中每一个目录项占用32个字节,可以是代表长文件名目录项、文件目录项、子目录项等。对于短文件名格式的目录项,其参数的含义如下所示:

    https://images0.cnblogs.com/i/545535/201408/082122503812500.jpg

    FAT32短文件名目录项参数表

     

    1. 参数解释

    时间格式:占2byte  

    5位:代表小时 

    6位:代表分钟

    5位:代表秒的1/2

    日期格式:占2byte

    7:代表从1980年开始的年数

    4:代表月份

    5:代表日期

     

    文件起始地址偏移

     

    文件起始地址   =   (保留扇区数 + FAT表扇区数 * FAT表个数+

       (文件起始簇号-2)*每簇扇区数)*每扇区字节数

     

    文件名大小写:

    FAT32根据文件目录项判断文件名大小写的方法(仅限8.3命名规则):

    文件目录项0CH字节的值:

    1. 此值为18H时,文件名和扩展名都小写。

    2. 此值为10H时,文件名大写而扩展名小写。

    3. 此值为08H时,文件名小写而扩展名大写。

    4. 此值为00H时,文件名和扩展名都大写。

     

    长文件名目录项

    1. 长文件名目录项参数     

       支持支持长文件名是 FAT32的一个很重要的特性。长文件名也是记录在目录项当中的,区别与短目录项的是,前者可能会占据好几个目录项。为了兼容低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址。不支持长文件名的OS或程序会忽略它认为不合法的短文件名字,而支持长文件名的OS或程序则会以长文件名为显式项来记录和编辑,并隐藏起短文件名。

    当创建一个长文件名文件时,系统会自动加上对应的短文件名,其原则如下:

        (1)、取长文件名的前6个字符加上"~1"形成短文件名,扩展名不变。

        (2)、如果已存在这个文件名,则符号"~"后的数字递增,直到5。

    那么系统是如何判断当前目录项是短文件名目录项呢还是长文件名目录项,这里关键是看目录项的第12个字节的值,如果为0x0F时则系统认为是长目录项。而如果是旧版本的系统看到第12个字节是0x0F则认为是异常而忽略掉。这里可以回过头去看一下短文件名目录项,第12个字节是文件属性字节,0x0F即为全1是无效的,所以系统认为是异常。系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项。所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中,以防与其他文件名混淆。

     

    注意:长文件名都是以unicode码存储。即每个字符占两个字节。每个长目录项可以最多存储长文件名的13个字符。文件名的位置也是不连续的。

     

    https://images0.cnblogs.com/i/545535/201408/082156054751714.jpg

    u盘的根目录为JING,有两个文件第一个0123456789ABCDEFGHIJK.txt 第二个

    abcdefg.txt 都是空文件。

    由于长文件名长度为25(包括扩展名),所以需要2个长目录项。包括它本身的短目录项,共3个目录项。

    注意:长文件名需要有结束字符0000,之后没有用的都置FFFF。否则会出现错误。如果刚好是13的倍数,则不可以用结束符0000

     

    校验值计算:

    unsigned char ChkSum (unsigned char *pFcbName)

    {

    short FcbNameLen;

    unsigned char Sum;  //必须为无符号型.

    Sum = 0;

    for (FcbNameLen=11; FcbNameLen!=0; FcbNameLen--)

    {

    Sum = ((Sum & 1) ? 0x80 : 0) + (Sum >> 1) + *pFcbName++;

    }

    return (Sum);

    }

    校验值在同一个文件名的每个长文件目录项都是一样的,因为都是计算该长文件名的校验值。校验的都是其短文件名目录中的内容,即校验其文件名的前6个字符加上~1和扩展名共11个字符长度。如上图为3a,其校验的内容为“012345~1TXT”共11个字符。

     

    FAT32删除文件

    FAT32文件系统在删除文件的时候,仅仅是对其文件名进行处理,对于内容是不做任何处理的。对文件名的处理,就是把其所相关的所有Directory Entry的第一个byte都置为0xE5,此时就认为该文件已经被删除了。

    展开全文
  • 尝试读写FAT 这个程序是一个实验。没有操作保证。 读取和写入 FAT。目前,仅支持 FAT16。 我假设首先具有 MBR 的磁盘类型。 参考信息 截至 2015 年 2 月 14 日,请注意“隐藏属性”和“系统属性”已颠倒。 位 1 ...
  • FAT32-源码

    2021-02-16 19:39:11
    FAT32
  • fat16-fuse:FAT16 FUSE文件系统,用C编写
  • FAT开发资料_FAT文档

    2009-10-15 18:01:27
    FAT开发资料, FAT文档, FAT资料
  • FAT12、FAT16、FAT32与NTFS的区别与利弊,讲解详细。
  • fat_imgen是一个实用程序,可用于创建和修改FAT12软盘映像。
  • fat32格式化工具(FAT32formatter) 绿色免费版
  • dosfstools由mkfs.fat,fsck.fat和fatlabel程序组成,用于创建,检查和标记FAT系列文件系统。 dosfstools在GNU GPL版本3或更高版本下获得许可。 有关详细信息,请参见文件COPYING 。 建造要求 测试套件需要工具xxd ...
  • 详细介绍了FAT文件系统(包括FAT12,FAT16,FAT32),不知是哪位牛人写的电子书详细介绍了FAT文件系统(包括FAT12,FAT16,FAT32),不知是哪位牛人写的电子书详细介绍了FAT文件系统(包括FAT12,FAT16,FAT32),不知是哪位牛人写...
  • FAT文件系统

    2017-04-01 11:25:26
    讲述FAT文件系统工作原理
  • FAT32格式 FAT32格式

    2008-12-07 03:43:52
    FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式FAT32格式
  • regex2fat 您是否曾经想过匹配正则表达式,但是您所拥有的只是fat32驱动程序? 是否曾经想过将正则表达式DFA序列化为30亿种设备使用的最广泛支持的格式之一? 不用担心,使用regex2fat变得比以往任何时候都容易!...
  • FAT32文件系统

    2018-10-06 21:23:26
    FAT32文件系统FAT32文件系统FAT32是个非常有功劳的文件系统,Microsoft成功地设计并运用了它,直到今天NTFS铺天盖地袭来的时候,FAT32依然占据着Microsoft Windows文件系统中重要的地位。FAT32最早是出于FAT16不支持...
  • NEC单片机_78F00547控制CH375芯片程序(CH375_FAT12_FAT16_FAT32_查找文件读出内容并且改写文件)
  • FAT32中文版 FAT32中文版 FAT32中文版

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,349
精华内容 46,939
关键字:

fat