1. 程式人生 > >linux下的ext2檔案系統

linux下的ext2檔案系統

當我們剛拿到一塊磁碟的時候,我們需要將磁碟格式化成某種格式的檔案系統,這樣才能讓磁碟儲存資料。在windows下,使用的是一種叫做NTFS的檔案系統,而在Linux下,使用的是ext系列的檔案系統,現在最新的版本是ext4,不過原理都差不多,這裡就ext2檔案系統做個簡要的介紹。

在檔案系統中,最小的單位是塊,預設情況下,一個塊的大小是4096個位元組,當然你也可以在初始化分割槽的時候自己指定。我們知道,磁碟中的一個扇區是512個位元組,因此,一般來說,塊的大小是512的整數倍。

當一個磁碟分割槽被格式化成ext2檔案系統時,它的格式如下:

首先,最開始是啟動塊(boot block),它的大小是1KB,也就是1024位元組,這個大小是固定的,它是由計算機聯盟規定的。它是用來儲存磁碟分割槽情況和啟動資訊的,任何的檔案系統都不能使用它。它就相當於我們磁碟的第一個扇區一樣,儲存著電腦開機的啟動程式。因此,這個啟動塊是不屬於檔案系統的。

啟動塊之後,才是真正的檔案系統。但是檔案系統把多個塊結合起來,形成塊組,便於管理。我們重點介紹一下,單個塊組裡面的成員。

第一個叫做超級塊(super block),它記錄了該分割槽檔案系統的整體資訊,比如說塊大小,版本號等資訊。

超級塊之後是塊組描述符表(GDT),這個我們先放在後面講。

之後是塊點陣圖(block bitmap),它標記了一個組裡面最多有多少個塊,前面提到,一個塊預設是4096位元組,也就是說有32768位元位,那麼該塊組最多隻能由32768個塊組成。當我們使用了該組裡面的某一塊時,系統就把該塊置為1,沒有被使用的置為0。因此,block bitmap是記錄整個組的使用情況。

再往下就是inode點陣圖(inode bitmap),前面剛剛講了塊點陣圖的作用,那麼inode點陣圖也是一樣的,它也是標識了inode的使用情況。

inode點陣圖後接inode表(inode table),該表是由若干個塊組成的,裡面存放著若干個inode,每個inode的大小是固定的為128位元組。當該表中的某個inode被使用了,inode點陣圖中的某一位就會被置為1。

最後就是我們的資料塊(data block)了,資料塊是以塊為單位的。資料塊裡面當然是儲存我們檔案的內容了。

前面說過,超級塊之後是GDT,這個裡面儲存了什麼東西呢?GDT主要記錄了塊點陣圖是從哪個塊開始的,inode點陣圖是從哪個塊開始的,inode表是哪裡開始的等資訊。

在提提inode表,前面提過,該表裡存放著inode,每個inode有128位元組,那麼inode又是如何劃分的呢?inode由兩部分組成,一部分儲存著檔案屬性(建立日期,檔名,許可權等資訊),另一部分是一個指標陣列,60位元組左右,當我們將資料存放到檔案裡時,系統就會檢索指標指向的那塊資料塊,將資料存放到該資料塊中。你可能發現了,inode裡有15個指標,每個指標指向一個數據塊,那麼當我們的檔案過大的時候,這些資料塊就不夠用了,因此,倒數第三個指標所指的資料塊又分成一個個指標,然後這些指標指向的資料塊才是存放資料的地方,這樣容量就大了。這被稱為一級定址。倒數第二個則是再增加一層指標,稱為二級定址,最後一個被稱為三級定址。有人經過計算,當三級定址後,檔案的大小可過1T,若檔案有好幾個T,那麼怎麼辦呢?決解的辦法有很多,比如說,增加四級定址,或者增加塊大小等。

最後附上ext2檔案系統簡圖: