第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2 的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。其他的实现包括GNU Hurd,Mac OS X (第3方),Darwin (第3方),BSD。ext2为数个LINUX发行版的默认文件系统,如Debian、Red Hat Linux等。


wKioL1SzgZKzNaqdAAB_XDeOiyQ952.jpg

Group Descriptor:

(1)、一个block指针指向这个block group的block bitmap,bitmap的每一个bit对应一个块,如果bit为0表示有数据,bit为1表示没有数据;

       bitmap本身占用了一个块,假设block大小为 S Byte,那么block bitmap只能记载 8 * S block的情况,所以一个block group的

       最大容量只能是 8 * S * S Byte,如果block的大小为 4096 B,则每个block group的块数量是:4096 * 8 = 32768 。


(2)、另外一个block指针指向 inode bitmap,这个bitmap也正好占用一个block,其中每个bit对应一个node。


(3)、还有一个重要的block指针指向 inode table,inode table就是这个block group中全部inode构成的一个表,此表占用非常多块。


查看指定分区上super block所包含的主要分区:

[root@Oracle ~]# tune2fs -l /dev/sda1

tune2fs 1.41.12 (17-May-2010)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          26f717ca-7d24-4577-9687-c588b8992e70

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file

Filesystem flags:         signed_directory_hash 

Default mount options:    user_xattr acl

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              32768

Block count:              131072

Reserved block count:     6553

Free blocks:              119489

Free inodes:              32730

First block:              0

Block size:               4096

Fragment size:            4096

Reserved GDT blocks:      31

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         8192

Inode blocks per group:   512

Filesystem created:       Fri Nov 28 23:19:46 2014

Last mount time:          Mon Jan 12 10:33:06 2015

Last write time:          Mon Jan 12 10:33:06 2015

Mount count:              8

Maximum mount count:      -1

Last checked:             Fri Nov 28 23:19:46 2014

Check interval:           0 (<none>)

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:          256

Required extra isize:     28

Desired extra isize:      28

Journal inode:            8

Default directory hash:   half_md4

Directory Hash Seed:      b8644024-bfaf-4f57-881b-1baedc261dd1

Journal backup:           inode blocks

使用debugfs命令的show_super_stats,可以查看super block以及 block group的信息,如附加-h参数,可以只查看super block。

[root@Oracle ~]# debugfs /dev/sda1

debugfs 1.41.12 (17-May-2010)

debugfs:  show_super_stats

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          26f717ca-7d24-4577-9687-c588b8992e70

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_f

ile

Filesystem flags:         signed_directory_hash 

Default mount options:    user_xattr acl

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              32768

Block count:              131072

Reserved block count:     6553

Free blocks:              119489

Free inodes:              32730

First block:              0

Block size:               4096

Fragment size:            4096

Reserved GDT blocks:      31

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         8192

Inode blocks per group:   512

Filesystem created:       Fri Nov 28 23:19:46 2014

Last mount time:          Mon Jan 12 10:33:06 2015

Last write time:          Mon Jan 12 10:33:06 2015

Mount count:              8

Maximum mount count:      -1

Last checked:             Fri Nov 28 23:19:46 2014

Check interval:           0 (<none>)

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:          256

Required extra isize:     28

Desired extra isize:      28

Journal inode:            8

Default directory hash:   half_md4

Directory Hash Seed:      b8644024-bfaf-4f57-881b-1baedc261dd1

Journal backup:           inode blocks

Directories:              6

 Group  0: block bitmap at 33, inode bitmap at 34, inode table at 35

           27032 free blocks, 8175 free inodes, 2 used directories

 Group  1: block bitmap at 32801, inode bitmap at 32802, inode table at 32803

           32149 free blocks, 8175 free inodes, 1 used directory

 Group  2: block bitmap at 65536, inode bitmap at 65537, inode table at 65538

           28153 free blocks, 8192 free inodes, 0 used directories

 Group  3: block bitmap at 98337, inode bitmap at 98338, inode table at 98339

           32155 free blocks, 8188 free inodes, 3 used directories


一个inode中存放15个block指针:

前12个直接指针指向的data block存放的就是用户数据;

第13个block指针称为单级间接指针(indirect),但是指向的数据块中存放的不是文件,而是指向data block的指针。

第14个block指针称为二级间接指针(double indirect),其指向的数据块中存放的都是block指针,这些block指针指向

的block也被全部用来存放block指针,最后这部分block指向的block才是存放用户数据。

第15个block指针称为三级间接指针(triple indirect),比上面说的double indirect 又多了一层指针。

wKioL1SzkRDC5hO-AADrAHeFia4907.jpg


我们可以计算一下这样的分层结构可以使一个inode对应的文件的最大大小达到多少。

假设数据块大小为1024 B,利用12个间接指针,可以保存最大为12 KB的文件,当文件超过

12 KB时,则要利用单级间接指针,该指针指向的数据块保存有一组数据块指针,这些指针

依次指向包含有实际数据的数据块,假设每个指针占用4 B(32 bit系统),则每个单级指

针可以保存1024/4=256个数据指针,因此利用直接指针和单级间接指针可保存1024 * 12 + 1024 * 256 = 268 KB,当文件超过268 KB,

则需要使用二级直接指针,直到使用三级间接指针。

(1)、block为1024 B的时候,最大大小:1024 * 12 + 1024 * 256 + 1024 * 256 * 256 + 1024 * 256 * 256 * 256

(2)、block为2048 B的时候,最大大小:1024 * 12 + 1024 * 512 + 1024 * 512 512  + 1024 * 512 512 512 

(3)、block为2048 B的时候,最大大小:1024 * 12 + 1024 * 1024 + 1024 * 1024 1024 + 1024 * 1024 * 1024 * 1024