第二代擴展文件系統(英語: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