一、ext2文件系统结构
盘上创建分区,并在分区上创建ext2文件系统后,这个分区被分为固定大小的数据块(data block),每一个数据块都有一个从0开始的计数的块号。数据块又组合以数据块组(block group),每一个数据块组的数据块的个数是固定的,数据块的大小可以为1024B、2048B、4096B,默认是4096B,使用mke2fs 命令创建ext2文件系统,加-b参数指定大小。
一个ext2文件系统分区的物理结构示意图:
![](https://i-blog.csdnimg.cn/blog_migrate/8fb2e4d63f6e77222d671e7c788cca51.jpeg)
二、使用tune2fs –l + 分区可以显示super block所包含的主要信息。
三、示group descriptor中的主要信息
Group descriptor中主要包含有三个指针,分别指向block bitmap、inode bitmap和inode table。Bitmap中的每一个Bit对应一个block,如果bit为0,表示该block空闲,如果为1,表示该block有数据。
下面是使用debugfs命令的show_super_stats显示group descriptor中的内容。
[root@Chenjinrong ~]# debugfs /dev/sda1
debugfs 1.35 (28-Feb-2004)
debugfs: show_super_stats
Filesystem volume name: /boot
Last mounted on: <not available>
Filesystem UUID: 55c191bd-6888-483d-8424-f3d21061ca14
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype n
eeds_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 26104
Block count: 104388
Reserved block count: 5219
Free blocks: 89659
Free inodes: 26066
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2008
Inode blocks per group: 251
First inode: 11
Inode size: 128
Journal inode: 8
Directories: 3
Group 0: block bitmap at 259, inode bitmap at 260, inode table at 261
0 free blocks, 1990 free inodes, 2 used directories
四、Inode的内容
1、inode在一个数据块中的大小为128B
2、inode主要包含其对应文件的属性
l 文件类型
l 此文件的硬链接的数量
l 指向存储文件数据的data block的指针(一个inode中共存放15个inode指针,前12个为直接指针,指向的是数据块的块号,第13个是单级间接指针,指向的数据块是前面的直接指针,而不是数据,第14个是二级间接指针,指向的数据块是单级间接指针,第15个是三级间接指针,指向的是二级间接指针。)
l 文件长度(文件大小包含两类大小:一类是在创建文件的时候系统分配的大小,一般是一个数据块;另一类是文件的数据大小,是真正的数据大小。使用ls –l 命令所看到的就是数据的大小)
l 设备标识符
l 文件属主的UID
l 文件用户组的GID
l 访问权限
l 3个和文件相关的时间属性值(acces time,modify time,change time)当只是访问文件,如使用cat命令时,变的只是acces time,当只修改Inode中的内容是,如访问权限、文件属主等信息是,change time 会改变。
3、使用stat命令来查看一个文件或目录indoe的主要内容,但个并没有显示指针的信息。
[root@cjr~]#stat inode.txt
要显示指针的信息可以使用,[debugfs + 分区],进入debugfs内,使用stat +文件名,这样要指明文件的实际路径。
[root@Chenjinrong ~]# debugfs /dev/sda3
debugfs 1.35 (28-Feb-2004)
debugfs: stat /root/mbr.dd
Inode: 51424 Type: regular Mode: 0644 Flags: 0x0 Generation: 270867885
5
User: 0 Group: 0 Size: 512
File ACL: 99058 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x49ab0164 -- Mon Mar 2 05:43:00 2009
atime: 0x49ab01b0 -- Mon Mar 2 05:44:16 2009
mtime: 0x49ab0164 -- Mon Mar 2 05:43:00 2009
BLOCKS:
(0):118787---------*文件所在的数据块的块号,这里只有一个数据块,
TOTAL: 1----------*数据块的个数,这样为一个