文章引用自:鸟哥的 Linux 私房菜,经过部分修改
Linux 文件系统中涉及的几个基本概念
superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等
inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码
block:实际记录文件的内容,如果文件太大,会占用多个 block
inode 和 block 都有编号,找到一个文件的 inode 便可以找到存放文件的 block
这种文件系统统称为索引式文件系统
不同于索引式,FAT 文件系统使用的是类似于链表的存储系统
这种文件系统无法直接得到文件大小,并且在一个文件的 block 比较分散的时候,文件读取的性能便会降低,所以才有了“磁盘碎片整理”这一说法。
注意:实际上,如果 Linux 的文件较大,而存储文件内容的 block 比较分散,也是会产生读取性能降低的问题。这时可以将文件系统的中的文件备份,格式化文件系统,然后将文件恢复回去即可解决。
Ext2 文件系统
文件系统在一开始便已经规划好所有的 inode 和 block,除非重新格式化或改变文件系统大小
Ext2 文件系统在格式化式会分为多个 block group,每个 block group 都有自己的 superblock/inode/block。如下图
data block:
用来存放文件内容,Ext2 支持的 block 大小有 1K、2K、4K 三种。
Block 大小 |
1KB |
2KB |
4KB |
最大单个文件 |
16GB |
256GB |
2TB |
文件系统最大容量 |
2TB |
8TB |
16TB |
原则上 data blcok 的数量和大小只在格式化的时候确定
每个 data block 只能存放一个文件的内容,也可以说一个文件使用的存储空间是以 data block 为单位的
inode table:
inode 记录了存取模式(r/w/x)、owner、group、文件大小、ctime、atime、mtime、setuid、setgid、文件内容的指针。
每个 inode 大小均为 128 byte
每个文件只占用一个 inode,因此文件系统所能建立的总档案数目与 inode 数目有关,而 inode 的数目和大小在格式化时指定
由于 inode 大小有限,且文件所在的 block 的数目可能很庞大,为了使用有限的空间记录庞大的 block 号码信息,所以文件系统将 inode 记录 block 号码的区域划分为 12 个直接记录区、1 个间接记录区、1 个双间接记录区、1 个三间接记录区。(每个 data block 号码需要 4 byte 空间)
这里的间接记录区就是将一个 data block 作为记录 block 号码的记录区。
这样,在 block 大小为 1K 的文件系统中,一个 inode 可以记录的最大 data block 号码数量为:12 + 1K / 4 + 1K / 4 * 1K / 4 + 1K / 4 * 1K / 4 * 1K / 4 = 16 M,所以一个 inode 在 block 大小为 1K 的情况下可以记录的最大文件大小为 16G。
(由于 Ext2 文件系统对于大于 2K 的 block 有限制,所以以上算法并不适用于 2K 和 4K 大小的 block)
super block:
记录整个文件系统的信息:block 与 inode 的大小与总量、文件系统的挂载时间等相关信息
由于文件系统中应该只有一个 super block,实际上除了第一个 block group 必须包含 super block,而其他的 block group 中的 super block 仅仅是第一个的备份
文件系统描述(FileSystem Description):
记录每个 block group 起始与结束的 block 号码,以及说明每个区段(superblock、block bitmap、inode bitmap、data block)分别介于哪个 block 号码之间。
可使用 dumpe2fs 来查看此部分信息。
区块对照表(block bitmap):
记录每个 block 是否为空。
在创建文件时查找空 block,并更新为非空;在删除文件时将不用的 block 更新为空。
inode 对照表(inode bitmap):
类似于 block bitmap,记录每个 inode 是否在使用。
如果需要查询文件系统的信息,可以使用 dumpe2fs 命令
目录在文件系统中的存储
目录在的存储与文件相同。
当创建一个目录时,文件系统为其分配一个 inode 和至少一个 data block(所以在 block 大小为 4K 的文件系统中,大多数的目录大小为 4096),inode 中记录目录的权限、属性、data block 号码等信息,而 data block 中记录的是目录下所有文件/目录的名称以及相应的 inode 号码。
可以使用 ls -i 查看一个目录下的文件的 inode 号码
创建文件的步骤:
- 确定用户对文件所在目录具有 w 和 x 权限
- 在 inode bitmap 中找到没有使用的 inode,写入文件相关信息
- 在 block bitmap 中找到没有使用的 block 并写入文件内容,更新 inode 中的 block 号码信息
- 更新 inode bitmap、block bitmap,然后更新 superblock 内容
日志式文件系统(Journaling Filesystem)
Ext2 文件系统对于文件创建的操作是先写入 inode 再写入 block,所以如果在写入 inode 之后,创建操作中断,则会出现资料不一致状态。
系统在开机时会根据 super block 中的信息判断是否出现了资料不一致状态,可以使用 e2fsck 命令进行资料不一致状态的检查。这种检查非常费时。
为了避免出现资料不一致状态,引入了日志式文件系统
日志式文件系统引入一个日志区块,该区块记录文件创建或修改操作。
日志式文件系统创建一个文件的步骤为:
- 准备:首先在日志记录区块中记录准备进行的文件操作的信息
- 实际操作:写入文件权限等信息,写入文件内容
- 结束:在日志记录区块中标记操作已完成
这时,如果在文件操作过程中出现了问题,可以直接查询日志得到具体的错误,然后进行修复。
Ext3 文件系统便是日志文件系统,它为 Ext2 的升级版。
分享到:
相关推荐
(8)copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝。 (9)del …: 删除文件:删除指定文件,不存在时给出出错信息。 (10)check:检测并恢复文件...
本次实验是关于Linux文件系统及文件管理的上机操作,旨在让学生深入理解和熟练运用Linux操作系统中的文件系统管理和文件操作。实验涵盖了文件系统的格式化、挂载与卸载,目录和文件的创建、移动、复制、删除,以及...
C语言模拟实现Linux文件系统 1、在内存中开辟一块空间来模拟文件系统的运行,不读写硬盘。 2、面向单用户、单任务,不考虑并发,不考虑文件属主、组等概念。 3、程序开始后,初始化并接收用户输入。若输入”enter”...
"Linux文件系统的模拟实现" Linux文件系统是操作系统的核心组件之一,负责管理存储设备上的数据组织和访问。 Linux文件系统的模拟实现是指通过软件模拟实现一个Linux文件系统,来加深对文件系统的理解。 文件系统...
本篇将深入探讨Linux文件系统的结构,并阐述进程如何操作文件。 首先,Linux文件系统采用了一种层次式的目录结构,这种结构起始于根目录 `/`。所有其他目录和文件都是从这个根目录开始的,通过斜线 `/` 分隔的路径...
这篇学习资料详细介绍了Linux文件系统的一些关键概念和技术。 1. 文件系统类型 Linux支持多种文件系统类型,如EXT2、EXT3、EXT4、XFS、Btrfs、FAT、NTFS等。EXT4是目前最常用的一种,它在EXT2的基础上进行了优化,...
### Linux文件系统基础知识详解 #### 一、文件系统概述 文件系统是操作系统中不可或缺的核心组成部分之一,它负责管理和组织存储设备(如硬盘、SSD等)上的数据。具体而言,文件系统定义了一套规则和数据结构,用...
Linux 文件系统源码是了解操作系统核心机制的重要组成部分,特别是对于那些想要深入理解Linux内核以及文件系统工作原理的开发者和研究者来说。在这个压缩包中,包含了一系列的源码文件,涉及到了多种不同的文件系统...
Linux文件系统是Linux操作系统的核心组成部分,它负责管理和存储数据,为用户提供访问文件和目录的统一接口。Linux的一大特性是支持多种文件系统,包括但不限于ext、ext2、xia、minix、umsdos、msdos、vfat、proc、...
本文主要探讨了在Red Hat 9.0环境下Linux文件系统的管理,包括磁盘管理的各个方面。 1. Linux 文件系统类型 Linux 支持多种文件系统,如ext2、ext3和ext4,其中Red Hat 9.0默认使用ext3文件系统。ext3是一种日志...
模拟Linux文件系统。在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟Linux文件系统 在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。 2. 编写一管理程序对此空间进行管理,以...
Linux 文件系统详解 Linux 文件系统是 Linux 操作系统的核心组件之一,负责管理和组织存储在磁盘等存储设备上的文件。Linux 文件系统的核心是树状目录结构,目录提供了管理文件的一个方便而有效的途径。Linux 使用...
Linux 文件系统目录结构的详细解说 Linux 文件系统目录结构是 Linux 操作系统的根目录结构,它是 Linux 文件系统的组织者,也是最上级的领导者。 Linux 文件系统的目录结构可以用树形结构来形象地描述。在 Linux ...
用C编写的一个Unix/Linux文件系统
Linux文件系统概念