1. 程式人生 > >【磁碟及檔案系統管理詳解】

【磁碟及檔案系統管理詳解】

磁碟及檔案系統管理詳解

【原創】版權所有翻者必究。

【參考文獻:馬哥視訊】

目前市場上主流的磁碟是機械式硬碟

         u盤,光碟,軟盤,硬碟,磁帶

機械式硬碟

【硬碟內部由一個個同心圓組成】如下圖:


硬碟內部所有碟片都固定在一根“軸”上,所以:所有盤面都是同步運動。如下圖

硬碟這裡面還有個讀寫的磁頭,用來改變盤面中磁塊的磁性變化。從而來儲存0或1,

其中0代表磁塊沒有磁性,1代表磁塊有磁性


在硬碟中說以磁碟都是雙面可讀寫的,說以每一個盤面都有一個磁頭,一個磁碟中就要兩個磁頭。每個磁頭都懸浮在盤面上,距離盤面非常近幾乎只有幾微米的距離

圖下為硬碟的外部結構:

盤面的結構如圖下:

在盤面中有很多磁軌,每個磁軌由內而外每個磁軌的周長都不一樣。因此外面的磁軌要比裡面的磁軌能儲存更多的資料。為了便於資料管理,在每個磁碟上磁軌的空間是劃分一個一個的扇區即:Secto

Secto(扇區):用來儲存使用者的資料並且包含自己扇區的編號已經扇區的位置等資訊。

         所以對於一個原本有512個位元組的扇區可以就只有500個位元組可以用來存放資料,還有12個位元組是記錄扇區自己的資訊。這就 為什麼我沒通常購買的500G的硬碟實際上沒有500G的原因。以及購買的16G的u盤也沒有16G的原因。

         在硬碟運作時,所有碟片的所有盤面都是同時工作的,為了提高儲存速度,對於一個檔案很有可能在每個盤面,都儲存了檔案的一部分。並且儲存時是按照整個磁軌(一個圓)來進行資料儲存的

圖上滑鼠所指的位置,位於不同磁碟相同編號的磁軌所組成的一個立體的圓叫做“柱面”(Cylinder)

【柱面(Cylinder)】:不同盤面上相同編號的磁軌組成柱面

         通常磁碟在使用時都要劃分分割槽,如果不劃分分割槽,就意味著整個磁碟只能儲存一個“檔案系統”。如果不劃分分割槽,每一個分割槽都可以是一個獨立的檔案系統

【分割槽】:在磁碟中建立起來的邏輯邊界

在磁碟剛出廠時,廠商會對磁碟做一次低階格式化:低階格式化就是用來劃分磁軌的,把整個磁碟按照磁碟的旋轉速度,物理屬性,等一些資訊來劃分好磁軌,扇區等。但磁盤裡面並沒有任何分割槽。

【低階格式化】:用來劃分磁軌

【分割槽(Partition)】:把整個磁碟劃分成多個不同的邏輯組成結構,每個組成結構裡面可以建立不同的“檔案系統”。所以分割槽是用來建立“檔案系統”的

每一個磁碟都有個MBR(MasterBoot Record)或者(Main Boot Record)

【MBR】:主引導記錄

         主引導記錄(MBR)在整個磁碟的第0盤面0磁軌第0扇區,一共是512個位元組,這512個位元組不屬於任何作業系統即(你在磁碟上安裝作業系統後你的系統也無法正常訪問這512個位元組),MBR是屬於磁碟的,是全域性的,是獨立在作業系統之外的。

         在MBR中一共劃分為三段:

【第一段:446bytes】:BootLoader,是一段程式即(主引導記錄)即使你磁碟上有作業系統,沒有這個446個位元組的主引導記錄也是無法啟動作業系統的。

【第二段:64bytes:】在這個裡面每16byte可以標示一個分割槽所有一個磁碟最多可以劃分4個主分割槽

【第三段:2bytes】Magic Number(摸數)主要是標記MBR是否有效

         注意:在硬碟中MBR當中的BootLoader是啟動作業系統的重中之重

