本文基于Ext2文件系统,描述了建立系统分区后,建立的Ext2文件系统。
1️⃣文件系统和格式化
所谓格式化就是将分区格式成一种文件系统,使得操作系统可以实际进行访问。
每种操作系统可以操作的文件系统也是不同
比如:
- windows 在98之前都是使用的是FAT文件系统
- windows 2000之后使用的NTFS文件系统
- Linux 系统使用的是ext2文件系统
随着技术的发展,操作系统通常可以支持多种文件系统。
2️⃣分区与格式化关系
传统的一个磁盘分区只可以被格式化为一个文件系统,所以,也就有了一个文件系统对应的是一个磁盘分区。
新技术
LVM 和RAID 技术:
允许将一个分区格式化为多个文件系统,以及多个分区合并为一个文件系统,使得系统可以更加灵活的运行系统格式化问题。
但是明确的是:操作系统挂载的是文件系统。
3️⃣概览文件系统
这里我们概览下文件系统,但是我们不指定具体的文件系统,概述大多数文件系统都应该有的组成部分。
- 超级区块 superblock:这个部分用于记录文件系统的整体信息,包括inode与数据区块总量等等信息
- inode:一个文件占用一个inode,,主要记录的是文件属性,以及文件数据所在区块号码
- 数据区块 data block:存放的是一个文件具体的数据
相互之间的关系如图
这是一张典型的索引式的文件系统
inode 4记录了一个文件,数据块所在位置为:2、7、13、15
4️⃣Linux 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 评论