学习自《Linux性能分析》
虚拟文件系统
Virtual Files System (VFS)是位于用户进程和各类Linux文件系统实现之间的抽象接口层。
Journaling
在一个non-journaling文件系统中,当进行写操作时,会先修改文件系统的metadata,然后才写用户数据。这样的操作很可能导致数据不完整。如果系统突然崩溃而刚好写操作正在修改文件系统的metadata,文件系统的一致性可能被破坏了。fsck命令通过检查所有的元数据并修复一致性在下次重启时。但是,如果文件系统的卷过大,那么将会花费很多时间来完成。
Journaling文件系统解决了这一问题:先写journal log,再写用户数据到文件系统中,但是这样就存在写性能问题了。
Ext2
ext2是ext3的前身,一个快速、简单的文件系统,没有journaling功能。
如下图所示,ext2文件系统从boot sector之后开始,跟随者许多block groups。将整个文件系统划分为多个block group有助于性能的提高,因为i-node和data blocks的存储位置比较贴近,那么seek time就能够降低。
Super block: 文件系统的信息,每一个block group都有一份拷贝。
Block group descriptor: block group的信息。
Data block bitmaps: 用于空闲data block的管理。
i-node bitmaps: 用于空闲i-node的管理。
i-node tables: i-node表都存储在这里,每一个文件都有相应的i-node表,用于存储文件的元数据:file mode, uid, gid, atime, ctime, mtime, dtime, pointer to data block。
Data blocks: 存储用户数据
例如查找/var/log/messages文件,内核会解析文件路径&#