第二代扩展文件系统(英语: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等。
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 又多了一层指针。
我们可以计算一下这样的分层结构可以使一个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