深入解析ext2文件系统之mke2fs
生活随笔
收集整理的這篇文章主要介紹了
深入解析ext2文件系统之mke2fs
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? 上一遍博文的重點其實將ext2整體的組織框架,我們知道了ext2文件系統由塊組組成,每個塊組里面的組織形式。我們甚至直接把超級塊和組描述符里面的內容,用十六進制形式展現了出來。這篇博文主要講述如何mke2fs生成合適需要的ext2 文件系統,基本就是參數選擇的問題。 ? ? ? ?mke2fs 常用的幾個參數有: ? ? ? 1) ? ?-b ? ? block-size . ? ? ??塊大小是ext2文件系統比較重要的一個參數,目前只支持1024、2048和4096。上篇博文講到了其中的一點,就是塊大小決定了每個塊組最多管理多少個block塊。因為塊組中用1個block作為位圖來之時該塊組的某一塊是否空閑。 ? ? ? ? 1024----最多有8K個塊----------塊組大小為8M字節 ? (1024字節/block*8K塊) ? ? ? 2048----最多有16K個塊---------塊組大小為32M字節 ? ? ? 4096----最多有32K個快----------塊組大小為128M字節 ? ? ? 說block-size重要,不光是因為他決定了塊組的一些屬性,她還決定了一個ext2文件的屬性(最大長度)。我們知道Inode中有個長度為15的數組指向文件的數據存儲的塊。前12個為直接指針,指向了數據所在的block塊。第13 個數組元素是1級間接指針,第14個數組元素為二級間接指針,第15個元素為三級間接指針,通過間接指針,ext2支持的文件最大長度獲得了極大的擴展。 ? ? 文件的組織形式不是這篇博文的重點,我們掠過不細講
表 1. 各種數據塊對應的文件尋址范圍
?? 默認情況下為1024。blocksize決定了,總的塊數也就決定了(在磁盤空間一定的情況下。比如我們空間就是500MB)。
linux-tods:/mnt/bean # mke2fs?/dev/loop0 mke2fs 1.41.9?(22-Aug-2009) Filesystem label= OS type:?Linux Block size=1024 (log=0) Fragment size=1024?(log=0) 128016 inodes,?512000 blocks 25600 blocks?(5.00%)?reserved?for?the super user First data block=1 Maximum filesystem blocks=67633152 63 block groups 8192 blocks per group,?8192 fragments per group 2032 inodes per group Superblock backups stored?on?blocks:? ????8193,?24577,?40961,?57345,?73729,?204801,?221185,?401409 Writing inode tables:?done? Writing superblocks?and?filesystem accounting information:?done This filesystem will be automatically checked every 26 mounts?or 180 days,?whichever comes first.?Use tune2fs?-c?or?-i?to?override. ? 或者 linux-tods:/mnt/bean # tune2fs -l /dev/loop0 tune2fs 1.41.9 (22-Aug-2009) Filesystem volume name: ? <none> Last mounted on: ? ? ? ? ?<not available> Filesystem UUID: ? ? ? ? ?8feecddf-756d-427f-9018-7993119aced5 Filesystem magic number: ?0xEF53 Filesystem revision #: ? ?1 (dynamic) Filesystem features: ? ? ?ext_attr resize_inode dir_index filetype sparse_super Filesystem flags: ? ? ? ? signed_directory_hash? Default mount options: ? ?(none) Filesystem state: ? ? ? ? clean Errors behavior: ? ? ? ? ?Continue Filesystem OS type: ? ? ? Linux Inode count: ? ? ? ? ? ? ?128016 Block count: ? ? ? ? ? ? ?512000 Reserved block count: ? ? 25600 Free blocks: ? ? ? ? ? ? ?493526 Free inodes: ? ? ? ? ? ? ?128005 First block: ? ? ? ? ? ? ?1 Block size: ? ? ? ? ? ? ? 1024 Fragment size: ? ? ? ? ? ?1024 ? ? ?用戶可以修改成4096,這樣的話,總塊數一會跟著變化從512000變成了128000.
linux-tods:/mnt/bean # mke2fs?-b 4096?/dev/loop0 mke2fs 1.41.9?(22-Aug-2009) Filesystem label= OS type:?Linux Block size=4096 (log=2) Fragment size=4096?(log=2) 128000 inodes,?128000 blocks 6400 blocks?(5.00%)?reserved?for?the super user First data block=0 Maximum filesystem blocks=134217728 4 block groups 32768 blocks per group,?32768 fragments per group 32000 inodes per group Superblock backups stored?on?blocks:? ????32768,?98304 Writing inode tables:?done? Writing superblocks?and?filesystem accounting information:?done This filesystem will be automatically checked every 39 mounts?or 180 days,?whichever comes first.?Use tune2fs?-c?or?-i?to?override. --------------------------------------------------------------------------------------------------- 2) ?-m reserved-blocks-percentage ?? ? ? 為超級用戶保留的塊的比例。為了防止所有的塊都被用光,某些情況下啟動不起來,必須要為超級用戶保留一定比例的塊,這個值默認是5%。下面是上篇博文中默認參數中的保留塊。 ? ? ? ? ? ? ?block總數*%5 = 保留塊的塊數。 ? ? ? ? ? ?Block count:?512000 ? ? ? ? ? ?Reserved block count:?25600 ? ? ??下面看下我將它參數修改成10%:可以看到,Reserved block count變成了51200 。 一般來說這個參數不需要改變。
linux-tods:/mnt/bean # mke2fs -m 10 /dev/loop0 mke2fs 1.41.9 (22-Aug-2009) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 128016 inodes, 512000 blocks 51200 blocks (10.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67633152 63 block groups 8192 blocks per group, 8192 fragments per group 2032 inodes per group Superblock backups stored on blocks:? ????8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 ? Writing inode tables: done? Writing superblocks and filesystem accounting information: done ? This filesystem will be automatically checked every 23 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. ------------------------------------------------------------------------------------------------------- ? ??? ?3 ? ?-i bytes-per-inode ? ? ??? ? ? ?這個參數是我認為是比較重要的一個參數。這個參數乍一看看不懂是干嘛的,深入理解linux內核講到mke2fs的時候,說缺省選項是每8192個字節的組分配一個inode。第一次看,沒看懂啥意思。畢竟不如blocksize這么通俗易懂。后來我才明白了。(另外,這個參數ULK是錯的,我測試了,我mke2fs默認為4096字節每inode) ? ? ? 這個參數的含義是多少個字節分配一個inode。這個參數反映的是,我們對儲存在我們文件系統上的每個文件大小的期許。換句話說,我們期待,每個文件都是4096個字節左右,每個文件需要一個inode。所以我們一共需要500M/4096=12800個inode。 ? ? ? 舉例說明,如果我打算在我這個ext2存儲的文件都很小,比如說大多數文件都小于1K。那么如果這個-i的值為8192的話,就會出現下面的情況:總共有512000個塊卻只有64008個inode。 如果你還沒體會到我的意思,那么看Group 0 ,1000個左右的free inode,但是有近8000個free block 。根據我的設定,我的文件大多數比較小,那么,當我的文件個數達到1000個時 free inode先用完了,Group 0 還有近7000個塊空閑。 也就是說選錯了 -i參數使我的inode先用完了。那么就算有大把的free block,你也無法創建文件了。 ? ? ? OK,這個參數的取值范圍是 1024~65536 。設定原則為:考慮下你的大多數文件有多大,就設為多大。有意思的是,你不設成1024的整數倍也是可以的。 linux-tods:/mnt/bean # mke2fs -i 8192 /dev/loop0 mke2fs 1.41.9 (22-Aug-2009) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 64008 inodes, 512000 blocks 25600 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67633152 63 block groups ...... linux-tods:/mnt/bean # dumpe2fs /dev/loop0 Group 0: (Blocks 1-8192) Primary superblock at 1, Group descriptors at 2-3 Reserved GDT blocks at 4-259 Block bitmap at 260 (+259), Inode bitmap at 261 (+260) Inode table at 262-388 (+261) 7790 free blocks, 1005 free inodes,?2 directories Free blocks: 403-8192 Free inodes: 12-1016 Group 1: (Blocks 8193-16384) Backup superblock at 8193, Group descriptors at 8194-8195 Reserved GDT blocks at 8196-8451 Block bitmap at 8452 (+259), Inode bitmap at 8453 (+260) Inode table at 8454-8580 (+261) 7804 free blocks, 1016 free inodes, 0 directories Free blocks: 8581-16384 Free inodes: 1017-2032 ? ? ? ?設成1524居然也可以,呵呵
linux-tods:/mnt/bean # mke2fs?-i 1524?/dev/loop0 mke2fs 1.41.9?(22-Aug-2009) Filesystem label= OS type:?Linux Block size=1024?(log=0) Fragment size=1024?(log=0) 344232 inodes, 512000 blocks 25600 blocks?(5.00%)?reserved?for?the super user First data block=1 Maximum filesystem blocks=67633152 63 block groups 8192 blocks per group,?8192 fragments per group 5464 inodes per group Superblock backups stored?on?blocks: ? ?? 最后一個PROBLEM,我想了很久也沒想明白,請路過的高手如果知道答案,不吝賜教: ? ? ? 下面是mke2fs的默認選項 ,發現Inode count總數多出來了16個,默認-i為4096字節每inode,本來應該是:500MB/4096B = 128000,可是dumpefs的結果為128016。多出來的16個inode我是百思不得其解。昨天看了部分e2fsprogs的代碼,也沒看出來。
Inode count:?128016 Block count:?512000 Reserved block count:?25600 Free blocks:?493526 Free inodes:?128005 First block:?1 Block size:?1024 其他的參數也可指定,但是我覺得沒多少必要,比如說inode size,你可以指定但是我覺128字節就挺好,既不浪費,而且也比較適合cache line的大小,你非要設成256有點浪費空間。再比如block per group,前面根據blocksize可以算出最大值,比如1024的就能支持最大8192個block per group, 你非要設定成4096 blocks per group ,其實也沒多大必要。 ? 參考文獻 1 ULK 2 Linux man page 3 e2fsprogs 4如何恢復 Linux 上刪除的文件,第 1 部分
表 1. 各種數據塊對應的文件尋址范圍
| 塊大小 | 直接尋址 | 間接尋址 | 二次間接尋址 | 三次間接尋址 |
| 1024 | 12KB | 268KB | 64.26MB | 16.06GB |
| 2048 | 24KB | 1.02MB | 513.02MB | 265.5GB |
| 4096 | 48KB | 4.04MB | 4GB | ~ 4TB |
點擊(此處)折疊或打開
?
總結
以上是生活随笔為你收集整理的深入解析ext2文件系统之mke2fs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP为什么以及什么时候使用单例模式?
- 下一篇: java信息管理系统总结_java实现科