Ext inode如何索引blocks

2021-09-11 01:12:07 字數 2288 閱讀 5106

1.間接位址索引

2.extent樹索引(僅ext4支援)。

ext間接位址索引的inode機制。如下:

1.每個檔案僅會占用乙個inode

2.每個inode大小均固定位128bytes(ext4預設為256,但是可以選擇限定為128),大部分空間是用來儲存檔案屬性的,inode記錄乙個索引資訊占用4byte

3.ext檔案系統為了讓inode記錄盡可能多的data block,定義了四個記錄block號碼的區域,分別為12個直接記錄區,乙個間接記錄區,乙個雙間接記錄區,乙個三間接記錄區,所謂間接記錄區就是用data block記錄data block號碼

在ext2檔案系統中fs/ext2/ext2.h中struct ext2_inode的項__le32 i_block[ext2_n_blocks];/* pointers to blocks /,就是這15個索引指標,指向記錄區的blocks。

ext3在kernel3.x版本中,ext3用到的標頭檔案在fs/ext3/ext3.h中,其中struct ext3_inode的項__le32 i_block[ext3_n_blocks];/ pointers to blocks /就是這15個索引指標,指向記錄區的blocks。

在ext4檔案系統中fs/ext4/ext4.h中struct ext4_inode的項__le32 i_block[ext4_n_blocks];/ pointers to blocks */,就是這15個索引指標,指向記錄區的blocks。ext3在kernel4.x版本中,核心fs目錄下都沒有ext3這個目錄了,根據介紹,是ext3成為了ext4的子集,日誌功能用ext2的,其他使用ext4的,也就是標頭檔案用了ext4的標頭檔案,ext4中的inode結構體。

間接索引下檔案的最大上限(block為1k,因為1k好算,4k算出來的數太大了):

1個間接記錄取大小為4k,inode記錄乙個索引資訊占用4byte,則可以容納256個索引資訊。

(1)12個直接記錄區容量:12 * 1k = 48k

(2)1個間接記錄區容量:256 * 1k = 256k

(3)1個雙間接記錄區容量:256 * 256 * 1k = 65536k

(4)1個三間接記錄區容量:256 * 256 * 256 * 1k = 16777216k

將四個記錄區容量相加,總容量為16843020k,約等於16g,這個大小就是ext採用間接位址索引方式的單個檔案的最大上限。可以看出,當檔案大於48k時,才會使用第乙個間接記錄區,大於48+256+65536k時才會使用第三個間接記錄區。

在/etc/mke2fs.conf中可以看到ext4的預設格式化引數:

ext4 =
ext4下的extent本質上就是乙個b+樹。只有葉子節點是資料blocks,其他節點都是索引節點。下面兩個圖很清晰的解釋了索引原理,只要能理解b+樹,則很快理解以下兩幅圖。

摘自

在inode條目中,不在是使用指標索引的方式來進行與block的對映,而是採用extent來替代指標;此前在ext3中的15個指標被替換成1個extent header和4個extent,乙個extent占用12個位元組;乙個extent描述了一組連續的block,當不夠用時extent依舊可以採用間接指標的索引,但沒有個數限制。對於很大的檔案,ext4採用extent_tree的方式,其本質同樣是一種間接定址的關係

乙個extents是乙個位址連續的資料塊(block,乙個block是4kb)的集合。比如乙個100mb的檔案有可能被分配給乙個單獨的extents(前提是有一塊大於100m的連續空閒空間,其中ee_len是乙個無符號16位的整數,最大可以容納65535吧。也就是2^16-1個blocks。也就是乙個extent可以索引65535*4kb的空間,等於256mb-4kb空間)。這樣就不用像ext3那樣新增25600個block的索引(乙個索引佔4個位元組,100mb檔案的索引也要用100kb的空間,而且尋找間接索引位址也要消耗io, 磁碟磁頭尋找耗時)。很明顯,extents的實現提高了檔案系統的效能,減少了檔案碎片

python字典中如何索引 如何索引字典?

如果仍然有人在看這個問題,那麼當前接受的答案已經過時了 由於python 3.7 字典是順序保留的,因此它們現在的行為與collections.ordereddicts 完全相同。不幸的是,仍然沒有專用的方法可以索引到字典的keys values 中,因此可以通過以下方法獲取字典中的第乙個鍵 值 f...

如何設計索引

有人說乙個表的索引不能超過6個,這是不對的。衡量索引是否合理不能單純的用乙個數字來判斷。在 一張表上建立多少索引,建立什麼樣的索引,並無一定的規律。不能說一張表上有6個索引,就不能再建立第 7個索引了。設計索引時應該從應用的角度出發,一切服從應用需要。大家都知道索引會增加維護的成本,影響dml語句的...

如何建立索引

原文 如何建立索引 通過前面二篇文章我們基本學會了如何結合執行計畫分析出某sql語句的效能問題,既然有效能問題的地方已經找到了,接下來就是如何優化查詢來提高查詢效能,而優化查詢最重要的 就是建立索引,這篇文章就來總結如何建立索引來提高查詢速度,主要從以下幾個方面來總結。了解索引 建立索引的語法 結合...