ext2/ext3/ext4 文件系统初探

ext2文件的硬盘layout,看 http://learn.akae.cn/media/ch29s02.html 这篇文章,用od直接看ext2文件系统的二进制信息,最清楚了(当然,看kernel代码也行,但看静态的还是直观一些),文章帮了大忙,可惜不知道作者是谁。

不是每个Group都有super block、group descriptor的,比如一个磁盘划了8个Group,只有Group 0/1/3/5/7 这5个Group是有这两项的,如果Group数更多,那么另有挑选算法。其中super block只占一个block(所以不能创建block小于1k的ext2文件系统,因为太小了super block放不下),group descriptor占一个或多个block。

block bitmap、inode bitmap、inode table是每个Group都有的。

为了支持resize功能(即ext2文件系统可以动态增大)用了一个叫Reserved GDT的结构,它其实就是一个大文件,有自己的inode,自己的data block(包括各个间接块),它占着的位置是group descriptor后面的一些block,这样,如果文件系统动态增大,Reserved GDT就正好腾出一部分空间让group descriptor往下扩展。我刚开始不知道Reserved GDT时用od看二进制layout时还颇为迷惑了一阵——这个巨大且内容跨Group的文件是谁弄的?

ext2文件系统里,软链接其实就是把完整的目录信息放到了inode里,如果这个目录信息大于60个字节(因为inode的长度128个字节也很紧张),就只能让inode指向一个单独分配的block(跟普通文件类似),在此block里面放目录信息。

ext2文件系统还支持“xattr",这个据说是Mac OS里的文件系统最早支持的,后来被NTFS和ext2等学到了。其实就是让inode里的i_file_acl成员为一个block号,这个block里存放着xattr信息(xattr的存放结构参考http://lxr.linux.no/linux+v2.6.26.8/fs/ext2/xattr.c),由于最多就这么一个block,所以ext2里针对一个文件的xattr数量有限制,超过就报错。

ext3文件系统里的super block里有一个成员s_journal_inum,存放着作为journal的文件的inode号,通过这个号就能在inode table里找到对应的inode了。

ext4文件系统开始引入了一种不同于”间接块“的存放结构,叫extent,文章 http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc5/ 有清楚的图示,不过这个图是指比较大的文件了,当文件较小时,ext4_inode里ext4_extent_header后面直接放ext4_extent。从inode里的成员i_flags可以看出此inode是否使用了extent结构(i_flags & EXT4_EXTENTS_FL)。


相关文章

分类

6 Comments

hackage said:

第一本书是宋劲杉先生的 亚嵌讲师 清华硕士好像

DongHao Author Profile Page said:

噢,那真要感谢他了

fjh said:

这篇文件系统的文章虽然短小,但是内容却是很精准的,我自己学习了一个月才慢慢琢磨出一些规则,这篇文章真的很赞!

DongHao Author Profile Page said:

主要的知识都是从马涛 (http://blog.tao.ma/) 和李勇 (http://blog.coly.li/) 两位同事那里学来的,先感谢他们俩!

henshao said:

"不是每个Group都有super block、group descriptor的",这句话讲得有问题吧?每个Group不一定有super block,但一定有group descriptor吧?

DongHao Author Profile Page said:

喔,这个是我表达有误。每个group当然是都有代表自己的“group descriptor”的,但是,不是每个group里都包含装有”group descriptor table“的block的。

留言:

关于文章

This page contains a single entry by DongHao published on 01 20, 2011 3:11 PM.

rpm spec文件里的%postun was the previous entry in this blog.

家庭笑话三则 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.