认识EXT2文件系统

2024-03-16 09:32
文章标签 认识 文件系统 ext2

本文主要是介绍认识EXT2文件系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

硬盘组成

整块磁盘的组成主要有:

圆形的盘片(主要记录数据的部分);机械手臂与机械手臂上的磁头(可读写盘片上的数据);主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据。

盘片上的物理组成:

扇区(sector)为最小的物理存储单位,每个扇区为512bytes;将扇区组成一个圆,那就是柱面,柱面是分区的最小单位;
第一个扇区重要i,里面有硬盘主引导记录(MBR,446字节)及分区表(partition table,64字节)。
接口的磁盘在linux中文件名为:
/dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名;
/dev/hd[a-d][1-63]:为IDE接口的磁盘文件名。

分区

磁盘分区指的是告诉操作系统“我这块磁盘在此分区可以访问的区域是由A柱面到B柱面之间的块”。
因为分区表只有64字节,所以最多只能记录四条分区的记录,我们称之为主分区或扩展分区;扩展分区只能有一个,扩展分区还能再分出逻辑分区;能够被格式化后作为数据访问的分区为主要分区和逻辑分区,扩展分区无法格式化。

文件系统特性

每种操作系统所设置的文件属性/权限并不相同,才了存放这些文件所需的数据,因此需要将分区进行格式化,以成为操作系统能够利用的文件系统,所以每种操作系统能够使用的文件系统并不相同。Linux的正规文件系统则为Ext2。

Linux的文件系统组成

1.super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
2.inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
3.block:实际记录文件的内容,若文件太大时,会占用多个block。

Ext2 数据访问方法

文件系统先格式化出inode和block的块,假设某一个文件的属性与权限数据是放置到inode4号,而这个inode记录了文件数据的实际放置点为2,7,13,15这4个block号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一下子将这4个block内容读出来。这种方法称为索引式文件系统。

FAT 数据访问方法及碎片整理

使用这种格式的,比如U盘。它没有inode存在,所以没办法将这个文件的所有block在一开始读出来。每个block号码都记录在前一个block当中,它需要一个一个地将block读出后,才能知道下一个block在何处。弊端就是同一个文件数据写入地block分散得太厉害,那么文件读取地性能将会变得很差。

碎片整理就是针对上述情况,通过碎片整理将同一个文件所属地block汇合在一起,这样数据地读取会比较容易。FAT的文件系统需要经常碎片整理一下,而Ext2是索引式文件系统,基本上不太需要经常进行碎片整理的。

Linux的Ext2文件系统

Ext2文件系统在格式化时基本上时区分为多个块组,每个块组都有独立的inode/block/superblock 系统。
这里写图片描述

data block

1.在Ext2文件系统中所支持的block大小有1KB、2KB及4KB。
2.原则上,block的大小与数量在格式化完就不能够再改变了,除非重新格式化
3.每个block内最多只能够放置一个文件的数据
4.如果文件大于block的大小,则一个文件会占用多个block数量
5.若文件小于block,则该block的剩余空间就不能再被利用了,造成磁盘空间浪费。

inode table

inode记录的文件数据有:
1.该文件的访问模式(read/write/excute)
2.该文件的所有者(owner/group)
3.该文件的大小()
4.该文件创建或状态改变的时间(ctime)
5.最近一次的读取时间(atime)
6.最近修改的时间(mtime)
7.定义文件特性的标志(flag),如SetUID等
8.该文件真正内容的指向(pointer)
特色:
1.每个inode大小均固定为128bytes
2.每个文件都仅会占用一个inode,因此文件系统能够创建的文件数量与inode的数量有关
3.系统读文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能读取block的内容

superblock

没有superblock,就没有文件系统了。记录的信息:
1.block与inode的总量;
2.未使用与已使用的inode/block数量;
3.block与inode的大小
4.文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间文件系统的相关信息;
5.一个validbit数值,若此文件系统已被挂载,则valid bit为0,否则为1。

文件系统描述说明

描述每个block group的开始与结束的block号码,以及说明每个区段分别介于哪一个block号码之间。

块对照表

记录使用与未使用的block号码,以便系统能快速找到可利用的空间处理文件,删除文件时,记录释放的block号码

inode对照表

记录使用与未使用的inode号码

与目录树的关系

目录

在Ext2文件系统新建一个目录时,ext2会分配一个inode与至少一块block给该目录。inode记录该目录的相关权限与属性,并记录分配到的那块block号码;而block则记录在这个目录下的文件名与该文件名占用的inode号码数据。

