深入解析Ext2文件系统:格式化、分区关系及文件结构详解

Linux 企鹅图标图片

概述

本文基于Ext2文件系统,描述了建立系统分区后,建立的Ext2文件系统。

1️⃣文件系统和格式化

所谓格式化就是将分区格式成一种文件系统,使得操作系统可以实际进行访问。

每种操作系统可以操作的文件系统也是不同

比如:

  • windows 在98之前都是使用的是FAT文件系统
  • windows 2000之后使用的NTFS文件系统
  • Linux 系统使用的是ext2文件系统

随着技术的发展,操作系统通常可以支持多种文件系统。

2️⃣分区与格式化关系

传统的一个磁盘分区只可以被格式化为一个文件系统,所以,也就有了一个文件系统对应的是一个磁盘分区。

新技术

LVM 和RAID 技术:

允许将一个分区格式化为多个文件系统,以及多个分区合并为一个文件系统,使得系统可以更加灵活的运行系统格式化问题。

随着技术发展:当我们系统挂在一个文件系统的时候,不再说挂载分区了。因为分区和文件系统不是一一对应的关系了。

但是明确的是:操作系统挂载的是文件系统。

3️⃣概览文件系统

这里我们概览下文件系统,但是我们不指定具体的文件系统,概述大多数文件系统都应该有的组成部分。

  • 超级区块 superblock:这个部分用于记录文件系统的整体信息,包括inode与数据区块总量等等信息
  • inode:一个文件占用一个inode,,主要记录的是文件属性,以及文件数据所在区块号码
  • 数据区块 data block:存放的是一个文件具体的数据

相互之间的关系如图

Linux Ext2文件系统区块示意图

这是一张典型的索引式的文件系统

inode 4记录了一个文件,数据块所在位置为:2、7、13、15

4️⃣Linux Ext2 文件系统

一张Ext2文件系统结构示意图


ext2是其中一个较早期的文件系统,它是“第二扩展文件系统”(Second Extended Filesystem)的简称。ext2是Linux内核最初使用的默认文件系统之一,用于管理磁盘驱动器上的文件和目录。

虽然ext2文件系统在一些早期的Linux发行版中被广泛使用,但随着后续版本的推出(如ext3和ext4),它的使用逐渐减少。后续的ext3和ext4文件系统在可靠性、性能和功能上都有所改进,因此更适合用于当今的Linux系统。

每个 Ext2 分区中的第一个块从不由 Ext2 文件系统管理,因为它是为分区引导扇区保留的(参见附录 A)。Ext2 分区的其余部分被拆分为多个块组,某些数据结构必须正好适合一个块,而其他数据结构可能需要多个块。文件系统中的所有块组都具有相同的大小,并且按顺序存储,因此内核可以简单地从其整数索引中派生块组在磁盘中的位置。

块组可减少文件碎片,因为如果可能,内核会尝试将属于某个文件的数据块保留在同一块组中。块组中的每个块都包含以下信息之一:

  • A copy of the filesystem’s superblock 文件系统超级块的副本
  • A copy of the group of block group descriptors 块组描述符组的副本
  • A data block bitmap 数据块位图 区块对照表,用于快速的找到空区块
  • An inode bitmap inode 位图 inode对照表用于找到未使用的iNode号码
  • A table of inodes 索引节点表
  • A chunk of data that belongs to a file; i.e., data blocks 属于文件的数据块;即数据块

每个块组中的超级块和组描述符都是重复的。内核仅使用超级块和块组 0 中包含的组描述符,其他区块群组中超级块和描述是做备份使用。

4.1 Ext 2组成

首先,在格式化的时候,文件系统做了很多事,比如检测,然后格式化,主要的作用是建立的inode和数据区块等工作,格式化完成以后,用户才可以存放数据

1.头部 =引导扇区,对的文件系统部分也有对应的引导扇区,我们知道一个磁盘都有一个引导扇区,但是在哪一个扇区会执行对应的分区内部的文件爱你系统的扇区。

2.数据区块,ext2有1k/2k/4k三种区块

3.inode table

4.2 详解inode表组成

文件属性:读写执行属性wxr、文件所属用户组和拥有者、文件大小、文件的ctime、atime、mtime、

指向:即数据块块的位置指向

inode 大小为:128B

每一个文件都对应一个inode,文件系统能够建立的文件数量,对应的inode的个数,inode个数会限制系统可以创建的文件个数

5️⃣Ext2记录目录

当我们建立一个目录的时候,文件系统会分配一个iNode 与至少一个区块给目录。

iNode 记录属性和权限,并且记录分配数据区块位置

数据块:记录了目录下的文件名和文件占用的 iNode号码

查看文件的iNode 号码

osboxes@osboxes ~> ll -i
total 44K
11010057 drwxr-xr-x 4 osboxes osboxes 4.0K Dec 25 01:24 Desktop/
11010061 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Documents/
11010058 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Downloads/
11010051 -rw-r--r-- 1 osboxes osboxes 8.8K Mar 10 2019 examples.desktop
11010062 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Music/
11010063 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Pictures/
11010060 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Public/
11010059 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Templates/
11010064 drwxr-xr-x 2 osboxes osboxes 4.0K Mar 10 2019 Videos/
11010187 -rw-r--r-- 1 root   root       0 Dec 25 01:21 x

6️⃣Ext2记录文件

我们创建一个文件时候,文件系统会分配一个iNode 与文件大小的数据区块

举例:当我们在4K的ext文件系统上,创建一个100KB的文件时候,会发生什么?

1.分配一个iNode 和25个数据区块

2.由于iNode仅有12个直接指向,因此还会分配有一个区块来记录号码

7️⃣日志功能

日志的功能,主要用于系统的恢复。任何操作只有被日志记录完成,才算是最终完成了,如果在操作的过程中出现了断电等失败,就可以根据日志判断是否处理完成,以进行恢复和判断。

1.当系统写入一个文件时候,会先记录在日志记录区块中需要写入的文件信息

2.然后实际写入并且更新元数据信息

3.最后在日志中记录数据写入完成,

只有这三个步骤都完成,文件系统才算完成一个操作。这样,当写入失败或者发生中断,就可以到日志中检查、判断

8️⃣文件系统的实际运行

实际运行的过程中,日志会采用的异步方式运行。

前台用户操作文件,文件会被调入到内存中操作,操作完成后,文件并不会直接保存早硬盘,而是有系统自行判断是否需要写入硬盘,通常会先保存在内存中,方便用户下次调用。

对于前台用户来说,文件被修改了。

对于实际硬盘来说,此时可能并没有被写入,但是内存中的文件是被修改的。系统会自行处理,将内存文件与实际硬盘文件进行同步处理。

这就是所谓异步处理机制

他的本质是不影响前台用户使用逻辑的情况下,在后台系统自动优化硬盘的使用方式

由于内存比硬盘快很多,如果每次修改文件都要实时同步写入硬盘的话,会造成的系统运行很慢。而异步机制可以保证文件修改在内存中,给用户感觉写入到硬盘了,而系统会系统处理后台的逻辑。

用户可以使用sync命令,强制将已经修改的文件,手动写入到硬盘中。

同样这个命令会在用户关机或者重启的时候,自动执行,防止硬盘数据与内存数据不一致的情况发生。

发表评论

0 评论