Ext2的索引節點

2021-09-01 15:34:15 字數 2370 閱讀 8758

摘自:

ext2的索引節點

ext2

和unix類的檔案系統一樣,使用索引節點來記錄檔案資訊。每乙個普通檔案目錄都有唯一的索引節點與之對應,索引節點中含有檔案或目錄的重要資訊。當你要訪問乙個檔案或目錄時,通過檔案或目錄名首先找到與之對應的索引節點,然後通過索引節點得到檔案或目錄的資訊及磁碟上的具體的儲存位置。ext2的索引節點的資料結構叫ext2_inode,在include/linux/ext2_fs.h中定義,下面是其結構及各個域的含義。(不同版本,該結構略有不同)。

struct

ext2_inode

從中可以看出,索引節點是用來描述檔案或目錄資訊的。

以下,對其中一些域作一定解釋。

(1)前面說過,ext2通過索引節點中的資料塊指標陣列進行邏輯塊到物理塊的對映。在ext2索引節點中,資料塊指標陣列共有15項,前12個為直接塊指標,後三個分別為「一次間接塊指標」、「二次間接塊指標」、「三次間接塊指標」,如圖9.4所示。

圖9.4索引節點的資料塊指標陣列示意圖

所謂「直接塊」,是指該塊直接用來儲存檔案的資料,而「一次間接塊」是指該塊不儲存資料,而是儲存直接塊的位址,同樣,「二次間接塊」儲存的是「一次間接塊」的位址。這裡的所說的塊,指的都是物理塊。ext2預設的物理塊大小為1k,塊位址佔4個位元組(32位),所以每個物理塊可以儲存256個位址。這樣,檔案大小最大可達12k+256k+64m+16g。但實際上,linux是32位的作業系統,故檔案大小最大只能為4g。

系統是以邏輯塊號為索引查詢物理塊的。例如,要找到第100個邏輯塊對應的物理塊,因為256+12>100>12,所以要用到一次間接塊,在一次間接塊中查詢第88項,此項內容就是對應的物理塊的位址。而如果要找第1000個邏輯塊對應的物理塊,由於1000>256+12,所以要用到二次間接塊了。

(2)索引節點的標誌(flags)取下列幾個值的可能組合。

ext2_secrm_fl0x00000001

完全刪除標誌。設定這個標誌後,刪除檔案時,隨機資料會填充原來的資料塊。

ext2_unrm_fl0x00000002

可恢復標誌。設定這個標誌後,刪除檔案時,檔案系統會保留足夠資訊,以確保檔案仍能恢復(僅在一段時間內)

ext2_comr_fl0x00000004

壓縮標誌。設定這個標誌後,表明該檔案被壓縮過。當訪問該檔案時,檔案系統必須採用解壓縮演算法進行解壓。

ext2_sync_fl0x00000008

同步更新標誌。設定該標誌後,則該檔案必須和記憶體中的內容保持一致,對這種檔案進行非同步輸入、輸出操作是不允許的。這個標誌僅用於節點本身和間接塊。資料塊總是非同步寫入磁碟的。

除了這幾個常用標誌外,還有12個標誌就不一一介紹了。

(3)索引節點在磁碟上是經過編號的。其中,有一些節點有特殊用途,使用者不能使用。這些特殊節點也在include/linux/ext2_fs.h中定義。

#define ext2_bad_ino1

該節點所對應的檔案中包含著該檔案系統中壞塊的鏈結表

#define ext2_root_ino2

該檔案系統的根目錄所對應的節點

#define ext2_idx_ino3

acl(訪問控制鍊錶)節點

#define ext2_data_ino4

acl節點

#define ext2_boot_loader_ino5

用於引導系統的檔案所對應的節點

#define ext2_undel_dir_ino6

檔案系統中可恢復的目錄對應的節點

沒有特殊用途的第乙個節點號為11

#defineext2_first_ino11

(4)檔案的型別、訪問許可權、使用者標識號、使用者組標識號等將在後面介紹。

與ext2超級塊類似,當磁碟上的索引節點調入記憶體後,除了要填寫vfs的索引節點外,系統還要根據它填寫另乙個資料結構,該結構叫ext2_inode_info,其作用也是為了儲存特定檔案系統自己的特性,它在include/linux/ext2_fs_i.h中定義如下:

struct

ext2_inode_info

; vfs索引節點中是沒有物理塊指標陣列的域,這個ext2特有的域在調入記憶體後,就必須儲存在ext2_inode_info 這個結構中。此外,片作為ext2比較特殊的地方,在ext2_inode_info 中也儲存了一些相關的域。另外,ext2在分配乙個塊時通常還要預分配幾個連續的塊,因為它判斷這些塊很可能將要被訪問,所以採用預分配的策略可以減少磁頭的尋道時間。這些用於預分配操作的域也被儲存在ext2_inode_info結構中。

Ext2的超級塊物件

當安裝 ext2 檔案系統時 執行諸如 mount t ext2 dev sda2 mnt test 的命令 存放在 ext2 分割槽的磁碟資料結構中的大部分資訊將被拷貝到 ram中,從而使核心避免了後來的很多讀操作。那麼一些資料結構如何經常更新呢?因為所有的 ext2 磁碟資料結構都存放在 ext...

ext2檔案系統

ext2磁碟結構 ext2分割槽和ext2分組的分布圖 下圖是借用其他部落格的 塊組中的每個塊包含的資訊 超級快 1個塊 描述該分割槽中的整個檔案系統的資訊,包括有多少個快組,每個快組有多少個塊,多少個索引節點等。組描述符塊 n塊 塊點陣圖 1塊 索引節點位圖 1塊 索引節點 n塊 資料塊 n塊 塊...

Linux檔案系統ext2二

dumpe2fs bh 裝置檔名 b 列出保留為壞軌的部分 一般用不到!h 僅列出superblock的資料,不會列出其他的區段內容 利用dumpe2fs可以查詢到非常多的資訊,不過依內容分為上半部分是superblock內容,下半部分是每乙個block group的資訊。從上面的 我們可以觀察到這...