FAT文件系统是什么?

FAT是一个由微软发明的简单的文件系统,一般在Linux系统和Windows系统都支持这种文件系统。

FAT文件系统的格式

一个FAT文件系统分为四个不同的部分。

  • 第一部分:保留扇区,第一个保留扇区(0号扇区)是记录磁盘的引导记录,分区信息等。

  • 第二部分:文件分配表(File allocation Table, FAT),由两部分组成,FAT1和FAT2,FAT2是FAT1的备份,一般情况下不会用到。一般情况下前两簇(0簇和1簇)是保留簇。

文件分配表里会记录簇的使用信息,以及簇列表。文件分配的最小单位是簇,簇标记大小为连续的4个字节,簇的标记有五种:

空闲簇(作用:说明这个簇是没有被占用的。)
坏簇标记0xF7FFFF(作用:说明这个簇不可用,避免将信息写到坏簇上,使得数据丢失。)
簇占用标记0xFFFFFF0F(其实表示该簇是一个文件的结束。)
下一簇的位置(每个文件可能有好多簇表示,用前一簇记录下一簇的位置,达到对整个文件的记录)

  • 第三部分:根目录区域,相当于一个目录表,用来记录文件和目录信息的。

  • 第四部分:数据区域:实际的文件和目录的存储区域。
  • 文件的存储和删除

    很多小伙伴可能会有这种体会,删除一个文件比复制或者下载一个文件要快的多。这是怎么回事呢?

    • 这其实是因为如果你普通删除一个文件,它并不会将文件的内容真的删除。

    • 同样当你重命名一个文件时,其实它并没有删除原本的目录项,而是新建了一个目录项,指向原来的文件内容。

    这几句话话听着可能有点绕,没关系,我们通过一个例子来解释一下:

    文件的存储

    理解文件的安全删除必须先理解文件的存储。

    我们这里还是以FAT文件系统来举例:

    新建一个文件时,磁盘中发生了什么?

    1. 操作系统通过读取1号扇区表中的信息,找到剩余总簇数,以及下一个可用簇的编号

    2. 然后在根目录区域记录文件信息,比如说文件大小,文件名,创建信息等,并且在其中记录文件的首簇号,并计算新的剩余总簇数(=之前的剩余总簇数-此文件占用的总簇数),和下一可用簇编号

    3. 在FAT表中修改这个文件的簇列表。

    4. 在对应簇进行写数据。

    5. 操作系统重新读取磁盘信息,可以看到新建的文件了。

    举个例子:你要将自己攒的一千万(我可没这么多钱)放在自己家的柜子(FAT磁盘)里,而你又是一个办事有条理的人,你会将自己柜子里的抽屉总数(总簇数)记录一下,而且按照顺序为你的抽屉然后将每个抽屉的使用情况(FAT1)记录在抽屉记录清单上,比如说,0号抽屉不用(保留簇标记)5号抽屉坏了(坏簇标记),6号抽屉里有东西(簇占用标记)。而且,你怕自己将这个记录丢了,所以你又复制了一份一模一样的记录(FAT2),每次放东西都会在两份记录里都写进去。

    现在你要将这1000万放在自己的抽屉里(就是这么任性,有钱不存银行),然后,你找到了自己的记录表(FAT1),然后从里面查看还有多少个空抽屉(空闲簇)。

    现在你找到了下一个可以用的是7号抽屉。但是1个抽屉存不下你这些钱(文件大于1簇),所以你只好放几个抽屉了,而且你还想知道自己的钱到底是从哪开始放的(文件起始簇),用几个抽屉放(文件总大小),什么时候放的(文件创建时间)等,所以又写一张东西记录清单(根目录区域)。

    你为了让自己知道我的钱是放在哪些抽屉里的,然后在原来的抽屉记录清单(FAT1 和FAT2)上将抽屉记录上记录了下一个存钱的抽屉。当这是最后一个存钱抽屉时,你将这个记录改为结束(簇占用标记)。现在你可以把你的钱放在你规划好的抽屉里了(数据区)。

    普通删除一个文件时,磁盘中发生了什么?

    1. 找到文件的目录项,将文件首簇记录的高位清0,将目录项记录的第一个自己改为E5,将文件占用的簇释放掉,也就是在FAT表中将之前占用的簇记录改为空闲,然后修改剩余总簇数,有必要的话,也修改下一可用簇

    不难看出其实文件内容并没有被删除,所以说只要你新建的文件没有覆盖之前文件内容,这个文件是可以被恢复的。

    怎么安全删除?

    你可以用一些特定工具(比如WinHex)进行彻底删除,本质就是在文件实际内容用0比特或者随机比特进行填充。

    FAT文件的隐写

    什么是隐写?

    百度百科定义:隐写术是关于信息隐藏,即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。隐写术英文作“Steganography”,来源于约翰尼斯·特里特米乌斯一本看上去是有关黑魔法,实际上是讲密码学与隐写术的一本书Steganographia中。此书书名来源于希腊语,意为“隐秘书写”。

    本次实验采用的隐写可以说是最简单的隐写了,因为它只是让你从目录中查看不到这个文件信息,如果你用一些磁盘查看工具看到这些东西简直不要太容易!因为本文的重点不是介绍隐写术,而是FAT文件系统,所以不过多讨论。

    隐写实验过程

    本次实验环境:

    操作系统:Windows 8.1 实验工具:磁盘查看工具:WinHex(其他工具也可以)。百度网盘下载:[WinHex](https://pan.baidu.com/s/1eIxsYH1qtuGw9C0egn1UOg)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    工具安装:解压缩以后先打开keygen.exe是注册码生成器,复制注册码,然后点击setup.exe可以选择语言。然后点击winhex.exe 启动文件,再将注册码生成器里生成的内容复制到第一行帮助(help)选项卡中的注册(Register)内容中。

    1. 先格式化U盘,文件格式选择FAT32,分配单元大小(其实就是簇大小)选择(8192Byte=8KB)。

    目的:使得簇信息等查看起来简单,方便实验,但不是必须的。

  • 查看当前可用簇的总数(一般情况下在1号扇区偏移地址为0x1EB的连续四个字节),以及下一可用簇(在可用簇总数后面的连续四个字节,也就是在1号扇区偏移地址为0X1E的连续四个字节。)。以本次实验为例:A2 B2 18 00是可用簇总数的记录,实际大小为(0X0018B2A2),转化为10进制就是1618594个可用簇。同样地 05 00 00 00是下一可用簇的记录,实际大小为(0x00000005),转化为10进制就是第五簇。

  • 注意:高地址在右边,所以计算时要倒过来写。 !

  • 因为目的是要隐写,所以我们将第五簇用作隐写(在FAT的记录中随便找一项空闲簇都可以),然后将可用簇的总数减去1。然后在FAT1记录中找到第5簇的记录,将它修改为F7FFFFFF,也就是坏簇标记。(改为FFFFFF0F占用标记也可以)

  • 找到第五簇,完成实际数据的写入。

  • 保存修改,并重新插拔U盘。

  • 验证是否成功。

  • 重新插拔U盘,在U盘内随便新建一个文件,验证一下隐写文件是否会被覆盖。验证过程如下:重新用W inhex打开U盘,找到第五簇,看一下刚才写的数据是否还在。如果还在说明成功。不在的话,说明失败。

FAT文件系统文件存储与删除原理分析相关推荐

  1. SAP WebClient UI开发工具中attribute文件夹展开的实现原理分析

    For project reason I need to figure out the logic how the field list is assembled when folder " ...

  2. 【Redis系列2】Redis字符串对象之SDS(简单动态字符串)实现原理分析

    Redis字符串对象之SDS实现原理分析 前言 字符串对象 为什么Redis的字符串对象是二进制安全的 SDS空间分配策略 空间预分配 惰性空间释放 SDS和C语言字符串区别 SDS的底层存储对象 d ...

  3. JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析

    JPEG文件简介 JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图像文件格式,也是一种高效率的 ...

  4. FastDFS合并存储原理分析

    FastDFS合并存储原理分析 基于FastDFS 5.03/5.04 2014-12-03 一.合并存储简介 在处理海量小文件问题上,文件系统处理性能会受到显著的影响,在读写次数与吞吐量这两个指标上 ...

  5. Mysql原理解析 - 索引文件的存储结构

    Mysql原理解析 - 索引文件的存储结构 前言 局部性原理 磁盘预读 索引是什么? 1. MSQL为什么索引选择B+树? 1.1 哈希表hash 简介: 局限性: 1.2 二叉树 简介: 局限性: ...

  6. android中so文件格式详解,[原创]一 Android ELF系列:ELF文件格式简析到linker的链接so文件原理分析...

    Android ELF系列:ELF文件格式简析和linker的链接so文件原理分析 Android ELF系列:实现一个so文件加载器 Android ELF系列:手写一个so文件(包含两个导出函数) ...

  7. 【 Linux】文件删除原理

    文章目录 Linux文件删除原理 文件的索引节点和链接 文件删除的过程 文件删除后是否能恢复 Linux文件删除原理 Linux是一个强大的操作系统,它提供了许多命令和工具来管理文件和目录.其中,最常 ...

  8. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  9. 内存映射文件mmap原理分析

    本文来说下内存映射文件 mmap 原理 文章目录 mmap原理分析 mmap原理分析 假设我们要把一个磁盘文件映射到内存里来,然后把映射到内存中的数据通过socket发送出去. 零拷贝有两种实现方式, ...

  10. 微信小程序文件云存储-上传下载删除功能

    文件云存储 云存储提供高可用.高稳定.强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理.云存储包含以下功能: 存储管理:支持文件夹,方便文件归类.支持 ...

最新文章

  1. 南大和中大“合体”拯救手残党:基于GAN的PI-REC重构网络,“老婆”画作有救了 | 技术头条...
  2. 强势分享5款超级实用的办公软件,建议收藏!
  3. vbox 设置linux共享文件夹,Windows 7下设置VirtualBox中Linux共享文件夹
  4. 服务器内存一般多大_各类网站服务器内存多大才合适?
  5. nginx+tornado与nginx+go的性能测试
  6. linux定时创建文件,linux下如何创建定时任务
  7. SPOJ MYQ10 (数位DP)
  8. Java多线程系列--“JUC锁”05之 非公平锁
  9. linux配置防火墙,开启端口
  10. 如果唐朝人拿到一篇现代文章……
  11. 一步一步教你写带图片注释的淡入淡出插件(四)
  12. php遍历数组对象数组长度,PHP循环遍历对象数组会产生意外结果
  13. java.sql.SQLException: 关闭的连接 解决办法
  14. 普通的PHP上传到云函数,php封装上传函数代码示例
  15. 载波为半波三角波的单相三阶SPWM逆变器——谐波分析
  16. ISO14001与ISO45001都是什么认证?
  17. 如何把Word文档中的数字和字母变成新罗马字体?
  18. 一文读懂JPEG算法!附C++代码实现JPEG算法,实现从BMP到JPEG转换!
  19. 你看我像不像学HTML的人(五)——链接标签、注释和特殊字符
  20. 线上比赛相关规则补充说明

热门文章

  1. 【vue手写图片预览组件】在vue2.0项目中手写图片预览组件,旋转、放大、滚动、下载等功能
  2. java中refresh是什么_浅析Spring IoC源码(三)分析refresh()方法前的准备篇(一)
  3. 学习统计学,必看的书单推荐
  4. class 文件比较
  5. linux无线网卡模拟ap,在 openSUSE 上使用 create_ap 创建虚拟 WiFi 热点来方便使用 KDE Connect 连接手机...
  6. 谈一谈机器学习的基本原理
  7. 3Dmax移动,旋转,缩放图标不显示
  8. ARM开发(四)新手小白如何阅读芯片手册,裸机驱动开发步骤以及纯汇编实现点灯,汇编结合c点灯,c实现点灯
  9. 免下载券下载文档的方法
  10. 微信翻译生日快乐的代码_新套路,微信这个翻译功能还能帮你表白,快学起来!...