Linux中的Ext2檔案系統詳解,linuxext2檔案詳解
之所以要寫Ext2檔案系統,是因為最近一直在看Hadoop,發現HDFS和Ext2檔案系統非常類似,加上以前已經瞭解Ext2檔案系統,所以,打算先把Ext2的思想梳理一遍。
1 Ext2綜述
在Linux作業系統中,一切皆檔案。Linux檔案最重要的特性:檔案許可權,檔案屬性和檔案資料。其中檔案許可權如rwx,檔案屬性如檔案的大小檔案所有者等,檔案資料是指檔案中存放的資料資訊。
在Ext2檔案系統中,它們不是存放在一起的,而是分開存放,檔案許可權和屬性存放在inode中,檔案資料存放在data block中,另外Ext2檔案系統中還有一個super block用於存放檔案系統的整體資訊。
Ext2檔案系統一開始就把inode,data block,以及super block規劃好了,除非格式化,否則不在變動。每一個inode和data block都有一個唯一編號與之對應。
2 super block
super block用於記錄整個檔案系統的基本情況,主要記錄一下內容:
block 和inode的總量 已經使用了多少block和inode 檔案系統中還剩餘多少block和inode block和inode的大小
通常情況下,super block的大小為128bytes。
3 inode
inode用於記錄檔案的屬性,一個檔案佔用一個inode,同時在inode中記錄存放檔案資料的data block號碼。inode中存放如下資訊:
1. 檔案的許可權rwx
2. 檔案所有者與所在組
3. 檔案的大小
4. 最近修改時間
5. 存放檔案資料的data block編號
一個inode的大小固定為128bytes,在讀取檔案的時候通常情況下就是會首先找到檔案對應的inode,然後通過inode進行一系列操作。
4 data block
檔案資料的實際存放位置,一個檔案至少佔用一個data block(一個data block中最多也只能存放一個檔案),如果檔案太大的話,可能會佔用多個data block,一個data Block的大小通常為4KB。
因此在劃分data block時,其大小非常關鍵,如果data block過小,可能有利用小檔案的存放,但是對與大檔案而言,將會佔用更多的data block,inode中需要劃分更多地區去記錄data block,導致檔案系統讀寫效率降低;如果data block過大,可能有利用大檔案的存放,但是對於小檔案而言,由於一個data block中最多存放一個檔案,這樣可能會造成空間浪費問題。
檔案與inode 和data block的關係
假設檔案對應的inode是inode3,可以看出,檔案資料的實際存放位置為data block1,3,8,inode負責記錄這些data block的編號,這種資料訪問的方式被稱為索引式檔案系統。
讀取檔案流程:
1擷取檔案inode的位置,讀取inode中的資料,擷取檔案許可權,檢查該使用者是否有r許可權,如果有進行一下步驟,如果沒有,流程結束,檔案內容不予顯示;
2 通過inode中記錄的data block的編號,一次讀取對應data block上的資料,完成了對檔案的讀取。
5 目錄與inode 和data block的關係
目錄也是檔案,因此,因此其存放方式與檔案的存放方式一樣,不停的是,目錄的data block中存放的是子目錄/檔案的inode所對應的位置。
實際上,每次讀取檔案,每次都是從/根目錄進行的,以此尋找,最終找到目標檔案的inode,然後找到檔案資料的存放位置,讀取,擷取資料。