FAT文件系统文件存储与删除原理分析
FAT文件系统是什么?
FAT是一个由微软发明的简单的文件系统,一般在Linux系统和Windows系统都支持这种文件系统。
FAT文件系统的格式
一个FAT文件系统分为四个不同的部分。
第一部分:保留扇区,第一个保留扇区(0号扇区)是记录磁盘的引导记录,分区信息等。
第二部分:文件分配表(File allocation Table, FAT),由两部分组成,FAT1和FAT2,FAT2是FAT1的备份,一般情况下不会用到。一般情况下前两簇(0簇和1簇)是保留簇。
文件分配表里会记录簇的使用信息,以及簇列表。文件分配的最小单位是簇,簇标记大小为连续的4个字节,簇的标记有五种:
空闲簇(作用:说明这个簇是没有被占用的。)
坏簇标记0xF7FFFF(作用:说明这个簇不可用,避免将信息写到坏簇上,使得数据丢失。)
簇占用标记0xFFFFFF0F(其实表示该簇是一个文件的结束。)
下一簇的位置(每个文件可能有好多簇表示,用前一簇记录下一簇的位置,达到对整个文件的记录)
第三部分:根目录区域,相当于一个目录表,用来记录文件和目录信息的。
- 第四部分:数据区域:实际的文件和目录的存储区域。
文件的存储和删除
很多小伙伴可能会有这种体会,删除一个文件比复制或者下载一个文件要快的多。这是怎么回事呢?
这其实是因为如果你普通删除一个文件,它并不会将文件的内容真的删除。
同样当你重命名一个文件时,其实它并没有删除原本的目录项,而是新建了一个目录项,指向原来的文件内容。
这几句话话听着可能有点绕,没关系,我们通过一个例子来解释一下:
文件的存储
理解文件的安全删除必须先理解文件的存储。
我们这里还是以FAT文件系统来举例:
新建一个文件时,磁盘中发生了什么?
操作系统通过读取1号扇区表中的信息,找到
剩余总簇数
,以及下一个可用簇的编号
。然后在
根目录区域
记录文件信息,比如说文件大小,文件名,创建信息等,并且在其中记录文件的首簇号
,并计算新的剩余总簇数
(=之前的剩余总簇数-此文件占用的总簇数),和下一可用簇编号
。在FAT表中修改这个文件的簇列表。
在对应簇进行写数据。
操作系统重新读取磁盘信息,可以看到新建的文件了。
举个例子:你要将自己攒的一千万(我可没这么多钱)放在自己家的柜子(FAT磁盘)里,而你又是一个办事有条理的人,你会将自己柜子里的抽屉总数(总簇数)记录一下,而且按照顺序为你的抽屉然后将每个抽屉的使用情况(FAT1)记录在抽屉记录清单上,比如说,0号抽屉不用(保留簇标记)5号抽屉坏了(坏簇标记),6号抽屉里有东西(簇占用标记)。而且,你怕自己将这个记录丢了,所以你又复制了一份一模一样的记录(FAT2),每次放东西都会在两份记录里都写进去。
现在你要将这1000万放在自己的抽屉里(就是这么任性,有钱不存银行),然后,你找到了自己的记录表(FAT1),然后从里面查看还有多少个空抽屉(空闲簇)。
现在你找到了下一个可以用的是7号抽屉。但是1个抽屉存不下你这些钱(文件大于1簇),所以你只好放几个抽屉了,而且你还想知道自己的钱到底是从哪开始放的(文件起始簇),用几个抽屉放(文件总大小),什么时候放的(文件创建时间)等,所以又写一张东西记录清单(根目录区域)。
你为了让自己知道我的钱是放在哪些抽屉里的,然后在原来的抽屉记录清单(FAT1 和FAT2)上将抽屉记录上记录了下一个存钱的抽屉。当这是最后一个存钱抽屉时,你将这个记录改为结束(簇占用标记)。现在你可以把你的钱放在你规划好的抽屉里了(数据区)。
普通删除一个文件时,磁盘中发生了什么?
找到文件的目录项,将
文件首簇记录
的高位清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)内容中。
先格式化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文件系统文件存储与删除原理分析相关推荐
- SAP WebClient UI开发工具中attribute文件夹展开的实现原理分析
For project reason I need to figure out the logic how the field list is assembled when folder " ...
- 【Redis系列2】Redis字符串对象之SDS(简单动态字符串)实现原理分析
Redis字符串对象之SDS实现原理分析 前言 字符串对象 为什么Redis的字符串对象是二进制安全的 SDS空间分配策略 空间预分配 惰性空间释放 SDS和C语言字符串区别 SDS的底层存储对象 d ...
- JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析
JPEG文件简介 JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图像文件格式,也是一种高效率的 ...
- FastDFS合并存储原理分析
FastDFS合并存储原理分析 基于FastDFS 5.03/5.04 2014-12-03 一.合并存储简介 在处理海量小文件问题上,文件系统处理性能会受到显著的影响,在读写次数与吞吐量这两个指标上 ...
- Mysql原理解析 - 索引文件的存储结构
Mysql原理解析 - 索引文件的存储结构 前言 局部性原理 磁盘预读 索引是什么? 1. MSQL为什么索引选择B+树? 1.1 哈希表hash 简介: 局限性: 1.2 二叉树 简介: 局限性: ...
- android中so文件格式详解,[原创]一 Android ELF系列:ELF文件格式简析到linker的链接so文件原理分析...
Android ELF系列:ELF文件格式简析和linker的链接so文件原理分析 Android ELF系列:实现一个so文件加载器 Android ELF系列:手写一个so文件(包含两个导出函数) ...
- 【 Linux】文件删除原理
文章目录 Linux文件删除原理 文件的索引节点和链接 文件删除的过程 文件删除后是否能恢复 Linux文件删除原理 Linux是一个强大的操作系统,它提供了许多命令和工具来管理文件和目录.其中,最常 ...
- 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化
第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件 ...
- 内存映射文件mmap原理分析
本文来说下内存映射文件 mmap 原理 文章目录 mmap原理分析 mmap原理分析 假设我们要把一个磁盘文件映射到内存里来,然后把映射到内存中的数据通过socket发送出去. 零拷贝有两种实现方式, ...
- 微信小程序文件云存储-上传下载删除功能
文件云存储 云存储提供高可用.高稳定.强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理.云存储包含以下功能: 存储管理:支持文件夹,方便文件归类.支持 ...
最新文章
- 南大和中大“合体”拯救手残党:基于GAN的PI-REC重构网络,“老婆”画作有救了 | 技术头条...
- 强势分享5款超级实用的办公软件,建议收藏!
- vbox 设置linux共享文件夹,Windows 7下设置VirtualBox中Linux共享文件夹
- 服务器内存一般多大_各类网站服务器内存多大才合适?
- nginx+tornado与nginx+go的性能测试
- linux定时创建文件,linux下如何创建定时任务
- SPOJ MYQ10 (数位DP)
- Java多线程系列--“JUC锁”05之 非公平锁
- linux配置防火墙,开启端口
- 如果唐朝人拿到一篇现代文章……
- 一步一步教你写带图片注释的淡入淡出插件(四)
- php遍历数组对象数组长度,PHP循环遍历对象数组会产生意外结果
- java.sql.SQLException: 关闭的连接 解决办法
- 普通的PHP上传到云函数,php封装上传函数代码示例
- 载波为半波三角波的单相三阶SPWM逆变器——谐波分析
- ISO14001与ISO45001都是什么认证?
- 如何把Word文档中的数字和字母变成新罗马字体?
- 一文读懂JPEG算法!附C++代码实现JPEG算法,实现从BMP到JPEG转换!
- 你看我像不像学HTML的人(五)——链接标签、注释和特殊字符
- 线上比赛相关规则补充说明
热门文章
- 【vue手写图片预览组件】在vue2.0项目中手写图片预览组件,旋转、放大、滚动、下载等功能
- java中refresh是什么_浅析Spring IoC源码(三)分析refresh()方法前的准备篇(一)
- 学习统计学,必看的书单推荐
- class 文件比较
- linux无线网卡模拟ap,在 openSUSE 上使用 create_ap 创建虚拟 WiFi 热点来方便使用 KDE Connect 连接手机...
- 谈一谈机器学习的基本原理
- 3Dmax移动,旋转,缩放图标不显示
- ARM开发(四)新手小白如何阅读芯片手册,裸机驱动开发步骤以及纯汇编实现点灯,汇编结合c点灯,c实现点灯
- 免下载券下载文档的方法
- 微信翻译生日快乐的代码_新套路,微信这个翻译功能还能帮你表白,快学起来!...