我發現我看了Linux后對搞機還挺感興趣
文件系統 File systems
wiki : 文件系統是數據組織方式,定義數據在磁盤上的保存、讀取和更新方法
個人理解:文件系統就是數據在硬盤扇區內儲存的規則,好讓操作系統去讀取相應的扇區內的數據。
Ext2
Ext2 是Linux支持的一種文件系統。
Ext2 講分區分成若干個分組。每個分組里含有以下這些組成部分:
1.Super block
2.File system Description
3.block bitmap
4.inode bitmap
5.inode table
6.data block
為了了解這個東西,我們需要大致了解一些概念。
block
儲存數據的真正位置,比如我們有一個文件里面寫著 ‘to be a happy guy' , 那么這些文本信息就會保存在block中。當我們格式化成文件系統后,就會生成若干個block,并且都一一編號(UUid).另外在每個block大小一般是一樣的。通常為1K,2K,4K.
inode
在Linux中每一個文件都只對應一個inode,它記錄這文件的幾乎全部信息(權限,修改時間,指有多少文件名指向這個inode)。最重要的是它記錄正文件內容在哪些block中。
當系統要訪問一個文件的時候,首先要有文件的inode,查看上面的權限,通過了在通過上面的 block 號碼,去獲得文件的內容。
回到那個分組
為什么要分組?
了解了 inode 和 block 我們知道分組好像不是太必要。但是當我們結合物理就明白,這是處理物理上inode和block在扇區上分布的一種結局方案。
data block
其實就是連續的blocks。這里需要一提的就是 一個文件最少占用1個block。 所以當有一堆小文件用大block去儲存會存在浪費問題。但是大文件用小block去儲存就會需要更多block數,inode 就需要記錄更多的block號,這影響性能,所以,選擇大小需要思考。
inode table
在Ext2中,inode只有128B,很小卻需要儲存很多信息。
我們來算一下,一個文件400M,每個Block4K,那么inode需要記錄10萬個Block號碼??!!
Ext2的方法是使用空的Block來記錄,如 inode 記錄一個 Block ,這個Block不記錄正真的數據而是記錄Block號碼,good。記過記錄一個Block能記錄256個block號碼。好像不太夠,那就256Block在用來儲存Block號碼,這就變成了指數級的變化了。
Ext2 中的 inode 記錄直接block號碼的有 12個,一個間接,一個雙間接,一個三間接。
Super block
記錄文件系統使用情況,block大小等基本信息。講道理這個東西只需要一個,所以不是每個分組都有,多個Super block也是做備份用的。
File System Description
記錄分組的開始block號碼與技術block號碼
block bitmap && inode bitmap
分別記錄那么block是空的,那么 inode 是未使用的。
Ext3
Ext2 上添加了日志功能
ext2和ext3的格式完全相同,只是在ext3硬盤最后面有一部分空間用來存放Journal的記錄。
Ext4
Ext3 的升級版本,相比與Ext3有很多 優點,其有比較好的兼容性,這個就意味著結構上不會有太大的改變。個人認為其結構上比較大的改變是對大文件的處理,其使用了extent概念,就是不會每個Block號碼都做記錄,只記錄開始Block號,連續Block數等信息(思想是這樣的,但沒有這么簡單)來記錄大文件。
參考文獻
Linux文件系統第一篇—從Ext2到Ext3再到Ext4 - 徐志強
文件系統的兩種文件索引模式extent和blockmap