當電腦剛開啟時,類存條中的的資料時空的,cpu所讀寫的資料都來自於記憶體,所有當電腦剛開機是BIOS中有一段程式程式碼能完成電腦自身健康狀況的檢查(即電腦的自檢)BIOS中設定了如何檢查自身的健康狀況。

在開機後,BIOS通電後能將自己的那段程式碼對映到到記憶體條最開始處的一段空間中。

電腦開機後cpu就開始試圖去載入記憶體條中最開始的一段程式程式碼。這段程式碼剛好是BIOS那麼接下來就執行BIOS指令。BIOS指令執行完成後,BIOS發現系統自檢沒有任何問題了,接下來就更具BIOS中設定的啟動次序挨個的去尋找啟動裝置的MBR(假如第一是光碟,那麼就找光碟的MBR如果光碟沒有MBR就找第二個裝置的MBR,如果有的裝置有MBR但MBR已經損壞,那麼系統就開始報錯。告訴你啟動不了。(注意:系統啟動時是在第一個啟動裝置沒有的情況下才會去尋找第二個啟動裝置))如果開始啟動硬碟,那麼就開始讀取硬碟的MBR。BIOS就會將硬碟中的MBR載入到記憶體條中,先開始執行446個位元組的BootLoader這段程式執行完成後然後在執行64個位元組的分割槽表。然後根據分割槽表去讀取對應的作業系統。(因此,如果沒有分割槽表,那麼就無法尋找我們的作業系統了)所有BootLoader載入進來後BIOS就退出了,BIOS就將執行的指令交給了BootLoader(即告訴cpu接下來執行BootLoader)。於是cup執行BootLoader後根據我們自己安裝的作業系統,他會找到那段特定分割槽,於是BootLoader就會去對應的分割槽上尋找對應作業系統的核心,如果找到作業系統的核心,就將核心讀取進入記憶體條中。當核心讀取進入記憶體條並解壓縮執行完成以後,BootLoader就將cpu的控制權交給作業系統的核心。接著作業系統的核心就開始啟動自身,根據我們的配置能夠找到“檔案系統”在什麼地方,找到作業系統所需要執行的什麼程式。終止作業系統啟動完成。(即看到桌面)

       所有無論是硬碟中無論是446位元組的BootLoader壞了還是64位元組的分割槽表中哪一個壞了,我們硬碟中的作業系統都是無法啟動。不管如此如果硬碟中的64位元組的分割槽表丟失,將硬碟連線到其他主機上硬盤裡面的檔案也是無法讀取。

       所有MBR對於硬碟是相當重要的

         雖然64位元組存放分割槽表的位置只能建立4個主分割槽,但是我們可以拿一個16個位元組用來標記。這個標記不是標記分割槽資訊,而是用來存放指標,指向硬碟中一個更大的位置來告訴計算機這個地方還有分割槽資訊,讓計算機來讀取。所有在哪個更大的空間中就能儲存更多的磁碟分割槽資訊。而這個建立為指標的分割槽叫做:“擴充套件分割槽“。所有通過這種方式就能在磁碟中建立更多的分割槽

         例如:假如硬碟有200G,本來就可以存放4個主分割槽的位置你將第第一個主分割槽標記為:20G的空間,第二個主分割槽標記為:30G的空間,第三個主分割槽標記為40G的空間,第四個也建立主分割槽標記為50G的空間,那麼還有200-30-40-50=80G的空間沒有標記出來,那麼你這個200G的硬碟就只能使用120G了,剩下的80G就無法訪問了,因為你沒有做分割槽標記,你自能建立4個主分割槽。如果(如下圖):你將最後一個16位元組的位置用作指標指向另外一塊空間,那麼在哪個更大的空間中就還可以繼續建立更多的分割槽資訊了。(即在最後一個用來建立擴充套件分割槽)

         說以硬碟一般來講都是三個主分割槽一個擴充套件分割槽,或者一個主分割槽一個擴充套件分割槽。

即主+擴充套件<=4,而擴充套件分割槽在一個系統上只能有一個(這裡指的擴充套件分割槽是16個位元組去指向一個更大的空間。不是說在哪個更大空間中建立的分割槽)

注意:磁碟分割槽是按照“柱面”(柱面(Cylinder):不同盤面上相同編號的磁軌組成柱面

)進行的即:按柱面儲存。

【按柱面儲存】硬碟儲存一個檔案為了加速檔案的儲存也是按照柱面來儲存。即:儲存一個數據會在每個盤面都儲存,由於碟片的運轉速度,運轉方式,運轉次序都是一致的而且讀寫資料的磁頭都是固定在一個機械臂上,所以它們都是同步運動的。因此在儲存資料的時候,它們每一個盤面上的磁頭都在不同盤面上對應的相同位置(如下圖)。這就是所謂的“按柱面儲存”

所以,磁碟上的分割槽也是按照柱面進行的。一般來講,柱面的編號按照盤面來說,最外面的為第0柱面,依次向裡遞增。由於磁碟是按照同心旋轉的速度來實現資料的讀取和儲存。

那麼磁碟的讀寫速度就取決於盤面旋轉的速度和磁頭的旋轉(跨越磁軌)的速度。這就叫做磁碟的讀寫延遲。

         所有衡量一個硬碟的指標就包括它的“平均尋道時間“,那麼碟片的轉速越快,那麼硬碟的效能越好。筆記本的硬碟一般都是5400轉每分鐘(RPM),桌上型電腦硬碟一般都是7200轉沒分鐘。工業基本的硬碟比如:SCSI有10000轉每分鐘(即10k轉),15k的轉速。所以硬碟的轉速越快,效能越好,但同時磁碟的發熱量就越大。

         對於5400轉/分鐘的轉速已經相當快了,如果磁碟直接在空氣中旋轉,一定會燒起來。所以在硬碟內部是真空的,也不能有任何灰層,應為我們知道磁頭距離盤面的距離只有幾微米,所以一粒灰層在上面絕對相當於一座山。所以要是你拆開了硬碟核心部件然後再合上執行,絕對一股白煙硬碟就沒了。當然把裡面做成真空主要是避免灰層。

         由於磁碟旋轉是同軸的,即固定角速度,那麼在同一個時間段裡,磁頭在裡面和外面所劃過的距離也就不一樣。因此磁軌越靠外,其讀寫速度越高。所有我們經常頻繁訪問到的資料最好放在最外面的磁軌。通常我們劃分磁碟時C盤都在最外面的磁軌上,然後接下來的是D盤….

         通常我們硬碟上劃分好分割槽後,就可在分割槽上儲存檔案了,那麼接下來就要提到“檔案系統”

         在儲存檔案過程中,對於磁碟來講儲存的都是0101程式碼,(即:0代表磁塊沒有磁性,1代表磁塊有磁性)那麼怎麼區別一個檔案的起始點和結束點,就要對磁盤裡面數據做一些邏輯的邊界。(即從哪個地方起始,哪個地方結束)即:能夠有一個定址定位的方法。

為了快速定位去找到對應的檔案,那麼就要建立一個編目即:Metadata:

【Metadata】編目:為了檢索檔案,標識檔案的一種資料。

         所有建立完分割槽後為了檢索檔案,快速的定位檔案,就要在這個分割槽上建立“檔案系統“,檔案系統簡單來說類似於一個軟體,本身並不是在磁碟分割槽上,但是檔案系統中的資料是在檔案系統所管理的分割槽上。檔案系統能把一個分割槽成兩塊,第一塊為:源資料儲存區,第二塊為:資料儲存區。而資料儲存區又劃分為一個個邏輯單元,在源資料中記錄檔案存放在那些單元中(即檔案地址),以及檔案編號。(如下圖)即每儲存一個檔案就要在編目中新增一條記錄,記錄檔案的編號和檔案的地址。我們此文當中將這條資訊稱為:條目即(索引結點:inode)。

當然,上面的比如只是很粗糙。真正的檔案系統不止這些。

比如:在上面中系統分了很多很多磁碟塊,系統為了知道那些磁碟塊已經使用了,那些磁碟塊沒有使用。就要建立“快點陣圖:bitmap“。快點陣圖也是存放在源資料中。簡單說,就是在塊點陣圖(bitmap)中模擬了一個數據儲存區,裡面標示了資料儲存區所分割的邏輯單元,哪一個已經使用了,哪一個還沒有使用,分別用(0101)來標示。那麼系統為了尋找整個分割槽中有那個塊點陣圖還沒有使用,就可以通過直接掃描塊點陣圖來獲取,就不必整個分割槽做一次全盤掃描,這樣就大大提高了查詢檔案的速度。

【塊點陣圖bitmap】:即每一個塊中標記了一個邏輯單元(即一個bit標記一個邏輯單元)儲存位為1表示已經使用,儲存位為0表示沒有使用。是加速查詢空閒磁碟塊的一種機制。

         其實在源資料儲存區中其間已經制定了一段固定區域來儲存“編目“。假設檔案特別多,當我們新建一個檔案時,就要在”編目”中儲存對於的位置資訊。假設一個編目的空間有10M,那麼要知道這個編目中有哪些空間是已經標記了檔案,哪些空間還沒有標記檔案。就為編目也要建立一個位圖:那麼點陣圖中對應了編目中的每一個條目即”索引結點inode”:

【inode(inodexnode)索引結點】:inode中存放了檔案的ID號,對應檔案的許可權,屬主和屬組,大小,時間戳等。唯獨沒有的就是“檔名“。

         假如一個檔案特別大,在inode一個條目中無法全部都標識該檔案所使用的所有邏輯單元(也稱磁碟塊),那麼inode中還可以向建立磁碟分割槽一樣標記一個指標來指向下個inode號,說明該inode號中所標識的邏輯單元(也稱磁碟塊)也是和他同一個檔案。那麼這樣的inode條目就像擴充套件分割槽一樣。相當於一個間接目錄,在檔案系統中有二級間接目錄,三級間接目錄…….那麼在一個條目裡面,無論通過直接的或間接引用,最終能引用多少個間接inode決定了單個檔案最終有多大。即,一個條目的儲存空間中能存放多少條索引結點(inode)號,一個索引結點最多能引用多少個邏輯單元。

         在有些分割槽上所說的最大支援單個檔案大小最大為多少多少G就是靠這個來決定的。

向FAT32檔案系統最大支援為4G

         我們通常所說的目錄(即資料夾)也是檔案,那麼上面inode號中沒有儲存的檔名都存放在目錄(即資料夾)中,資料夾自身也有大小(這裡的大小不是資料夾裡面存放檔案的大小和,而是資料夾名,和檔名所佔位元組的大小和)。這裡要注意的是目錄也是個檔案,所有目錄也需要佔據磁碟塊即(上面說的邏輯單元)。在目錄的磁碟塊(邏輯單元)中所儲存的資訊分為兩段,第一段為inode號碼即:(inode編目中的一個編目號碼(相當於一個檔案的索引)),這個inode號碼對應的檔名。如下圖:

         在linux系統中根是自引用的,即cpu可以直接訪問到根。那麼要尋找\tmp\wenjian.txt個檔案,則cpu先找到根即(\)目錄(即資料夾)所對應的磁碟塊(邏輯單元),然後然後在這個磁碟塊中(邏輯單元)找到tmp檔名所對應的inode號碼,然後拿著這個號碼去編目中尋找inode(索引結點)號碼所對應的磁碟塊地址(即邏輯單元),這個磁碟塊(邏輯單元)中找到wenjian.txt檔名所對應的inode(索引結點)號碼,再更具這個inode(索引結點)號碼去編目中尋找inode(索引結點)所對應的磁碟塊(邏輯單元)(可能有多個磁碟塊),然後將這些磁碟塊中所記錄的二級制0101程式碼。就是該檔案的內容。即wenjian.txt的內容。

         注意:在檔案系統中每一個檔案都對應一個inode(索引結點)。

         【建立檔案原理】

