热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12

前面我们更多的集中在Linux系统下文件系统的介绍,是时候介绍一下其它文件系统了。今天我们介绍一下Windows操作系统下的文件系统,也就是FAT文件系

前面我们更多的集中在Linux系统下文件系统的介绍,是时候介绍一下其它文件系统了。今天我们介绍一下Windows操作系统下的文件系统,也就是FAT文件系统。严格的来说其实是DOS的文件系统。今天我们介绍一下FAT最古老的版本,FAT12文件系统的内容。

FAT文件系统的磁盘布局

在学习文件系统更多细节之前我们有必要了解一下它的整体磁盘布局,也就是数据是如何放置的。这样便于我们对该文件系统进行更加深入的理解。

d1d2eca8b126b102bae6ac319d68edf1.png

如上图所示,FAT文件系统分为5个主要区域,分别是引导程序区,FAT1,FAT2,目录文件项和文件数据。其中FAT1和FAT2也就是文件分配表(File Allocate Table),它是FAT文件系统的核心,用于描述磁盘空间的使用情况。需要注意的是,这里的数值只是一个示例,并非固定不变,通常需要根据引导扇区的数据进行计算得到。

引导扇区

引导扇区是Windows操作系统下特有的,包含操作系统引导的作用。对于文件系统而言,这个扇区的作用其实与Linux文件系统的超级块很像,其中包含着对文件系统整体的描述信息。如下图所示是该扇区的前部分内容,其中偏移22的地方描述了FAT表的大小。

0f1ef7b11d7f426b6751794be6138946.png

可以看出,其实FAT文件系统的磁盘布局是动态的。在图一中描述的偏移信息并非一成不变的,而是在格式化的时候确定的,而且该信息可以在启动扇区中找到。

目录文件项

这里相当于FAT文件系统的根目录。所有的文件或者目录都要以这里为起始位置。这里每个文件或者目录都是通过下面这个结构图描述的。这里面包含文件名称,扩展名,文件属性和文件的数据位置等内容。

302e3082704b3b29d692aa2c77933586.png

上述数据结构与Linux中的inode类似,可以看出每一项占用32字节的空间。这样磁盘布局中的目录文件项空间就可以细化成下图这样。其中每一个方块代表上图中的一个数据结构。这个数据结构里面比较重要的内容是文件名和文件数据的首地址。

fa8908691ec705c63fdf7e497a2382e4.png

有了文件数据的首地址,我们就知道文件的数据存储在什么地方了。那么其它数据如何找到呢?这个时候就用到文件分配表了。

FAT-文件分配表

如果我们将FAT表放大,对于FAT12来说,它是由很多12位的数字构成。这些12位的数字称为一个FAT表项,每一项与文件数据区的一个簇相对应。这个表项即表示了对应的数据簇是否被使用,又表示了所在文件的下一个数据簇的位置,具体差异由其中的数值表示。

f5d264931bc1ecb3b8d45bd699539429.png

为了便于理解FAT的作用,我们举一个具体的例子,具体如下图所示。假设有个文件file1.txt,我们根据目录文件项知道其其实的簇地址是0x05,这个是该文件第一个簇的位置,然后根据簇地址就能找到FAT中对应的表项。根据表项内容,我们可以知道下一个簇的位置,以此类推,我们可以找到该文件的所有数据。

2ce2d2018cb208e76f6513e47b0e7e6e.png

如果我们简化一下这个结构,其实整个关系就是一个单向链表的关系,我们可以将FAT表项理解为next指针,簇则是data数据。只不过FAT表项和簇是通过地址偏移建立了两者之间的关系。上图可以简化为下图所示的样子。

8c76879de223bb50d27e9ee0d3297bfc.png

数据实例分析

我们可以通过实例来分析一下FAT的数据布局情况。假设我们采用Ubuntu18.04平台。此时我们可以通过dd命令生成一个1MB的文件。然后通过loop设备将文件模拟成一个块设备。之后就可以通过mkfs.fat进行格式化了。下面是格式化完后创建的文件。

e3f19175e33128b0fa6ef7f1183afd32.png

完成上述操作后,我们其实就相当于在文件中创建了一个FAT文件系统了。然后我们可以通过vim打开这个文件分析其中的数据。比如下面是引导扇区的内容,我们可以将其中的内容与前面表格中相关数据对应来学习,这样我们就可以有更深入的理解。

48a53194380b8aa37baff350f0a0c096.png

今天的内容先到这里,希望对大家有所帮助。后面我们专门写一篇文章,介绍如何对磁盘数据进行分析。



推荐阅读
  • 本文讨论了在Linux系统中,使用chown命令将django项目目录下的static目录的拥有者从root改为eureka的问题。作者尝试了多种命令,包括chown和sudo chown等,但都没有成功修改拥有者。文章提供了相关目录的权限信息,并补充了项目所在磁盘和操作系统的信息。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
author-avatar
晨风流云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有