Linux文件系統類型引領入門
linux經過長時間的發展,很多用戶都很了解Linux文件系統類型,這里我發表一下個人理解,和大家討論討論。很詳細地了解某個操作系統的實際工作方式是非常困難的,因為大多數操作系統的源代碼都是嚴格保密的。在以實際使用為目標的操作系統中,讓任何人都可以自由獲取系統源代碼,無論目的是要了解、學習還是修改,這樣的系統并不多。本論文的主題就是這些少數操作系統中的一個:Linux。
Linux是一個性能穩定、功能強大、效率高的操作系統。它在功能特性方面與Unix系統相似,同時又具有多任務、多用戶、多平臺等若干特性。Linux的源代碼是開放的,閱讀Linux源代碼,無疑是深入學習Linux的***方法。
文件系統是Linux操作系統的重要組成部分,Linux文件具有強大的功功能。文件系統中的文件是數據的集合,文件系統不僅包含著文件中的數據而且還有文件系統的結構,所有Linux 用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。
Linux 最早的文件系統是Minix,但是專門為Linux 設計的文件系統——擴展文件系統第二版或EXT2被設計出來并添加到Linux中,這對Linux產生了重大影響。EXT2文件系統功能強大、易擴充、性能上進行了全面優化優化,也是現在所以Linux發布和安裝的標準文件系統類型。
每個實際文件系統從操作系統和系統服務中分離出來,它們之間通過一個接口層:虛擬文件系統或VFS來通訊。VFS使得Linux可以支持多個不同的文件系統,每個表示一個VFS 的通用接口。由于軟件將Linux 文件系統的所有細節進行了轉換,所以Linux核心的其它部分及系統中運行的程序將看到統一的文件系統。Linux 的虛擬文件系統允許用戶同時能透明地安裝許多不同的文件系統。
Linux文件系統類型,作為一種特殊類型/proc文件系統只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。/proc文件系統是一個偽文件系統,用戶和應用程序可以通過/proc得到系統的信息,并可以改變內核的某些參數。
Linux文件系統類型,EXT2文件系統、虛擬文件系統、/proc文件系統是三個具有代表性的文件系統,本論文試圖通過對他們的分析來研究Linux文件系統機制。并且在分析這三種文件系統的基礎上對Linux文件系統操作進行了解、研究(本論文選取了open和 close兩種操作進行研究)。在第二部分中將介紹EXT2文件系統;第三部分論述虛擬文件系統的特點;第四部分簡要介紹/proc文件系統;***,介紹兩種具體文件系統操作的實現。
EXT2文件系統在Linux中普通文件和目錄文件保存在稱為塊物理設備的磁盤或者磁帶上。一套 Linux系統支持若干物理盤,每個物理盤可定義一個或者多個文件系統。(類比于微機磁盤分區)。每個文件系統由邏輯塊的序列組成,一個邏輯盤空間一般劃分為幾個用途各不相同的部分,即引導塊、超級塊、inode區以及數據區等。
引導塊:在文件系統的開頭,通常為一個扇區,其中存放引導程序,用于讀入并啟動操作系統;超級塊:用于記錄文件系統的管理信息。特定的文件系統定義了特定的超級塊;inode區(索引節點):一個文件或目錄占據一個索引節點。***個索引節點是該文件系統的根節點。利用根節點,可以把一個文件系統掛在另一個文件系統的非葉節點上;數據區:用于存放文件數據或者管理數據。
Linux最早引入的文件系統類型是MINIX。MINIX文件系統由MINIX操作系統定義,有一定的局限性,如文件名最長14個字符,文件最長64M字節。***個專門為Linux設計的文件系統是EXT(Extended File System),但目前流行最廣的是EXT2。
第二代擴展文件系統由Rey Card 設計,其目標是為Linux 提供一個強大的可擴展文件系統。它同時也是Linux界中設計最成功的文件系統。通過VFS的超級塊(struct ext2_sb_info ext2_sb)可以訪問EXT2的超級塊,通過VFS的inode(struct ext2_inode_info ext2_i)可以訪問EXT2的inode。
文件系統EXT2的源代碼在/usr/src/linux/fs/ext2目錄下,它的數據結構在文件/usr/src/linux/include/linux/ext2_fs.h以及同一目錄下的文件ext2_fs_i.h和ext2_fs_sb.h中定義。EXT2文件系統將它所占用的邏輯分區劃分成塊組(block group)。
EXT2文件系統邏輯分區:
和很多文件系統一樣, EXT2 建立在數據被保存在數據塊中的文件內這個前提下。這些數據塊長度相等且這個長度可以變化,某個EXT2 文件系統的塊大小在創建(使用mke2fs)時設置。每個文件的大小和剛好大于它的塊大小正數倍相等。如果塊大小為1024 字節而一個1025 字節長的文件將占據兩個1024 字節大小的塊。這樣你不得不浪費差不多一般的空間。我們通常需要在CPU 的內存利用率和磁盤空間使用上進行折中。而大多數操作系統,包括Linux 在內,為了減少CPU 的工作負載而被迫選擇相對較低的磁盤空間利用率。并不是文件中每個塊都包含數據,其中有些塊被用來包含描敘此文件系統結構的信息。EXT2通過一個 inode 結構來描敘文件系統中文件并確定此文件系統的拓撲結構。inode 結構描敘文件中數據占據哪個塊以及文件的存取權限、文件修改時間及文件類型。EXT2 文件系統中的每個文件用一個inode 來表示且每個inode 有唯一的編號。文件系統中所有的inode都被保存在inode 表中。 EXT2 目錄僅是一個包含指向其目錄入口指針的特殊文件(也用inode表示)。
對文件系統而言文件僅是一系列可讀寫的數據塊。文件系統并不需要了解數據塊應該放置到物理介質上什么位置,這些都是設備驅動的任務。無論何時只要文件系統需要從包含它的塊設備中讀取信息或數據,它將請求底層的設備驅動讀取一個基本塊大小整數倍的數據塊。EXT2 文件系統將它所使用的邏輯分區劃分成數據塊組。每個數據塊組將那些對文件系統完整性最重要的信息復制出來, 同時將實際文件和目錄看作信息與數據塊。為了發生災難性事件時文件系統的修復,這些復制非常有必要。
【編輯推薦】