性能优化
为了提高文件系统的I/O读写操作性能,Ext2想了一些办法:
1. 当需要读取一个块时,文件系统实际上不光把这个块的内容读出来,而且会将与该块相邻的几个连续块都读出来,然后放到缓冲缓存中。这样对于连续读操作,就可以减少I/O操作次数。
2. Ext2在为文件分配块的时候,会将一个文件的数据块和inode尽量放在一个块组中。因为一个块组中的块之间的距离比较近,这样就能够减少读文件inode节点和数据块的寻道时间。
3. 当要往一个文件中写数据时,Ext2在分配一个数据块时,还会预先分配相邻的8个块,这样后面的数据再写到文件中时,就只向这些预先分配好的块中写数据就行了。这样一个减少了分配块的次数,提高了写数据的效率。另外还带来了一个好的副作用是,相邻的块文件可以增加以后连续读时的效率。
5. Ext2 库
Ext2开发了libext2fs库以使用户能够操作Ext2的控制结构。其中还有一些函数能够通过直接访问文件系统来检查和修改文件系统的数据。比如说mke2fs、e2fsck、tune2fs、dumpe2fs和debugfs。
Ext2fs库提供了几类操作函数。第一类是面向文件系统操作的。这些函数可以打开和关闭文件系统,读写位图块,创建新的文件系统,操作文件系统中的坏块列表。第二类操作是影响目录的,比如创建、扩展、增加和删除目录。还有通过路径名解析到inode号,以及相反--通过inode号解析路径名。最后一类操作是围绕inode节点的,比如扫描inode表,读写inode以及扫描inode中所有的块,还有申请空闲块和inode。
6. Ext2文件系统工具
Ext2设计了一些好用的工具,让我们来看看。
mke2fs:用来初始化一个包含空的Ext2文件系统的分区。
e2fsck:用来在非正常关机后文件系统不一致的情况下进行修复文件系统用的。
debugfs:可用来检查和改变文件系统的状态,然后手工修复一个崩溃的文件系统,后者为e2fsck创建测试用例。