本文出自 “Pavel” 博客,請務必保留此出處http://pavel86.blog.51cto.com/8349178/1688277
Linux系統支持多種文件系統, 文件系統間的區別在於: 不同文件系統對同一塊磁盤分區存儲文件的結構不同. 舉例來說相當於某些土豪買了500平住房: 有些工作狂會隔出1間卧室,1間客廳,1間廚房和5個工作間; 有些美食家會隔出3間卧室,3間客廳,4間廚房等等. 文件系統就相當於對於分割出不同性能的區域用於使用各自不同的方式存儲數據.
Ext(extended file system)是Linux支持的正規文件系統, 本文以Ext2和Ext3為模型講解這兩種基礎文件系統的邏輯結構.
Ext2文件系統
Ext2文件系統中將磁盤分區划分為兩個主要區域: 元數據區(matadata area)和數據區(data area). 其中元數據區用於存放文件的屬主, 屬組, 訪問權限, 時間戳以及文件系統數據和元數據分配信息等相關屬性信息, 數據區用於存放文件中的真實數據.
由於現在的物理磁盤的容量大小越來越大, 存儲的數據越來越多, 在讀取和寫入文件有時需要遍歷整個磁盤空間, 非常消耗時間, 因此在磁盤分區上創建文件系統時會先將磁盤划分為多個塊組(block group), 每個塊組中有各自的元數據區和數據區, 並對他們進行獨立自治. 文件系統的邏輯結構如下圖所示:
其中的 boot block 分區是指文件系統的啟動扇區, 可以用於安裝引導程序而不需要占用硬盤上唯一的MBR區域, 主要用於多操作系統主機上.
塊組的內部邏輯結構如下圖所示:
由上圖所示可以看到塊組中元數據區和數據區的邏輯結構.
數據區
數據區結構比較單一, 由許多大小相同的數據塊(block)組成, 數據塊的大小規格分別有: 1KB, 2KB, 4KB. 數據塊的大小是在文件系統格式化后就固定的, 此后無法再進行修改. 對於目錄來說, 數據塊用於存儲該目錄下的文件名與該文件的inode號; 對於文件來說, 數據塊用於存儲文件中的數據. 因為數據塊大小能夠決定文件系統中存儲的單個最大文件的大小, 而且塊大小與主機承載業務類型有很大關系, 因此在設置數據塊大小時應根據具體問題具體分析.
元數據區
元數據區主要有Super Block(超級塊), FSD(文件系統描述說明), inode table(inode表), inode bitmap(inode位圖)和block bitmap(數據塊位圖) 5部分組成.
1. Super Block(超級塊)
超級塊用於描述整個文件系統的元數據信息: block大小, block和inode的總量,空閑量,占用量, 文件系統的掛載和檢測時間等信息, 超級塊對於整個文件系統都是至關重要的, 因此會在多個隨機的塊組中備份超級塊.
2. FSD(文件系統說明)
文件系統說明用於描述當前塊組的元數據信息, 比如塊組區間占用的block的編號范圍.
3. inode table(inode表)
inode表存放的是每個文件自己的inode條目, 每個inode條目的大小是固定的128KB, 該條目中主要含有對應文件的兩類信息: 文件的元數據信息和文件的數據塊指針.
3-1. 文件的元數據信息主要有: 文件的屬主, 屬組, 訪問權限, 時間戳等相關屬性.
3-2. 文件的數據塊指針用於存放該文件存儲數據的block塊的地址信息, 1個inode條目中含有4類指針: 12個直接指針, 1個間接指針, 1個二級間接指針和1個三級間接指針.其中直接指針可以直接指向block數據塊, 間接指針指向一個數據塊之后, 再由該數據塊來指向更多的block數據塊來獲取更多數據塊空間存儲文件數據, 二級間接指針和三級間接指針以此類推. 每個block本身的地址標號會占用對應指針4B的存儲空間, 因此不同的block塊大小, 能存儲的單個最大文件大小也不相同.
以block塊大小為1KB為例:
12個直接指針可以指定的block存儲空間為: 12x1KB=12KB;
1個間接指針可以指定的block存儲空間為: 1KB/4BX1KB=256X1KB=256KB
1KB/4BX1KB/4BX1KB=256X256X1KB=65536KB
1KB/4BX1KB/4BX1KB/4BX1KB=256X256X256X1KB=16777216KB
單個文件總大小為: 48+256+65536+16777216KB=16843020KB=16.06GB
# 因為大於2KB的block會受到ext2文件系統本身的限制, 該計算方式不適用於block為2KB或4KB大小的block.
4. inode bitmap(inode位圖)
inode位圖使用每個Byte中的單個位用於描述對應位置的indoe條目是否空閑, 主要作用是便於查詢空閑的inode條目和遍歷整個inode條目空間.
5. block bitmap(block位圖)
block位圖原理與inode位圖原理類似, 主要作用是便於查詢空間的inode條目和遍歷整個inode條目空間.
以上就是Ext2文件系統的邏輯結構.
=============================================================
Ext3文件系統
Ext3文件系統會將磁盤分區划分為3種區域: 元數據區, 數據區和日志區域, 其中(journal area)日志區域是Ext3文件系統和Ext2文件系統的最大區別, 如下圖所示:
日志區域的主要功能是臨時緩存正在進行I/O操作的文件的元數據信息, 當該文件正確傳輸完成后, 該文件系統就會將臨時緩存的元數據信息存儲至文件系統的元數據區中. 日志區域的最大優點是對於執行I/O操作的文件信息發生故障時, 文件系統不需要遍歷整個文件系統的元數據區來查找發生故障的block數據塊信息, 只需要查找日志區域中臨時緩存的元數據即可, 大大縮短了查詢時間.
Ext3文件系統的元數據區和數據區的結構和功能與Ext2文件系統相同, 此處就不再復述.
小結:
Ext系列文件系統是Linux上比較基礎的文件系統類型, 也是需要大家掌握的, 希望這篇分析能夠幫助大家理解Ext2和Ext3文件系統的邏輯結構和相應功能.
本人水平有限, 如有理解不當的地方, 請大家給予指正, 非常感謝!
本文出自 “Pavel” 博客,請務必保留此出處http://pavel86.blog.51cto.com/8349178/1688277