内核中根据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日,尼加拉瓜发行了十张一套题为“改变世界面貌的十个数学公式”邮票,由一些著名数学家选出十个以世界发展极有影响的公式来表彰。这十个公式不但造福人类,而且具有典型的数学美,…

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…

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

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

IE6下margin-left双倍bug问题

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

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

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

使用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…

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

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

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

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

The application could not be verified

2019独角兽企业重金招聘Python工程师标准>>> //调试的时候出现 The application could not be verified删除已安装的app&#xff0c;再Run 转载于:https://my.oschina.net/liuchuanfeng/blog/550025

git之you can‘t overwrite the remote branch问题解决

今天使用smartGit提交代码的时候出现这个错误&#xff0c;如图&#xff0c; remote是远程的意思&#xff0c;branch是分支的意思&#xff0c;you cant overwrite the remote branch英文的意思是我的remote branch被移动位置了&#xff0c;应该选中edit下面的prefrences下面的al…

数据分析和数据挖掘的理论研究必要性

2019独角兽企业重金招聘Python工程师标准>>> 数据分析&#xff0c;并不抽象&#xff0c;传统的数据分析&#xff0c;包括很多。例如信号处理中的DCT&#xff0c;滤波&#xff0c;IDCT变换。由于确定了滤波窗口的特性&#xff0c;使得对一个时间轴上的数据进行了频谱…

这个国家太奇怪了!全球最落后的国家之一,却又是世界上最幸福的国家!

全世界只有3.14 % 的人关注了爆炸吧知识中国和印度之间喜马拉雅山脉附近存在着一个弹丸小国国家人口仅有75万左右国土面积不足4万平方公里这里没有军队只有人们彼此诚挚的信任这里是最快乐的国度也是世间最神秘纯净的世外桃源这里是徒步天堂没有车水马龙的街道和红绿灯没有高楼…

嵌套饼图_旭日图的效率,高到饼图都羡慕

在展示占比情况时&#xff0c;饼图是我们最常用的选择。但是&#xff0c;饼图只能展示单层数据的占比情况&#xff0c;在面对多层级数据时&#xff0c;我们真的要用10个饼图进行可视化吗&#xff1f;不用挠头苦思&#xff0c;今天我们就来看看多个饼图的组合升级版——旭日图是…

Android之BaseAdapter—convertView回收机制与动态控件响应

前言&#xff1a;对于listView的BaseAdapter的派生&#xff0c;难度比较大。最难理解的莫过于getView(int position, View convertView, ViewGroup parent)这个函数是如何产生每条记录的&#xff0c;有些博客中利用holderView&#xff0c;有些博客却没有用&#xff0c;种种方法…

刚刚还在做菜,瞬间人就没了!厨房里一定不要再做这些事

全世界只有3.14 % 的人关注了爆炸吧知识厨房是一个家最有生活气息的地方&#xff0c;即使在外面&#xff0c;只要闻到别人家厨房飘出的饭菜香味&#xff0c;就很让人想家。但是&#xff0c;如果不注意细节&#xff0c;厨房也容易酿成悲剧&#xff01;今天&#xff0c;给大家看几…