有了上面的邏輯,假設要在/tem/ftp/目錄下建立一個檔案叫wenjian.txt。那麼程式首先要找到tmp目錄的磁碟塊,然後在根據ftp所對應的inode號碼找到ftp目錄的磁碟塊,在該磁碟塊中新增一條資訊,記錄系統給該檔案在編目中申請的inode編號,和該檔案的檔名。在編目中除了記錄inode編號外還要記錄系統給該檔案通過掃描“塊點陣圖bitmap“給改檔案分配的空閒磁碟塊地址。然後再將檔案內容寫入到該檔案inode號碼所對應的磁碟塊中。

【複製檔案原理】

有了上面建立檔案的原理,那麼複製檔案的原理幾乎和建立檔案的原理一樣,這裡不再做說明。

【刪除檔案原理】

刪除一個檔案,則只需要在該檔案所在目錄的磁碟塊中刪除此目錄對應的inode號所對應的檔名那條記錄刪除,然後去編目中刪除該檔案對應的inode號的記錄刪除,已經在快點陣圖bitmap中將inode好所對應的磁碟塊重新標記為0(即未使用)便可完成刪除。所有刪除檔案是沒有真正抹掉該檔案所對應的所有磁碟塊中的二進位制程式碼的。所在在系統上刪除檔案一般都很快。

【同一個分割槽中移動檔案原理】

同理,移動檔案只需要將檔案原有目錄中標記的檔案資訊刪除,在新的目錄中新增該檔案的一條記錄。就ok了,所有我們通常在同一個分割槽中移動檔案的速度相當快。

所以為什麼會有檔案恢復工具,能恢復你之前在磁碟上刪除的檔案,原因就在這裡。向360上面的檔案粉碎機,就是在你該檔案所對應的資料磁碟塊中,寫入一大堆隨機產生的二級制程式碼覆蓋掉你原有的檔案。比方說,向那些磁碟塊中全部填0,那麼你的檔案要想找回來只是比較困難了,並不一定找不回來。至於怎麼找回來,本文件不做解釋。

事實上,在檔案系統中遠不止我們上面所說的那麼簡單,你要想,要是每個檔案都建立一個inode號,那麼在那麼多的inode號中尋找一個檔案依然是很麻煩的。真正的檔案系統上我們上面所說的那個算一個“塊組“(block group)。即:每一個快組都有我們上面所說的功能。那麼一個磁碟上會建立多少個這樣的”塊組”(block group)事實上是不確定的。

【block group塊組】

         在檔案系統中每一個塊組(block group)都有一個塊點陣圖,一個編目。

在這些塊組中怎麼管理這些塊組的方法和上面說道的單個塊組的管理方法一樣,一樣有這些塊組的一個快點陣圖,這個塊點陣圖可以叫做“超級塊點陣圖”。這就是檔案系統。

【格式化】:

         格式化分為:

                   低階格式化:用來劃分磁軌,一般有廠商完成。

                   高階格式化:就是我們通常說的格式化,即建立檔案系統。

檔案系統屬於核心的功能

檔案系統有

                   windows常用的檔案系統:FAT32,NTFS

                   光碟檔案系統:ISO9660

                   網路檔案系統:CIFS(通用網際網路檔案系統)

                   linux常用的檔案系統:ext2,ext3,ext4,xfs,reiserfs,   jfs(日誌檔案系統)

                   liux常用的網路檔案系統:nfs

                                                        叢集檔案系統:ocfs2

                                                        全域性檔案系統:gfs2

                   linux 上FAT32叫做vfat. 

我們上面說到的哪個檔案系統屬於ext系列的檔案系統,不過其他檔案系統在管理上都大致是這樣的思路。大體上都是近似的。

