liunx ext2文件系统结构

来源:互联网 发布:url域名 网站 ip的区别 编辑:程序博客网 时间:2024/04/30 11:21
原文:http://hi.baidu.com/cjrwyy/blog/item/7e34da42942cb5199313c690.html 

一、ext2文件系统结构

盘上创建分区,并在分区上创建ext2文件系统后,这个分区被分为固定大小的数据块(data block),每一个数据块都有一个从0开始的计数的块号。数据块又组合以数据块组(block group,每一个数据块组的数据块的个数是固定的,数据块的大小可以为1024B2048B4096B,默认是4096B,使用mke2fs命令创建ext2文件系统,加-b参数指定大小。

一个ext2文件系统分区的物理结构示意图:

二、使用tune2fs –l +分区可以显示super block所包含的主要信息。

三、示group descriptor中的主要信息

   Group descriptor中主要包含有三个指针,分别指向block bitmapinode bitmapinode tableBitmap中的每一个Bit对应一个block,如果bit0,表示该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的内容

1inode在一个数据块中的大小为128B

2inode主要包含其对应文件的属性

l       文件类型

l       此文件的硬链接的数量

l       指向存储文件数据的data block的指针(一个inode中共存放15inode指针,前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----------*数据块的个数,这样为一个