如何使用 superBlock 结构区分 ext3 和 ext4?

如何使用 superBlock 结构区分 ext3 和 ext4?

SuperBlock 中是否有任何 Flag 或某个字节,我可以通过它来区分它是 ext4 还是 ext3 文件系统?我已经在 Google 上搜索过,找到了 ext3 和 ext4 的一些内部结构,但找不到答案。

ext2、ext3 和 ext4 的历史
SANS 数字取证和事件响应博客

答案1

首先,让我们创建两个小的磁盘映像文件my-ext3和并分别在和my-ext4中格式化它们,以便我们可以测试并查看差异:ext3ext4

truncate -s 10M my-ext3
mkfs.ext3 my-ext3

truncate -s 10M my-ext4
mkfs.ext4 my-ext4

现在检查它们是什么的最简单方法是使用以下file命令:

$ file my-ext*
my-ext3: Linux rev 1.0 ext3 filesystem data, UUID=7ba99eb3-57c0-4d81-a2e7-529fdee64cbb (large files)
my-ext4: Linux rev 1.0 ext4 filesystem data, UUID=2308e0f8-443e-4164-b5ee-4810e9def008 (extents) (large files) (huge files)

如您所见,它正确识别了每种文件系统类型。您还可以使用fsck、通过挂载它们或使用某些分区工具来检查文件系统。

然而,@林兹温德指出他的评论、所有ext2和文件系统基本相同,只是更高版本支持更多文件系统功能。这些不会直接告诉您它是还是,ext3但您可以检查每个功能从哪个文件系统版本开始可用。如果您发现任何-only 功能,那一定是。让我们来看看它们。ext4ext3ext4ext4ext4

检查文件系统的命令是dumpe2fs。我们只对超级块数据感兴趣,所以我们添加了选项-h,否则控制台也会充斥着大量的 inode 信息。对我们来说,只有它们的“文件系统功能”才是有趣的,所以让我们使用grep它来过滤掉它:

$ dumpe2fs -h my-ext3 |& grep "^Filesystem features:"
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file

$ dumpe2fs -h my-ext4 |& grep "^Filesystem features:"
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize

现在我们有两个文件系统功能列表,可以检查每个列表以找出ext?支持每个功能的最低文件系统修订版本。我们可以查看man ext4它,它包含一个列表,其中包含所有ext4文件系统功能、它们的描述以及它们受支持的时间。

我为您列出了一个小列表,并按支持它们的第一个修订版对功能进行了排序ext?。较旧修订版中的所有功能在较新的修订版中也受支持:

  • ext2 ext_attr,,filetypesparse_super
  • ext3 dir_indexhas_journal
  • ext4 64bit,,,,,,,,,,bigallocdir_nlinkextentextra_isizeflex_bghuge_filemeta_bgmmpuninit_bg

在 中描述了更多功能man ext4,但没有关于哪些文件系统修订版支持它们的信息:journal_devlarge_filesparse_super2quotaresize_inode
可能它们自 以来都存在ext2,但我不能 100% 确定。如果您对他们有更多了解,请发表评论。

相关内容