至於檔案作業系統是怎麼識別不同格式的檔案系統的,這裡不做解釋。

                  對於檔案系統來講,資料都分為兩類:

                   一類是:源資料:即要儲存的檔案屬性資訊(比方說,檔案大小之類……)

                   另一類是:檔案的路徑,即目錄(資料夾)

經過上面講的檔案系統底層邏輯分析大致上在一塊硬碟中我們首先要將磁碟分成一個個塊即:block,這些塊組合起來就叫塊組(block group)。

【block塊】:磁碟塊,是檔案系統管理磁碟空間的邏輯結構,和磁碟本身沒有關係。每一個塊都有一個編號。從0開始編號。

【inode】:index node記錄檔案屬性,許可權。等…..

所以磁碟中一個分割槽在格式化後,大小都會發生變化,其中有一部分空間劃分出來,給“源資料”預留的。

         由此我們知道,每個磁碟塊可能屬於一個檔案,而一個檔案可能對應多個磁碟塊。所有inode的個數和磁碟塊的個數並不是一一對應的。

【block size】塊大小

對檔案系統來講塊(block size)大小是確定的,指的是2的n次方個位元組。一般來講只能是1024bit,2048bit,4096bit。

         在記憶體中記憶體中的空間是用“頁框”來儲存的。頁框的大小通常是4k,即若磁碟是1K的大小則一個頁匡就可以存放4個磁碟塊。若是4k的則存放一個磁碟塊。但是這個頁框的大小對於不同cpu來講32位和64位的大小就不一樣。

         不管怎麼樣,我們現在至少知道塊(block)是有塊大小。我們說過一個磁碟塊只能屬於一個檔案,假如一個磁碟塊是1K的,那麼你建立該檔案後,這個檔案預設的最小大小就為1k。如果這檔案只佔用了一個位元組,但這一個磁碟塊都必須給它。所以4k的磁碟塊和1k的磁碟塊浪費的程度就不一樣。所以在windows上點選檔案看屬性時,會告訴你一共有多少個空間佔據了多少個空間,一般來講佔據的空間都要比實際空間大。就是這個道理。(如圖)

說以一個檔案如果是1個位元組,第二個檔案如果是1個位元組,那麼兩個檔案的大小佔據的空間就是2K(前提是磁碟塊的大小為1k),如果像圖上磁碟塊的大小為4k那麼這兩個檔案佔據的大小就為8k。這就是佔據空間和實際檔案大小的區別。

         所以佔據磁碟塊的檔案一般都是如下兩類

                   普通檔案:檔案內容

                   目錄檔案:存放檔名稱和inode的對應關係

【bitmap點陣圖】:加快某種特定資料結構中資料查詢速度的一種非常重要的資料結構

因此點陣圖中為了提高檔案的查詢速度,實際上在資料儲存區域還劃分了塊組即(block group)

一般每個點陣圖都是用一個磁碟塊來標示,比如一個塊是1k的即1024*8為這個點陣圖所能標示的磁碟位。那麼一個位圖所能標示的磁碟位最後也可以確定。那麼一個塊組中包含了多少個塊,還要取決於塊的大小。哪不管怎麼講,這就決定了在不同的磁碟分割槽上只要塊的空間大小(block size)不一樣,那麼塊組中有多少個塊也就不一樣了。所有對於當前分割槽中有多少個塊組還得要根據塊的空間大小(block size)來確定。由於塊組的數量之多,那麼在一個分割槽中也儲存了這些塊組的資訊即:超級塊(super block)

【super block】:超級塊,儲存了整個分割槽中的全域性資訊,包括

1、  塊組的數目

2、 每個塊組中包含多少塊

3、 塊大小(block size)

4、 空閒磁碟塊

5、 已用磁碟塊

6、 空閒inode

