今天在复习《鸟哥的私房菜-基础学习篇》,看到 inode 大小为 128bytes ,想看下这 128 字节里面到底是什么样的。于是我查了下 google ,发现 ext2/3 是 128 字节, ext4 是 256 字节了。
官方介绍: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Size
它说 ext4 的 inode 结构最后面新加了 28 字节( i_extra_isize = 28 ),是 156 字节 (在 2013 年),然后我查了下 ext4_inode 的代码:
https://gist.github.com/liuxu0315/9687560faab54bff77b06e91a93ab5dc
以为我眼花了,算了好几遍,怎么算都是 32 字节, ext4 的 inode 结构应该是 160 字节才对。我一想,可能是官方 wiki 太老了, ext4 的代码在 2013 年之后改动过,于是我到 github 上 clone 了 linux 源码,用 git log 一查,果然被改过。
$ git clone https://github.com/torvalds/linux.git
$ cd linux
$ git log -L 753,761:fs/ext4/ext4.h
输出:
commit 8b4953e13f4c5d9a3c869f5fca7d51e1700e7db0
Author: Theodore Ts'o <tytso@mit.edu>
Date: Sat Oct 17 16:15:18 2015 -0400
ext4: reserve code points for the project quota feature
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -687,8 +690,9 @@
__le16 i_extra_isize;
__le16 i_checksum_hi; /* crc32c(uuid+inum+inode) BE */
__le32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */
__le32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */
__le32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */
__le32 i_crtime; /* File Creation time */
__le32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */
__le32 i_version_hi; /* high 32 bits for 64-bit version */
+ __le32 i_projid; /* Project ID */
可以看见在 2015 年 10 月的时候加了“__le32 i_projid; /* Project ID */”,所以比 2013 年的 ext4_inode 多了 4 字节,为 160 字节。
顺便贴上我的 blog ,只谈技术。 我是个新手,有对我文笔有建议的希望能直接指出,谢谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.