文章目錄
編輯人員資料
評論及獎項
主開機記錄是什麼?
幾乎所有系統的主開機記錄都是相同的。它位於硬碟的第一個磁碟區,位於 Cylinder 0,Head 0,Sector 1。這是您的電腦在檢查所有硬體(POST)並控制載入軟體後執行的第一段代碼在硬碟上。它還包含磁碟分割樣式表,它定義了硬碟的不同部分。基本上,如果這個 512 字元的小部分出現任何問題,您的硬碟就會當機。
Offset | 描述 | 大小 |
000h | 可執行代碼(開機電腦) | 446 字元 |
1BEh | 第一個磁碟區條目(見下表) | 16 字元 |
1CEh | 第二個磁碟區條目 | 16 字元 |
1DEh | 第三個磁碟區條目 | 16 字元 |
1EEh | 第 4 個磁碟區條目 | 16 字元 |
1FEh | 開機記錄簽名 (55hAAh) | 2字元 |
- 磁碟區條目(MBR 的一部分)
Offset | 描述 | 大小 |
00h | 磁碟區的當前狀態(00h=不活動,80h=活動) | 1字元 |
01h | 磁碟區開始 - 頭 | 1字元 |
02h | 磁碟區的開始 - 柱面/扇區(見下文) | 1個字 |
04h | 磁碟區類型(見下表) | 1字元 |
05h | 磁碟區結束 - 頭 | 1字元 |
06h | 磁碟區結束 - 柱面/扇區 | 1個字 |
08h | MBR 與磁碟區中第一個扇區之間的扇區數 | 1個雙字 |
0Ch | 磁碟區中的扇區數 | 1個雙字 |
- 柱面/扇區編碼
我想在 10MB 硬碟和 8086 的時代,代碼非常珍貴。所以他們竭盡全力保護空間。不幸的是現在我們不得不忍受它,但幸運的是他們創造了翻譯系統的新方法,因此 1024 柱面限制 (2^10) 不是太大的問題,至少對於較新的電腦而言。年長的人通常需要某種磁碟覆蓋程序才能讓他們看到整個硬碟。
無論如何,要使扇區擺脫這種情況,您需要對其應用一個 AND 掩碼 ($3F)。要獲得 Cylinder,您需要將高字元與用 ($C0) 屏蔽的低字元進行 OR 運算,然後左移二位。這不是很容易解釋,所以我們將向您展示我是如何用我們製作的兩個例程(在 Pascal 中)對圓柱體/扇區進行編碼和解碼的。希望即使您不了解 Pascal,也能閱讀它。
Function CylSecEncode(Cylinder, Sector: Word): Word;
Begin
CylSecEncode: = (Lo(Cylinder) shl 8) or (Hi(Cylinder) shl 6) or Sector;
End;
Procedure CylSecDecode(Var Cylinder, Sector: Word; CylSec : Word);
Begin
Cylinder: = Hi(CylSec) or ((Lo(CylSec) and $C0) shl 2);
Sector: = (CylSec and $3F);
End;
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8個 | 7 | 6個 | 5個 | 4個 | 3個 | 2個 | 1個 | 0 |
圓柱鑽頭 7 至 0 | 圓柱鑽頭 9+8 | 扇區位 5 到 0 |
磁碟區類型列表
不僅僅顯示了這些,但我只包括了與 MS 操作系統相關的那些。
值 | 描述 |
00h | 未知或無 |
01h | 12 位元 FAT |
04h | 16 位元 FAT(小於 32MB 的磁碟區) |
05h | 延伸 MS-DOS 磁碟區 |
06h | 16 位元 FAT(磁碟區大於 32MB) |
0Bh | 32 位元 FAT(磁碟區最大 2048GB) |
0Ch | 與 0BH 相同,但使用 LBA 1 13h 延伸 |
0Eh | 與 06H 相同,但使用 LBA 1 13h 延伸 |
0Fh | 與 05H 相同,但使用 LBA 1 13h 延伸 |
讀取多個磁碟區
儘管在 FAT32 中擁有多個磁碟區的可能性不如在 FAT16 中,但它的工作方式仍然相同。第一個磁碟區是主磁碟區,其他所有磁碟區都儲存在延伸磁碟區中。不過,在讀取這些額外磁碟區時有點棘手(不是很多,只是一點點)。磁碟區表中的第一條記錄顯示了主磁碟區的位置(它有多大,從哪裡開始,從哪裡結束)。磁碟區表中的第二項顯示整個延伸磁碟區所在的位置(可能包括不止一個磁碟區)。要讀取更多磁碟區,請轉到延伸磁碟區開始的位置,然後讀取第一個扇區。它的作用就像 MBR。它應該在代碼所在的地方留有空白,在磁碟區表中,它的第一個條目是硬碟中的下一個磁碟區,如果還有,將有另一個延伸磁碟區,就像以前一樣。但是,所有對扇區號的引用都是使用新的 MBR 點作為參考,使其成為虛擬硬碟。以防萬一這沒有多大意義(順便說一句,如果沒有,我可以解釋我能理解的事情),讓我們展示如何設定具有三個磁碟區的硬碟。
整個硬碟的 MBR
Entry #1 - Points to Partition #1
Entry #2 - Points to the Entire Extended Partition
您將讀取該延伸磁碟區的第一個扇區,並看到另一個 MBR 結構。
延伸磁碟區的 MBR
Entry #1 - Points to Partition #2
Entry #2 - Points to Rest of Extended Partition after Partition #2
現在,這些條目中對扇區號(尤其是偏移 08h 處的條目)的所有引用都不會從硬碟的開頭引用,而是從延伸磁碟區的開頭引用。然而,CHS(柱面、磁頭、扇區)數字仍然是正確的。
再一次,您將讀取該延伸磁碟區的第一個扇區,並查看下一個 MBR。
其餘延伸磁碟區的 MBR
條目 #1 - 指向磁碟區 #3
沒有條目 #2,因為這是最後一個磁碟區
如果有另一個磁碟區,模式將像以前一樣繼續,直到到達最後一個磁碟區。
FAT32 開機記錄資訊
此資訊位於每個磁碟區的第一個扇區。
Offset | 描述 | 尺寸 |
00h | 跳碼+NOP | 3字元 |
03h | OEM 名稱(可能是 MSWIN4.1) | 8字元 |
0Bh | 每扇區字元數 | 1個字 |
0Dh | 每個集群的扇區 | 1字元 |
0Eh | 保留扇區 | 1個字 |
10h | FAT 拷貝數 | 1字元 |
11h | 最大根目錄條目數(FAT32 不適用) | 1個字 |
13h | 磁碟區中小於 32MB 的扇區數(FAT32 不適用) | 1個字 |
15h | 媒體描述符(硬碟為 F8h) | 1字元 |
16h | 舊 FAT 系統中每個 FAT 的扇區(FAT32 不適用) | 1個字 |
18h | 每磁道扇區 | 1個字 |
1Ah | 頭數 | 1個字 |
1Ch | 磁碟區中的隱藏扇區數 | 1個雙字 |
20h | 磁碟區扇區數 | 1個雙字 |
24h | 每個 FAT 的扇區數 | 1個雙字 |
28h | Flags (Bits 0-4 IndicateActive FAT Copy) (Bit 7 Indicates whether FAT Mirroringis Enabled or Disabled) (If FAT Mirroring is Disabled, the FAT Information is onlywritten to the copy indicated by bits 0-4) | 1個字 |
2Ah | FAT32 硬碟的版本(高字元 = 主要版本,低字元 = 次要版本) | 1個字 |
2Ch | 根目錄起始叢集號 | 1個雙字 |
30h | 文件系統資訊扇區的扇區號(見下面的結構)(從磁碟區開始引用) | 1個字 |
32h | BackupBoot 扇區的扇區號(從磁碟區開始引用) | 1個字 |
34h | 預訂的 | 12 字元 |
40h | 磁碟區的邏輯硬碟號 | 1字元 |
41h | 未使用(可能是前一個條目的高字元) | 1字元 |
42h | 延伸簽名 (29h) | 1字元 |
43h | 磁碟區序號 | 1個雙字 |
47h | 磁碟區的捲名 | 11 字元 |
52h | FAT 名稱 (FAT32) | 8字元 |
5Ah | 可執行代碼 | 420 字元 |
1FEh | 開機記錄簽名 (55hAAh) | 2字元 |
檔案系統資訊扇區指令
通常,這存在磁碟區的第二扇區,儘管因為在開機扇區中有對它的引用。我假設它可以四處移動。我從來沒有得到這個的完整照片。雖然我們確實知道重要領域在哪裡。
Offset | 描述 | 尺寸 |
00h | 第一個簽名 (52h 52h 61h41h) | 1個雙字 |
04h | 未知,當前(可能為空) | 480 字元 |
1E4h | FSInfo 扇區的簽名(72h 72h 41h 61h) | 1個雙字 |
1E8h | 空閒叢集數(如果未知則設定為 -1) | 1個雙字 |
1ECh | 最近分配的集群的集群編號。 | 1個雙字 |
1F0h | 預訂的 | 12 字元 |
1FCh | 未知或空 | 2字元 |
1FEh | 開機記錄簽名 (55hAAh) | 2字元 |
FAT32 硬碟佈局
Offset | 描述 |
Start of Partition | 開機扇區 |
Start + # of ReservedSectors | fat 表 |
Start + # of Reserved + (#of Sectors Per FAT * 2) | 資料區(從 Cluster #2 開始) |
聚類意義
叢集是硬碟上的一組扇區,其中包含資訊。一個 4K Cluster 有 8 個扇區 (512*8=4096)。每個叢集在 FAT 表中都有一個位置。當您查看 FAT 中的一個條目時,那裡的數字會告訴您該叢集中是否有數據,如果有,它是否是數據的末尾或者在它之後有另一個叢集。磁碟區上的所有數據都以 Cluster #2 開頭。如果 FAT 條目為 0,則該叢集中沒有數據。如果 FAT 條目是 0FFFFFFFh,則它是鏈中的最後一個條目。
這是我的資訊中最大的漏洞之一。當涉及到 FAT 表時,我們無法找到任何顯示數字意味著什麼的地方。我們能夠通過檢視 FAT32 硬碟來判斷鍊的末端,但我們不知道什麼代表壞叢集或顯示數據的最大有效數字是多少。
現在,您可以使用以下公式計算磁碟區中的最大有效集群:
((磁碟區中的扇區數)-(每個 FAT 的扇區數 * 2)-(保留扇區數))/(每個集群的扇區數)
如果該公式的答案中有任何餘數,則僅表示磁碟區末尾有一些額外的叢集(可能不足以構成另一個叢集),因此您可以去掉小數點後的任何內容.
目錄表
在低級別查看文件系統時的另一個方面是目錄表。目錄表是儲存所有文件和目錄條目的地方。基本上,FAT16 和 FAT32 的目錄表只有一個區別。不同之處在於:短文件名結構中的保留 OS/2 字元(偏移量 20 [14h])被替換為叢集號的高位字(因為它現在是 4 個字元而不是 2 個字元)。
文件分配表
腳註
1 - LBA = 邏輯塊尋址 - 使用內置於較新 BIOS 中的 Int 13h 延伸來訪問 8GB 屏障以上的數據,或嚴格以 LBA 模式訪問,而不是 CHS(柱面、磁頭、扇區)
額外提示:使用 EaseUS 硬碟救援軟體從 FAT32 硬碟復原丟失的資料
如果您不小心刪除、刪除或格式化了 FAT32 硬碟、USB 或其他儲存裝置上的資料,請不要驚慌。您最好的選擇就是讓 EaseUS Data Recovery Wizard 來幫忙!在這裡我們想推薦您嘗試EaseUS Data Recovery Wizard,可以在 3 個簡單的步驟內有效地復原刪除、格式化的資料。免費下載軟體以找回所有丟失的 FAT32 資料:
這篇文章有幫到您嗎?
相關文章
-
如何解決「The semaphore timeout period has expired」(信號量超時期限已過)
Gina 2024年03月15日
-
【解決】Win 7 升級 Win 10 出現錯誤代碼 0x80072f8f-0x20000
Harrison 2024年07月08日
-
Windows 11 帳戶被鎖定?5 種解除 Windows 11 帳戶鎖定的方法
Ken 2024年07月10日
-
Gina 2024年06月28日