Linux檔案系統基礎之inode和dentry

2021-10-04 07:07:02 字數 1610 閱讀 2870

inode(節點)和dentry(目錄項)在vfs和實體的檔案系統(ext2、ext3等)中都是比較重要的概念。首先看一下虛擬檔案系統的標準定義:虛擬檔案系統(英語:virtual file system,縮寫為vfs),又稱虛擬檔案切換系統(virtual filesystem switch),是作業系統的檔案系統虛擬層,在其下是實體的檔案系統。虛擬檔案系統的主要功用在於讓上層的軟體,能夠用單一的方式,來跟底層不同的檔案系統溝通。在作業系統與之下的各種檔案系統之間,虛擬檔案系統提供了標準的操作介面,讓作業系統能夠很快的支援新的檔案系統。

vfs在linux系統中的結構為:

在教科書上面,一般是這樣描述inode的:inode是核心檔案物件的元資料。inode中不包括檔案的資料和檔案名字資訊。inode中只包含資料塊的位置資訊,資料結構相對穩定,其中沒有資料和檔名等變長資料,可以固定其大小,進而可以實現將整個檔案系統中的inode按照一定的組織方式來集中儲存在硬碟起始的乙個,檔案系統載入時,可以方便查詢即可。

inode僅僅只是儲存了檔案物件的屬性資訊,包括:許可權、屬組、資料塊的位置、時間戳等資訊。但是並沒有包含檔名,檔案在檔案系統的目錄樹中所處的位置資訊。那麼核心又是怎麼管理檔案系統的目錄樹呢?

dentry在核心中起到了連線不同的檔案物件inode的作用,進而起到了維護檔案系統目錄樹的作用。dentry是乙個純粹的記憶體結構,由檔案系統在提供檔案訪問的過程中在記憶體中直接建立。dentry中包含了檔名,檔案的inode號等資訊。

對於posix標準定義了檔案系統的inode。vfs介面即是符合posix標準的,實體檔案系統只要能對接上vfs,即可符合posix標準。因此,一般而言我們研究vfs檔案系統即可了解大部分檔案系統的結構。而在vfs中,定義了規範化的inode結構和dentry。

在讀取乙個檔案時,總是從根目錄開始讀取,每乙個目錄或者檔案,在vfs中,都是乙個檔案物件,每乙個檔案物件都有唯一的乙個inode與之對應。根目錄的inode號為0,在superblock裡,可以很快根據inode號索引到具體的inode,因此讀取到的第乙個inode就是根目錄的。讀取到了該目錄後,核心物件會為該檔案物件建立乙個dentry,並將其快取起來,方便下一次讀取時直接從記憶體中取。而目錄本身也是乙個檔案,目錄檔案的內容即是該目錄下的檔案的名字與inode號,目錄檔案的內容就像一張表,記錄的檔名與其inode no.之間的對映關係。根據路徑即可找到當前需要讀取的下一級檔案的名字和inode,同時繼續為該檔案建立dentry,dentry結構是一種含有指向父節點和子節點指標的雙向結構,多個這樣的雙向結構構成乙個記憶體裡面的樹狀結構,也就是檔案系統的目錄結構在記憶體中的快取了。有了這個快取,我們在訪問檔案系統時,通常都非常快捷。

有了inode和dentry,也就非常容易理解檔案的連線了。我們知道軟連線,是乙個特殊的檔案,該檔案通過內容指向目標檔案。因此軟連線有自己的inode,有自己的內容。其內容記錄的是目標檔案的inode號和自身的名字。軟連線是一種特殊的檔案。而硬鏈結則不一樣,硬鏈結是檔案的別名,硬鏈結不是乙個完整的檔案物件,硬鏈結只是將自己的名字寫在上級目錄的內容(檔名與inode no.的對映表)中。而其inode號即是目標檔案的inode。這樣硬連線與目標檔案一起共用乙個inode,使用引用計數來管理硬連線。

Linux檔案系統基礎

一 檔案系統層次分析 由上而下主要分為使用者層 vfs層 檔案系統層 快取層 塊裝置層 磁碟驅動層 磁碟物理層 使用者層 最上面使用者層就是我們日常使用的各種程式,需要的介面主要是檔案的建立 刪除 開啟 關閉 寫 讀等。vfs層 我們知道linux分為使用者態和核心態,使用者態請求硬體資源需要呼叫s...

linux之檔案系統

概述 1.應用層訪問具體檔案的層次圖 2.3.4.5.6.一 應用層訪問具體檔案的層次圖 結構圖 檔案與檔案系統的關係 從上圖中我們看出,檔案首先分類,歸屬於不同的檔案系統 檔案與程序之間的關係 程序與檔案的連線,即 已開啟檔案 是程序的私有財產,歸具體程序所有,那麼這種連線的file結構必然與程序...

linux基礎命令 檔案系統

檔案系統 作業系統是通過檔案系統區操作檔案,磁碟或分割槽需要建立檔案系歐諾統後才能被作業系統使用,建立檔案系統的過程叫做格式化 常見檔案系統 fat32,ntfs window的主流檔案系統 ext2,ext3 紅帽4的主要的檔案系統 ext4 紅帽5的主要檔案系統 其中ext3,ext4都是日誌型...