在檔案系統看來,一塊硬碟由多個分割槽組成,每乙個分割槽則由乙個引導塊、乙個超級塊和若干扇區組組成,每個扇區組則由乙個超級塊的引用、inode、data block、inode點陣圖和data block點陣圖組成。
inode中儲存了檔案的metadata,包括許可權、修改時間以及data block等資訊,但是不包括檔名——檔名儲存在父目錄的data block中。這時就有兩個疑問:
第一,inode大小是固定的(256bytes),而data block則會有很多個,如果檔案系統保證所有的data block都是連續的話,那麼在inode中只需要儲存起始和長度,但是我們知道這樣太浪費空間了,檔案系統無法保證所有的data block都是前後連續的,那麼inode中如何儲存所有data block資訊呢?
第二,如果檔名儲存在上級目錄的data block中,那麼要找到乙個檔案,需要訪問一次上級目錄的inode和data block,這時候需要兩次磁頭移動。如果檔案層次過深的話,那麼查詢乙個檔案的代價還是蠻大的,檔案系統有什麼優化嗎?
通過向達人haifeng請教,得到如下答案:
第一,inode中只直接儲存少量的data block資訊,更多的data block資訊通過額外的data block來儲存,類似於二級索引的機制。
第二,檔名查詢確實比較費時,檔案系統在記憶體中會對檔案名字空間建立乙個cache,這個cache與檔案資料的cache一樣,會占用空閒記憶體,且為了保證命中率,這個cache中的資料很少被清理出去。另外據說對不存在的檔案路徑,如果有人open了的話,就算open系統呼叫返回失敗,檔案名字空間的cache中也還是會加入這個檔案的資訊,這樣一來,如果你不斷開啟一些不存在的檔案,也可以耗光系統記憶體。
Linux檔案系統初探(1)
首先要回答這樣乙個問題 為什麼要寫這樣的文章?網路中已經有大量這樣的教程和介紹。我的回答和codproject上的一位大牛的回答是類似的,其一是 對於初學者來說資訊越多越好,多角度的對同乙個問題或者概念進行描述對理解問題和概念是大有好處的。其二是 這樣把學習的東西講述出來才能更好的幫助自己理解概念。...
Linux檔案系統1 概述
本文主要先引入vfs的概念,並從直觀上了解linux中所註冊的檔案系統,從而對linux檔案系統有乙個概括的認識。圖 vfs檔案系統架構圖 vfs為使用者空間提供了統一的介面,不同的檔案系統需要實現這些介面,對於裝置檔案,驅動程式中也要實現相應的介面,這體現了一種機制與分離的理念。圖 核心所註冊的檔...
linux 檔案系統 Linux 檔案系統結構介紹
ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...