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

前面我们更多的集中在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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

改变世界面貌的十个数学公式

全世界只有3.14 % 的人关注了爆炸吧知识1971年5月15日,尼加拉瓜发行了十张一套题为“改变世界面貌的十个数学公式”邮票,由一些著名数学家选出十个以世界发展极有影响的公式来表彰。这十个公式不但造福人类,而且具有典型的数学美,…

【2006-1】【字符统计】

Description 输入一串字符,将数字字符、字母字符和其它字符分别计数,并输出计数的结果,输入的字符以“?”号结束,“?”号不计数。输出共有3行,分别为输入文件中的数字字符、字母字符和其它字符的数目。 Input 字符串…

Java开源门户

最近在研究门户,先整理一下开源内容 GateIn: 新的开源门户平台,由RedHat JBoss和eXo平台共同打造。目标是结合强大的企业级Java基础设施和直观友好的用户界面,根据客户的需求,提供最佳的开源门户平台的企业级Java基础设…

.NET 6新特性试用 | 最小Web API

前言如果你使用过其他一些轻量级Web框架,比如Node.JS,你就会知道,创建具有最小依赖项的HTTP API是多么简单:var express require(express) var app express()app.get(/, function (req, res) {res.send(hello My IO!) })app.lis…

Android之SparseArray<E>详解

最近编程时&#xff0c;发现一个针对HashMap<Integer, E>的一个提示&#xff1a; 翻译过来就是&#xff1a;用SparseArray<E>来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情&#xff1a;一、构造从构造方法我们可以看出&#xff0c;它和一般…

WPF/MVVM 快速开发

http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶&#xff0c;入门良药啊&#xff01; Introduction Assuming that you have a decent understanding of C#, getting started in WPF isnt too difficult. I started looking at WP…

腐蚀rust服务器命令_RUST++ MOD

RUST MOD(以下在聊天框内输入)基本命令/share playername 【shares your doors with a player(共享你的门给一个玩家)】/unshare playername 【unshares your doors with a player(解除对一个玩家的门共享)】/help 【Shows commands(显示所有指令)】/pm "playername"…

钢厂冒的白烟到底有没有污染?东北大学教授的试验结果让你大吃一惊

全世界只有3.14 % 的人关注了爆炸吧知识对于大多数人来讲钢厂的污染首先是来自于冒的气体钢铁企业污染严重的时候烟气有黄烟、黑烟、红烟、褐色烟等和这些烟相比一部分人认为钢厂冒的白烟是水蒸气没有污染另一部分则认为白烟也是污染避之而不及钢厂冒的白烟到底有没有污染呢&am…

Android之万能适配器Adapter的使用

万能适配器 万能适配器共有两个部分:SuperViewHolder 和 SuperBaseAdapter 万能的ViewHolder public class SuperViewHolder {private SparseArray<View> mViews;private View mConvertView;private int mPosition;public SuperViewHolder(Context context, ViewGro…

IE6下margin-left双倍bug问题

熟悉 CSS 盒模型朋友相信对于 IE 双倍浮动边界 BUG 不会陌生&#xff0c;这个 BUG 只会产生在浮动行的第一个浮动元素&#xff08;此处说法不准确&#xff0c;并不是第一个浮动元素&#xff0c;假如浮动的元素在一行显示不下&#xff0c;占用了多行&#xff0c;那么每一行的第一…

javascript与xml实例应用

xsl文件&#xff1a;js_xml.xsl <?xml version"1.0" encoding"utf-8"?> <xsl:stylesheet xmlns:xsl"http://www.w3.org/1999/XSL/Transform" version"1.0"> <xsl:template match"/"> <html>…

基于事件驱动架构构建微服务第11部分:持续集成

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part12-continuous-integration/在本教程中&#xff0c;我将展示如何设置docker持续集成以在docker容器内构建和运行单元测试。因为我将使用kubernetes在容器中运行微服务…

联通物联卡为什么没有网络_物联网卡显示3g 联通物联网

为什么物联卡显示3G网连不上网&#xff1f;感谢您邀请1。APN接入点设置不好&#xff0c;不同的卡接入点不一样&#xff0c;请商家2。可能卡板与您的手机3不兼容。卡板与您的手机卡不兼容&#xff0c;请尝试拔下手机卡&#xff0c;只剩下一张物联网卡&#xff0c;或者您可以通过…

使用Visual Studio 创建可视Web Part部件

使用Visual Studio 创建可视Web Part部件 可视Web Part部件是很强大的Web 部件。它提供内置设计器创建你的用户界面。本文主要解说怎样使用Visual Studio 创建可视Web Part部件.准备&#xff0c;创建一个自己定义列表Stats&#xff0c;加入某些栏目&#xff0c;填充部分数据。当…

如果在我爸的朋友圈当杠精,会挨揍吗?

1 这位爷爷推这么大力是想换老伴了吧&#xff1f;▼2 撞玻璃门撞出心理阴影的狗子▼3 她和她爸交朋友的方式就是以爸的口吻评论她爸的朋友圈▼4 你们还记得那个学鸭子嘟嘴的小可爱吗&#xff1f;▼5 看看狗子委屈的......▼6 去游个泳&#xff0c;结果收获了一群小鸭子▼…

Git的理解和使用

Git介绍 Git&#xff08;the stupid content tracker&#xff09;是一个源自Linux内核项目的源码管理工具。和传统的CVS、SVN不同&#xff0c;git是一个分布式源码管理工具。 Git命令简单说明git init初始化一个本地的代码仓库。git clone从远程复制一个代码仓库。git configgi…

C# 找日期第一天

DateTime dt DateTime.UtcNow; DateTime dt_First dt.AddDays(-(dt.Day) 3); //AddDays是日期增加或减少多少天&#xff0c;正数为增加天数&#xff0c;负数为减少天数。 this.dtp.Value dt_First; 一个判断true发生的情况多些时&#xff0c;用&quo…

不以成败论战略

德鲁克在《企业家战略》网上课程中&#xff0c;提到了“孤注一掷”的企业家战略。孤注一掷&#xff0c;First with the Most&#xff0c;来自美国内战时期极富传奇色彩的Forrest将军。每次行动都全力以赴&#xff0c;不给自己留任何退路&#xff0c;要么胜利&#xff0c;要么灭…

【v3.6.2】iNeuOS工业互联网操作系统,发布实时存储方式:实时存储、变化存储、定时存储,设备振动状态和电能状态监测驱动...

目 录1. 概述... 12. 平台演示... 23. 存储方式... 24. 设备状态和用电状态监控驱动... 31. 概述本次升级主要增加了对设备实时数据的存储方式、设备振动状态驱动和用电状态监控的驱动&#xff0c;并且优化了部分核心代码。2. 平台演示在线演示&…

查询子串_SQL视图、子查询和常见函数的应用

一、视图含义&#xff1a;虚拟表&#xff0c;和普通表一样使用&#xff0c;通过表动态生成的数据。创建语法的关键字是否实际占用物理空间使用视图CREATE VIEW没有&#xff08;只保存了SQL逻辑&#xff09;增删改查&#xff0c;一般不能增删改表CREATE TABLE占用&#xff08;保…