日期:2014-05-16  浏览次数:20715 次

Linux那些事儿 之 ext4文件系统(0) 引子

曾经以为人生就这样了,浮躁的心拒绝再看代码。然而来到美国两年之后,我于本月初去了一趟拉斯维加斯,发现在那儿找个美国小姐要八百美金,而且还不是包夜。当那个金发美女都已经走进我的房间,我却因为价钱太贵承受不起而决定取消的时候,我觉得我的人生真是太失败了。那晚,看她出去之后,我内心一阵郁闷,于是打开电脑开始看A片,怎奈看到一半电脑竟然说文件系统崩溃了。我心想ext4文件系统不是号称很强大吗,怎么这么容易就崩溃了呢?而且平时也不崩溃,怎么关键时候就这么坑爹啊!于是我连夜看了一晚上ext4文件系统的代码,发现是由该文件系统里的一个bug引起的。折腾了半天,给内核打了个补丁,解决了这个问题,系统能用了,然而却再也没心情看A片了,倒是觉得有必要把这些ext4文件系统的代码的阅读心得给记下来。于是便有了这个系列文章。

 

看内核代码的第一个问题是相关的代码到底在哪里。话说距离写usb那些文字已经过去五年了,而我已经从当初的IT民工变成了今日的北美猥琐男。尽管我已不再年轻,但我依然像杨钰莹一样纯洁,我依然保留着那份男人的直觉,这直觉告诉我,ext4文件系统相关的代码在fs/ext4目录下面,列举一下该目录里面的内容:(我看的代码是Linux Kernel 3.4.4版本的)

 

$ls

acl.c    bitmap.c         ext4_extents.h ext4_jbd2.h  fsync.c  indirect.c  Kconfig   mballoc.h move_extent.c  resize.c   truncate.h xattr_security.c

acl.h    block_validity.c ext4.h         extents.c    hash.c   inode.c    Makefile  migrate.c namei.c       super.c    xattr.c    xattr_trusted.c

balloc.c dir.c            ext4_jbd2.c     file.c      ialloc.c ioctl.c     mballoc.c  mmp.c     page-io.c     symlink.c  xattr.h    xattr_user.c

 

用wc命令看一下,

$wc -l *

   439acl.c

    77acl.h

   766balloc.c

    31bitmap.c

   268block_validity.c

   667dir.c

   296ext4_extents.h

  2372 ext4.h

   154ext4_jbd2.c

   399ext4_jbd2.h

  4866 extents.c

   262file.c

   271fsync.c

   208hash.c

  1158 ialloc.c

  1502 indirect.c

  4676 inode.c

   509ioctl.c

    85Kconfig

    14Makefile

  5047 mballoc.c

   222mballoc.h

   604migrate.c

   353mmp.c

  1423move_extent.c

  2607 namei.c

   433page-io.c

  1689 resize.c

  4980 super.c

    56symlink.c

    43truncate.h

  1608 xattr.c

   155xattr.h

    82xattr_security.c

    58xattr_trusted.c

    61xattr_user.c

 38441 total

 

纯ext4的代码就有三万八千多行。如果一天看一行的话,一百年也才能看个三万六千多行。但是没办法,学计算机的人都只有苦逼的命。像我这样的屌丝对于生活其实没有太多选择,如果能选择,那我希望自己生活在新闻联播里,那