文件系统是计算机存储中至关重要的一部分,负责组织和管理文件的存储和访问。在Linux系统中,ext2(Second Extended File System)是一个常见的文件系统,下面将深入探讨ext2文件系统的结构、特性和工作原理。
概述: ext2是Linux内核默认采用的文件系统之一,是ext文件系统的第二个版本。它引入了许多改进,如更大的文件名、更大的文件系统和更高的性能。
特性:
不支持日志功能: 与后续版本(如ext3和ext4)不同,ext2没有日志功能,这意味着在系统崩溃时可能需要较长时间来进行文件系统检查和修复。
支持软链接和硬链接: ext2支持软链接(symbolic links)和硬链接(hard links),使文件之间的关系更加灵活。
支持权限和属性: 类UNIX的权限模型得以保留,文件和目录具有权限、所有者、组等属性。
采用块组的概念*: ext2将文件系统划分为块组,每个块组包含一组数据块、inode和块位图。这有助于提高文件系统的性能和管理效率。
启动扇区(Boot Block):启动扇区是硬盘上的特殊区域,通常位于磁盘的第一个扇区。
包含引导加载程序的代码,用于引导加载操作系统。
启动扇区还可能包含分区表,描述硬盘上的分区结构。
块组(Block Group):块组文件系统中的组织单元,将硬盘划分为若干组,每组包含数据块、inode表和块位图。这种划分提高了文件系统性能和管理效率。
超级块(Super Block): 存放文件系统的结构信息,包括总的块和inode数量、未使用的块和inode数量、块和inode的大小、最近挂载、写入和检验磁盘的时间等。
块组描述符表(Group Descriptor Table): 每个块组都有一个块组描述符表,记录了块组内的元信息,如块位图、inode位图、inode表的起始块号等。
块位图(Block Bitmap): 用于跟踪文件系统中数据块的使用情况,每个位表示一个块的占用状态。
inode位图(Inode Bitmap): 跟踪inode的使用情况,每个位表示一个inode的占用状态。
inode表(Inode Table)*: 存储inode的详细信息,包括文件的大小、权限、拥有者、链接计数等。inode表与inode位图相对应,通过位图可以判断哪些inode正在使用。
数据块区(Data Blocks): 存储文件的实际数据,包括目录项、文件内容等。与inode表相对应,数据块区通过inode表中的块指针找到。
创建新文件,有以下 4 个操作:
假设有一个新文件 “example_file” 的创建过程:
1. 分配Inode:找到空闲的Inode(例如,Inode编号275891),记录文件信息。
2. 分配数据块:找到空闲的数据块(例如,块号400, 600, 900, 1000),将文件内容存储在这些块中。
3. 记录分配情况:在Inode的磁盘分布区记录数据块列表(按顺序400, 600, 900, 1000存放)。
4. 添加文件名到目录:在当前目录文件中添加文件名 “example_file” 和对应的Inode编号(275891)。
Block限制:
Block大小和数量在格式化后无法改变。
每个block最多放置一个文件的数据。
大文件会占用多个block数量。
如果文件小于block大小,剩余空间不能再被其他文件使用,导致磁盘空间浪费。
Inode限制:
每个Inode大小固定为128字节。
每个文件仅占用一个Inode。
文件系统能够创建的文件数量受限于Inode的数量。
在Linux系统中,你可以使用 ls 命令的 -i 选项来查看文件的inode号。以下是具体的操作方法:
ls -i 文件名或目录名
或
ls -il 文件名或目录名
硬链接和软链接是Linux文件系统中常用的两种链接方式,它们允许一个文件可以通过不同的文件名进行访问。下面是对硬链接和软链接的详细解释以及在Linux系统中的操作:
使用 ln 命令可以创建硬链接
语法为:ln <目标文件> <链接名>
所有硬链接与目标文件共享相同的inode和数据块,它们在文件系统中被视为同一实体。
修改其中一个硬链接的内容会影响所有其他硬链接。
每个文件都有一个硬链接数字段,表示有多少个硬链接指向该inode。
随着硬链接的增加,硬链接数也会增加。只有当硬链接数为0时,文件的数据才会真正被删除。
硬链接相当于给文件起别名。
删除硬链接
rm 文件名
软链接是一种特殊类型的文件,它指向另一个文件或目录。与硬链接不同,软链接是一个独立的文件,包含了目标文件或目录的路径信息。
使用 ln -s 命令可以创建软链接,语法为:
ln -s <目标文件或目录> <链接名>
unlink 文件名