硬碟的數據結構
(1)基本結構
磁軌與柱面都是表示不同半徑的圓,在許多場合,
磁軌和柱面可以互換使用,我們知道,每個
磁碟有兩個面,每個面都有一個磁頭,習慣用磁頭號來區分。
扇區,磁軌(或柱面)和
磁頭數構成了硬碟結構的基本參數,幫這些 參數可以得到硬碟的容量,基計算公式為:
2.簇
“簇”是硬碟上
存儲數據進行分配的最小單位。當創建一個很小的檔案時,如是一個位元組,則它在
磁碟上並不是只占一個位元組的空間,而是占有整個一簇。作業系統視不同的存儲介質(如
軟碟,硬碟),不同容量的硬碟,簇的大小也不一樣。簇的大小可在稱為
磁碟參數塊(BPB)中獲取。簇的概念僅適用於數據區。
(2)數據結構
格式化好的硬碟,整個
磁碟按所記錄數據的作用不同可分為五部分:
主引導記錄(MBR:Main Boot Record),作業系統引導記錄(
OBR:OS Boot Record),
檔案分配表(FAT:File Assign Table),根目錄(DIR:Directory)和數據區(DATA)。前5個重要信息在
磁碟的外
磁軌上,原因是外圈周長總大於內圈周長,也即外圈存儲密度要小些,可靠性高些。其中只有
主引導扇區是唯一的,其它的隨你的分區數的增加而增加。
主
引導扇區位於整個硬碟的0柱面0磁頭1扇區,包括硬碟
主引導記錄MBR(Main Boot Record)和
分區表DPT(Disk Partition Table)。其中
主引導記錄的作用就是檢查
分區表是否正確以及確定哪個分區為
引導分區,並在程式結束時把該分區的啟動程式(也就是作業系統
引導扇區)調入記憶體加以執行。至於
分區表,很多人都知道,以80H或00H為開始標誌,以55AAH為結束標誌,共64位元組,位於本
扇區的最末端。值得一提的是,MBR是由分區程式(例如DOS 的Fdisk.exe)產生的,不同的作業系統可能這個
扇區是不盡相同。如果你有這個意向也可以自己去編寫一個,只要它能完成前述的任務即可,這也是為什麼能實現多系統啟動的原因(說句題外話:正因為這個
主引導記錄容易編寫,所以才出現了很多的
引導區病毒)。
2.作業系統引導扇區
OBR(OS Boot Record)即作業系統
引導扇區,通常位於硬碟的1柱面0磁頭1扇區(這是對於DOS來說的,對於那些以多重引導方式啟動的系統則位於相應的
主分區/
擴展分區的第一個扇區),是作業系統可直接訪問的第一個扇區,它也包括一個引導程式和一個被稱為BPB(BIOS Parameter Block)的本分區參數記錄表。其實每個
邏輯分區都有一個
OBR,其參數視分區的大小、作業系統的類別而有所不同。引導程式的主要任務是判斷本分區根目錄前兩個檔案是否為作業系統的
引導檔案(例如MSDOS或者起源於MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一個檔案讀入記憶體,並把控制權交予該檔案。BPB參數塊記錄著本分區的起始
扇區、結束扇區、檔案存儲格式、硬碟介質描述符、根目錄大小、FAT個數、
分配單元(Allocation Unit,以前也稱之為簇)的大小等重要參數。
OBR由
高級格式化程式產生(例如DOS 的Format)。
FAT(File Allocation Table)即
檔案分配表,是DOS/Win9x系統的檔案定址系統,為了
數據安全起見,FAT一般做兩個,第二FAT為第一FAT的備份, FAT區緊接在
OBR之後,其大小由本分區的大小及檔案分配單元的大小決定。關於FAT的格式歷來有很多選擇,Microsoft 的DOS及Windows採用我們所熟悉的FAT12、FAT16和FAT32格式,但除此以外並非沒有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的
檔案管理方式。
4.根目錄區
DIR是Directory即根目錄區的簡寫,DIR緊接在第二FAT表之後,只有FAT還不能
定位檔案在磁碟中的位置,FAT還必須和DIR配合才能準確定位檔案的位置。
檔案目錄是檔案組織結構的又一重要組成部分。
檔案目錄分為兩類:根目錄,子目錄。根目錄有一個,子目錄可以有多個。子目錄下還可以有子目錄,從而形成“樹狀”的
檔案目錄結構。子目錄其實是一種特殊的檔案,檔案系統為目錄項分配32位元組。目錄項分為三類:檔案,子目錄(其內容是許多目錄項),
卷標(只能在根目錄,只有一個。目錄項中有檔案(或子目錄,或
卷標)的名字,擴展名,屬性,生成或最後修改日期,時間,開始簇號,及檔案大小。
定位檔案位置時,作業系統根據DIR中的起始單元,結合FAT表就可以知道檔案在
磁碟的具體位置及大小了。在DIR區之後,才是真正意義上的數據存儲區,即DATA區。
5.數據區
DATA雖然占據了硬碟的絕大部分空間,但沒有了前面的各部分,它對於我們來說,也只能是一些枯燥的
二進制代碼,沒有任何意義。在這裡有一點要說明的是,我們通常所說的格式化程式(指
高級格式化,例如DOS下的Format程式),並沒有把DATA區的數據清除,只是重寫了FAT表而已,至於分區硬碟,也只是修改了MBR和
OBR,絕大部分的DATA區的數據並沒有被改變,這也是許多硬碟數據能夠得以修復的原因。但即便如此,如MBR/
OBR/FAT/DIR之一被破壞的話,也足夠咱們那些所謂的DIY老鳥們忙乎半天了……需要提醒大家的是,如果你經常整理
磁碟,那么你的數據區的數據可能是連續的,這樣即使MBR/FAT/DIR全部壞了,我們也可以使用磁碟編輯軟體(比如DOS下的DiskEdit),只要找到一個檔案的起始保存位置,那么這個檔案就有可能被恢復(當然了,這需要一個前提,那就是你沒有覆蓋這個檔案……)。
硬碟分區方式
主分區是一個比較單純的分區,通常位於硬碟的最前面一塊區域中,構成邏輯C磁碟。在
主分區中,不允許再建立其它邏輯磁碟。
擴展分區的概念則比較複雜,也是造成分區和邏輯
磁碟混淆的主要原因。由於硬碟僅僅為
分區表保留了64個位元組的
存儲空間,而每個分區的參數占據16個位元組,故
主引導扇區中總計可以存儲4個分區的數據。作業系統只允許存儲4個分區的數據,如果說邏輯
磁碟就是分區,則系統最多只允許4個邏輯磁碟。對於具體的套用, 4個邏輯
磁碟往往不能滿足實際需求。為了建立更多的邏輯
磁碟供作業系統使用,系統引入了
擴展分區的概念。
所謂
擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個分區的指針,這種指針結構將形成一個
單向鍊表。這樣在
主引導扇區中除了主分區外,僅需要存儲一個被稱為
擴展分區的分區數據,通過這個擴展分區的數據可以找到下一個分區(實際上也就是下一個邏輯
磁碟)的起始位置,以此起始位置類推可以找到所有的分區。無論系統中建立多少個邏輯
磁碟,在主引導扇區中通過一個
擴展分區的參數就可以逐個找到每一個邏輯磁碟。
需要特別注意的是,由於
主分區之後的各個分區是通過一種
單向鍊表的結構來實現連結的,因此,若單向鍊表發生問題,將導致邏輯磁碟的丟失。
數據存儲原理
1.檔案的讀取
作業系統從目錄區中讀取檔案信息(包括檔案名稱、後綴名、檔案大小、修改日期和檔案在數據區保存的第一個簇的簇號),我們這裡假設第一個簇號是0023。
作業系統從0023簇讀取相應的數據,然後再找到FAT的0023單元,如果內容是檔案結束標誌(FF),則表示檔案結束,否則內容保存數據的下一個簇的簇號,這樣重複下去直到遇到檔案結束標誌。
2.檔案的寫入
當我們要保存檔案時,作業系統首先在DIR區中找到空區寫入檔案名稱、大小和創建時間等相應信息,然後在Data區找到閒置空間將檔案保存,並將Data區的第一個簇寫入DIR區,其餘的動作和上邊的讀取動作差不多。
3.檔案的刪除
看了前面的檔案的讀取和寫入,你可能沒有往下邊繼續看的信心了,不過放心,Win9x的檔案刪除工作卻是很簡單的,簡單到只在目錄區做了一點小改動――將目錄區的檔案的第一個字元改成了E5就表示將改檔案刪除了。