本文轉載自:https://blog.csdn.net/tongyijia/article/details/52809281node
先來提出三個概念:
- superblock
- inode
- blocklinux
superblock:記錄此文件系統的總體信息,包括inode,block總量,使用量,剩餘量,以及文件系統的格式與相關信息等。
inode:記錄文件的屬性,一個文件佔用一個inode,同時記錄此文件數據所在的block號碼。
block:實際記錄文件的內容,若文件太大,則會佔用多個block。學習
inode和block都有編號,在文件系統最初格式化的時候就已經分好了inode和block塊並編好號碼。假設咱們要在linux中存儲一個文件,那麼,文件的名稱權限,各類屬性都存儲在它的inode中,每一個文件只有一個inode,這個inode中還存儲着這個文件數據的實際放置的block號碼。例如咱們要讀取一個文件,先去讀取這個文件的inode,對比權限等屬性,如有權限讀取,則根據inode中存儲的block號碼依次去block塊讀取數據。以下圖:
.net
這種文件系統咱們就叫作索引式文件系統(indexed allocation)3d
這裏作一個對比,閃存的FAT格式,這種文件系統並無inode的存在,因此,FAT沒有辦法將這個文件的全部block在一開始就讀取出來,每一個block的號碼都記錄在前一個block中,讀取時以下:
blog
這樣的話,在讀取文件時,它須要一個個將block讀出後,纔會知道下一個block所處的位置,若是一個同一個文件數據寫入的block分散的太過厲害,則咱們的磁盤讀取頭沒法在磁盤轉一圈就獲得全部數據,要多轉好多圈纔可以完整的讀取到這個文件的內容。索引
碎片整理:文件若是寫入的太過離散的話文件讀取的效能將會變的不好,碎片整理就是將同一個文件所屬的block彙整在一塊兒,這樣數據的讀取會比較容易,FAT文件系統就常常須要碎片整理,EXT2是索引式文件系統,基本不太須要經常進行碎片整理,但文件系統使用的時間過久的話,經常刪除/編輯/新增文件時仍是會可能形成文件數據太過於離散的問題,因此偶爾仍是須要進行整理。圖片
linux的EXT2文件系統的學習:ip
當一個文件系統高達數百GB時,inode,block的數量太龐大不容易管理,所以EXT2文件系統在格式化是基本是區分紅多個區塊羣組(block group),每一個區塊羣組又有本身獨立的inode/block/superblock系統,如圖:get
文件系統最前面有一個啓動扇區(boot sector),這個啓動扇區能夠安裝開機管理程序。
data block:
放置文件內容的地方,在EXT2文件系統中支持的block大小有1K,2K,4K三種。在格式化時block就固定了,且每一個block都有編號,便於inode記錄。因爲block大小的差別,會致使文件系統所能支持的最大磁盤容量與最大單一文件容量不一樣。以下:
這裏關於block有幾點提示:
- 原則上,block的大小與數量在格式化完成後就不能再改變了(除非從新格式化)
- 每一個block中最多隻能放置一個文件的數據
- 若是文件大於一個block大小,則一個文件將會佔用多個block
- 若是文件小於block,則該block的剩餘容量就不能被使用了
inode table:
inode記錄的數據至少有:
inode的一些特點:
inode的大小是有限的,那麼,若是一個文件的很大,block數量不少,inode須要記住的block號碼也不少,那麼,inode這時是如何記住的呢?看了下面這個圖就會明白了:
inode中的雙簡接與三間接就解決了這個問題。將block號存在block中,是否是就能存下了?
Superblock:
Superblock也是一個很重要的地方,它記錄了整個文件系統的相關信息。它記錄的信息主要有:
一個vaild bit數值,若此文件系統已經被掛載,此值爲1,若爲掛載則爲0
Superblock是很是重要的,由於整個文件系統的基本信息都存在於此。通常來講Superblock大小爲1024bytes。
其實,每一個block group均可能含有superblock,但咱們又說一個文件系統只有一個superblock,這是由於除了第一個block group含有superblock外,後續的block group也可能含有superblock做爲第一個block group中的superblock的備份,這樣,有利於superblock的救援。
Filesystem Description(文件系統描述說明):
這個區段能夠描述每一個 block group 的開始與結束的 block 號碼,以及說明每一個區段 (superblock,bitmap, inodemap, data block) 分別介於哪個 block 號碼之間。
block bitmap (區塊對照表):
block bitmap當中能夠知道哪些block是空的,咱們能夠根據這個快速的找到能夠存放數據的空block。
當你刪除文件的時候,這個文件本來佔用的block號碼就必須釋放出來,此時,在block bitmap中,相對應的block號碼就要修改爲【未使用】的狀態。
inode bitmap (inode對照表)
與block bitmap功能相似,這裏不作說明。
感謝閱讀,歡迎指正。