linux正統標準文件系統ext2詳解


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







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章