7、 已用inode

         那麼如果一個磁碟分割槽中的超級塊壞了,那麼這個磁碟中的資料也就意味著無法訪問了。為了防止這一事情的發生,超級塊(super block)可以有多個備份。

         由於塊組的數量太多,而超級塊也只是一個塊,記錄不了所有塊組的資訊,那麼在系統中還有一個東西:塊組描述符

【GDT快組描述符】:這裡面保留了當前系統上有多少個塊組,每一個塊組從第幾個塊開始到第幾個塊結束。等等這樣的相關資訊。

         那麼“塊組描述符”損壞了,整個分割槽中的檔案也同樣無法查看了,同樣也要備份。

如上圖:假如圖1代表一個分割槽,Block Group0, BlockGroup 1….. BlockGroup n分別代表這個分割槽中所有的塊組(block group)。那麼每個塊組(block group n)中都有一個圖2

         在分割槽中

【Boot Block】:為任何一各分割槽中編號為0的一個塊,這個快是不能被使用的,存放的是“引導塊“,假如這個分割槽上如果安裝了作業系統,那麼這個作業系統的BootLoader就存放在這個塊中。

注意:一個磁碟的MBR是一個扇區(sector),那個扇區不屬於任何一個分割槽,這個扇區裡面而且只能是512個位元組,而Boot Block則是任何一個分割槽中的第一個塊,一般在多系統互存的時候會用到這第一個塊。即你的電腦上要安裝雙系統時才會用到。如果你只有一個作業系統,這個作業系統的引導資訊是安裝在硬碟的MBR中的。如果你安裝了兩個作業系統,那麼第二個作業系統的引導資訊就安裝在這個第一個作業系統自己所在分割槽的Boot Block中。一般來講任何作業系統啟動都需要boot Block而boot Block 是一段程式得安裝在MBR中。如果沒安裝在MBR中,那麼就不能作為開機啟動的作業系統。如果MBR已經被一個作業系統佔據了,而第二個作業系統的引導資訊可以安裝在這個第一個作業系統自己所在分割槽的Boot Block中。但是一定要記得,放在分割槽中的Boot Block中是沒有意義的,要是MBR損壞了,即使你分割槽中的Boot Block中有啟動程式也是啟動不了的。那就意味著分割槽中的Boot Block是被MBR中的BootLoader引用的。

         所有除了第一個塊中,其他的塊就按照源資料直接被劃分為塊組了。(並不是按照前面寫的劃分成什麼源資料區和資料區。)

那麼在塊組中

【super Block】超級塊,存放在每個組中第1個塊中,為了防止損壞,早期每個塊組中的第1個塊,都是super Block。後來為了節省空間,只是在第0個塊組,第3個,第7個…裡面做了備份。只存個3-5份。

         預設情況,系統尋找的都是第0個塊組中第1個塊中的SuperBlock,如果這個塊組壞了,就去尋找備份的塊組。如果不會,自己可以手動修復,因為有備份。

【GDT】塊組描述表,塊組描述表中存的是當前這個分割槽中每個塊組的塊組名,每一個塊組的起始磁碟塊,結束塊的編號。即塊組邊界等資訊。所有這個資訊也是不能被損壞的,也是需要備份多次。根據塊組(block Group)的個數不同,GDT所佔用的空間大小未必是一個磁碟塊。

【BlockBitMap】當前塊組的塊點陣圖

【inodeBitmap】當前塊組的inode點陣圖

【inode Table】當前塊組的inode表

【Data Blocks】當前塊組的所有塊

到這裡,檔案系統是怎麼運作的,以及組成基本就說清楚了。

那麼“目錄”中是存放檔案的inode號和檔名等資訊,即格式為

在目錄中每一行用來引用一個檔案,而沒一行的格式為:

         【Inode】:檔案的inode號

         【rec_len】:最近一次的訪問時間長度

         【name_len】檔名稱長度

         【file_type】檔案型別

         【name】檔名

那麼如果磁碟中檔案太大,一個inode存不下,那麼就按照下面直接引用和間接引用來呼叫。即:直接指標,一級間接指標,二級間接指標。