目录树的读取

我们知道inode本身并不记录文件名,文件名的记录是在目录的block中。
目录树是有根目录开始读起,因此系统通过挂载的信息可以找到挂载点的inode号码,通常一个文件系统最顶层inode号码从2开始,此时就能得到根目录的inode内容,并依据该inode读取根目录的block,block记录了该目录下的文件名和对应的inode号码,再根据inode号找到对应目录,一层一层的读下去。

新增文件时的系统行为

1.先确定用户欲添加文件的目录是否具有w与x的权限,若有的话才能继续添加
2.根据inode bitmap找到没有使用的inode号码,写入文件的属性和权限
3.根据block bitmap找到没有使用中的block号码,将实际的数据写入block中,且更新inode 的 block指向数据
4.将刚才写入的inode与block数据同步更新inode bitmap 与 block bitmap,并更新superblock的内容。

日志文件系统

如果新增文件的过程中发生意外,导致中间的过程中断,那么就会发生数据不一致的情况。如果要强制检查,可能要搜寻整个文件系统。针对上述情况,产生了Ext3增加了日志功能。在文件系统中规划出一个块,该块专门记录写入或修订文件时的步骤,以简化一致性检查的步骤。

挂载点的意义

每个文件系统要能够链接到目录树才能被我们使用,将文件系统与目录树结合的操作我们称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口。因此不是任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统。

Linux VFS

Virtual Filesystem Switch—虚拟文件系统,也许称它为 Linux 的文件系统管理者更确切点。我们用户并不需要知道每个分区上头的文件系统是什么,用户通过上层系统调用通过VFS调用实际的文件系统。在网上找了篇文章将VFS,具体VFS的解析与内部实现现在还没仔细看。
ps:https://www.ibm.com/developerworks/cn/linux/l-vfs/

这篇关于认识EXT2文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815052

相关文章

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

SpringMVC-1.认识及配置

SpringMVC是一个基于请求驱动的Web框架,和structs一样是目前最优秀的基于MVC框架,现在的项目一般都使用SpringMVC代替Structs。 MVC模式中,Model是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象在数据库中存取数据。View是应用程序中处理数据显示的部分,通常视图是依据模型数据创建。Controller是应用程序中处理用户交互的部分。通常控制器负责从视

【H2O2|全栈】关于HTML(1)认识HTML

HTML相关知识 目录 前言 准备工作 WEB前端是什么? HTML是什么? 如何运行HTML文件? 标签 概念 分类 双标签和单标签 行内标签和块标签 HTML文档结构 预告和回顾 UI设计相关 Markdown | Md文档相关  项目合作管理相关  后话 前言 本系列的博客将分享前端HTML的相关知识点。 本篇作为本系列的第一期博客,主要讲解H

认识鬼火引擎

一、Irrlicht简介 (1)概念Irrlicht引擎是一个用C++书写的高性能实时3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台)、OpenGL 或它自己的软件着色程序,可以实现该引的完​全跨平台。尽管是开源的,该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性,例如动态的阴影,粒子系统,角色动画,室内和室外技术以及碰撞检测等。(

使用jetty和mongodb做个简易文件系统

使用jetty和mongodb做个简易文件系统 - ciaos 时间 2014-03-09 21:21:00   博客园-所有随笔区 原文   http://www.cnblogs.com/ciaos/p/3590662.html 主题  MongoDB  Jetty  文件系统 依赖库: 1,jetty(提供http方式接口) 2,mongodb的java驱动(访问mo

Jenkins--pipeline认识及与RF文件的结合应用

什么是pipeline? Pipeline,就是可运行在Jenkins上的工作流框架,将原本独立运行的单个或多个节点任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。 为什么要使用pipeline? 1.流程可视化显示 2.可自定义流程任务 3.所有步骤代码化实现 如何使用pipeline 首先需要安装pipeline插件: 流水线有声明式和脚本式的流水线语法 流水线结构介绍 Node:

git:认识git和基本操作(1)

目录 一、版本控制器 1.安装git 2.创建git本地仓库 3.配置git 二、git操作(1) 1.工作区、暂存区、版本库 2.添加文件 3.查看.git 4.修改文件 一、版本控制器         所谓的版本控制器,就是能让你了解到每一个文件的修改历史。相应的,在企业级开发中,用来记录一个工程的每一次改动和管理版本迭代,同时方便多人协作开发。         g