人們在使用電腦時,有時由于異常操作,有時由于病毒侵襲,會導(dǎo)致某個分區(qū)消失或硬盤無法啟動。究其原因,就是硬盤分區(qū)表受損。硬盤分區(qū)表可以說是支持硬盤正常工作的骨架.操作系統(tǒng)正是通過它把硬盤劃分為若干個分區(qū),然后再在每個分區(qū)里面創(chuàng)建文件系統(tǒng),寫入數(shù)據(jù)文件.本文主要講述的是分區(qū)表的位置,結(jié)構(gòu)以及各個分區(qū)表是如何鏈接起來的.當(dāng)掌握了這些知識后,即使分區(qū)表受到破壞,一樣也可以根據(jù)殘存的數(shù)據(jù)手工修復(fù)分區(qū)表,從而修復(fù)分區(qū)。
一.分區(qū)表的位置及識別標(biāo)志
分區(qū)表一般位于硬盤某柱面的0磁頭
1扇區(qū).而第1個分區(qū)表(也即主分區(qū)表)總是位于
(0柱面,1磁頭,1扇區(qū)),剩余的分區(qū)表位置可以由主分區(qū)表依次推導(dǎo)出來.分區(qū)表有64個字節(jié),占據(jù)其所在扇區(qū)的[441-509]字節(jié).要判定是不是分區(qū)表,就看其后緊鄰的兩個字節(jié)(也即[510-511])是不是
"55AA",若是,則為分區(qū)表.二.分區(qū)表的結(jié)構(gòu)分區(qū)表由4項組成,每項16個字節(jié).共4×16
= 64個字節(jié).每項描述一個分區(qū)的基本信息.每個字節(jié)的含義如下: 分區(qū)表項含義
字節(jié) 含義
0
Activeflag.活動標(biāo)志.若為0x80H,則表示該分區(qū)為活動分區(qū).若為0x00H,則表示該分區(qū)為非活動分區(qū).
1,2,3 該分區(qū)的起始磁頭號,扇區(qū)號,柱面號磁頭號 -- 1字節(jié), 扇區(qū)號 --
2字節(jié)低6位,柱面號 -- 2字節(jié)高2位 + 3字節(jié) 4 分區(qū)文件系統(tǒng)標(biāo)志:分區(qū)未用:
0x00H. 擴展分區(qū): 0x05H, 0x0FH.
FAT16分區(qū): 0x06H.
FAT32分區(qū): 0x0BH, 0x1BH, 0x0CH, 0x1CH.
NTFS分區(qū): 0x07H.
5,6,7 該分區(qū)的結(jié)束磁頭號,扇區(qū)號,柱面號,含義同上.
8,9,10,11 邏輯起始扇區(qū)號。表示分區(qū)起點之前已用了的扇區(qū)數(shù).
12,13,14,15 該分區(qū)所占用的扇區(qū)數(shù).
分區(qū)表項有幾個字節(jié)比較重要,下面分別闡述之: 1、(1,2,3)字節(jié)
磁頭號由(1)字節(jié)8位表示,其范圍為(0 -- 28 - 1),也即(0 磁頭--
254磁頭)。扇區(qū)號由(2)字節(jié)低6位表示,其范圍為(0 -- 26 -
1),由于扇區(qū)號從1開始,所以其范圍是(1扇區(qū)--
63扇區(qū))。柱面號由(2)字節(jié)高2位 + (3)字節(jié),共10位表示,其范圍為(0
--2 10 - 1),也即(0 柱面--
1023柱面)。當(dāng)柱面號超過1023時,這10位依然表示成1023,需要注意。(5,6,7)字節(jié)含義同上。
2、(8, 9, 10, 11)字節(jié)如果是主分區(qū)表,則這4
個字節(jié)表示該分區(qū)起始邏輯扇區(qū)號與邏輯0扇區(qū)(0柱面,0磁頭,1扇區(qū))之差。如果非主分區(qū)表,則這4
個字節(jié)要么表示該分區(qū)起始邏輯扇區(qū)號與擴展分區(qū)起始邏輯扇區(qū)號之差,要么為63。詳細情況在后面有所闡述。注意:
1、扇區(qū)上的字節(jié)是按左邊低位,右邊高位的順序排列的。所以在取值時,需要把字節(jié)再反一下,讓高位字節(jié)在左邊,低位字節(jié)在右邊,這一點在讀取邏輯起始扇區(qū)號和分區(qū)大小時需要注意。舉個例子:第一項的邏輯起始扇區(qū)為(3F
00 00 00),轉(zhuǎn)換為十進制前要先反一下字節(jié)順序,為(00 00 00
3F)然后在轉(zhuǎn)換為十進制,即63 .同理分區(qū)大小為(3F 04 7D 00),先反為(00
7D 04 3F)再轉(zhuǎn)換為十進制,即8193087。
2、邏輯扇區(qū)號與(柱面,磁頭,扇區(qū))的相互轉(zhuǎn)換:令L = 邏輯扇區(qū)號,C =
柱面號,H = 磁頭號,S = 扇區(qū)號。每道扇區(qū)數(shù) = 63
每柱面磁頭數(shù) = 255
每柱面扇區(qū)數(shù) = 每道扇區(qū)數(shù)* 每柱面磁頭數(shù)
= 63 × 255
= 16065
柱面號下標(biāo)從0開始。磁頭號[0 -- 254],扇區(qū)號[1 -- 63]。
邏輯扇區(qū)號下標(biāo)也從0開始。
(柱面,磁頭,扇區(qū))轉(zhuǎn)換成邏輯扇區(qū)號的公式為:
L = C×16065 + H ×63 + S - 1 ;
比如(1柱面,1磁頭,1扇區(qū)),其邏輯扇區(qū)號為:
L = 1×16065 + 1×63 + 1 - 1
= 16128
邏輯扇區(qū)號轉(zhuǎn)換成(柱面,磁頭,扇區(qū)) 公式為:
C = L / 16065
H = (L % 16065) / 63
S = (L % 16065) % 63 + 1
比如邏輯扇區(qū)號 16127:
C = 16127 / 16065 = 1
H = (16127 % 16065) / 63 = 0
S = (16127 % 16065) % 63 + 1 = 63
即(1柱面,0磁頭,63扇區(qū))
3、分區(qū)表上有四項,每一項表示一個分區(qū),所以一個分區(qū)表最多只能表示4個分區(qū)。主分
區(qū)表上的4項用來表示主分區(qū)和擴展分區(qū)的信息。因為擴展分區(qū)最多只能有一個,所以硬盤
最多可以有四個主分區(qū)或者三個主分區(qū),一個擴展分區(qū)。余下的分區(qū)表是表示邏輯分區(qū)的。
這里有必要闡述一點:邏輯區(qū)都是位于擴展分區(qū)里面的,并且邏輯分區(qū)的個數(shù)沒有限制。
4、分區(qū)表所在扇區(qū)通常在(0磁頭,1扇區(qū)),而該分區(qū)的開始扇區(qū)通常位于(1磁頭,1扇區(qū)),中間隔了63
個隱藏扇區(qū)。三.分區(qū)表鏈的查找
分區(qū)表鏈實際上相當(dāng)于一個單向鏈表結(jié)構(gòu)。第一個分區(qū)表,也即主分區(qū)表,可以有一項
描述擴展分區(qū)。而這一項就相當(dāng)于指針,指向擴展分區(qū)。然后我們根據(jù)該指針來到擴展分
區(qū)起始柱面的0頭1扇區(qū),找到第二個分區(qū)表。對于該分區(qū)表,通常情況下:第一項描述了
擴展分區(qū)中第一個分區(qū)的信息,第二項描述下一個分區(qū),而這第二項就相當(dāng)于指向第二個分
區(qū)的指針,第三項,第四項一般均為0。我們可以根據(jù)該指針來到擴展分區(qū)中第二個分區(qū)起
始柱面的0頭1扇區(qū),找到第三個分區(qū)表。以此類推,只到最后一個分區(qū)表。而最后一個分
區(qū)表只有第一項有信息,余下三項均為0.相當(dāng)于其指針為空.所以只要找到了一個分區(qū)表就可
以推導(dǎo)找出其后面所有分區(qū)表。不過該分區(qū)表前面的分區(qū)表就不好推導(dǎo)出來了。但令人高興
的是這個鏈表的頭節(jié)點,也即主分區(qū)表的位置是固定的位于(0柱面, 0磁頭,
1扇區(qū))處,
我們可以很輕易的找到它,然后把剩下的所有分區(qū)表一一找到。以筆者的硬盤為例:一個主分區(qū)(C盤),
一個擴展分區(qū).擴展分區(qū)中有兩個邏輯分區(qū)(D盤,E盤)其分區(qū)表鏈?zhǔn)疽鈭D如下:
圖一 分區(qū)表鏈?zhǔn)疽鈭D (一).讀取(0柱面,0磁頭,1扇區(qū))處C盤的主分區(qū)表:
[80 01 01 00 0B FE 7F FD 3F 00 00 00 3F 04 7D 00 ] [00 00 41 FE 0F FE
FF FF 7E 04 7D 00 1F 2C B4 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
第一項:(80)(01 01 00)(0B)(FE 7F FD )(3F 00 00 00 )(3F 04 7D
00)描述的是C盤的情況。
1.(80):表示C盤為活動分區(qū)。即系統(tǒng)會從C盤啟動。 2.(01 01
00):表示C盤的起始扇區(qū)為(0柱面,0磁頭,1扇區(qū))。
3.(0B):表示C盤的文件系統(tǒng)為FAT32。 4.(FE 7F FD): (FE) 16 = (254)
10 (7F) 16 = (0111 1111) 2 (FD) 16 = (1111 1101) 2 磁頭號:(254)
10;扇區(qū)號:(11 1111) 2 = (63) 10. 柱面號:(01 1111 1101) 2 = (509) 10
故C盤結(jié)束扇區(qū)為(509柱面,254磁頭,63扇區(qū))。 5.(3F 00 00
00):反向,(00 00 00 3F) 16 = (63)
10,為C盤起始邏輯扇區(qū)號與邏輯0扇區(qū)號之差。表示C盤前面已有63個扇區(qū),這63個扇區(qū)為系統(tǒng)隱藏扇區(qū)。
6. (3F 04 7D 00):反向,(00 7D 04 3F) 16 = (8193087)
10。表明C盤有8193087個扇區(qū)。即(0柱面,1磁頭,1扇區(qū))至(509柱面,254磁頭,63扇區(qū))共有8193087個扇區(qū)。第二項:
(00)(00 41 FE)(0F)(FE FF FF)(7E 04 7D 00)(1F 2C B4
00)描述的是擴展分區(qū)的情況。 1. (00): 表示該分區(qū)不是活動分區(qū)。 2. (00
41 FE): (00) 16 = (0) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110)
2 磁頭號:(0) 10;扇區(qū)號:(00 0001) 2 = (1) 10.
柱面號:(01 1111 1110) 2 = (510) 10
所以擴展分區(qū)的起始扇區(qū)為(510柱面,0磁頭,1扇區(qū))。
3. (0F): 表示該分區(qū)為擴展分區(qū)。
4. (FE FF FF):
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2;
磁頭號:(254) 10;
扇區(qū)號:(11 1111) 2 = (63) 10.
柱面號:(11 1111 1111) 2 = (1023) 10
但這是不準(zhǔn)確的,因為當(dāng)柱面號的真實值超過1023時,表示柱面號的10位也依然是1023。
5. (7E 04 7D 00):
反向,(00 7D 04 7E) 16 = (8193150) 10.
表示擴展分區(qū)的起始扇區(qū)號為8193150,即(510
柱面,0磁頭,1扇區(qū))。這是真實準(zhǔn)確的,我一般都用這一項來定位分區(qū)起點。
6. (1F 2C B4 00): 反向, (00 B4 2C 1F) 16 = (11807775) 10.
表示擴展分區(qū)共有11807775個扇區(qū)。通過上面得到的起點和分區(qū)的大小,可以推導(dǎo)出擴展分區(qū)的結(jié)束位置:8193150
+ 11807775 = 20000925號扇區(qū),即(1244
柱面,254磁頭,63扇區(qū))。二.查找D盤分區(qū)表
根據(jù)上面的信息,第二個分區(qū)表,也即D盤分區(qū)表在(510柱面,0磁頭,1扇區(qū))處。讀取該扇區(qū),得到分區(qū)表如下:
[00 01 41 FE 0B FE FF 7B 3F 00 00 00 BF A3 5D 00 ] [00 00 C1 7C 05 FE
FF FF FE A3 5D 00 21 88 56 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
第一項:(00)(01 41 FE)(0B)(FE FF 7B)(3F 00 00 00 )(BF A3 5D
00)描述的是D盤的情況。 1.(00):表示D盤不是活動分區(qū)。
2.(01 41 FE):
(01) 16 = (1) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2.
磁頭號:(1) 10;
扇區(qū)號:(00 0001) 2 = (1) 10.
柱面號:(01 1111 1110) 2 = (510) 10;
故D盤開始扇區(qū)為(510柱面,1磁頭,1扇區(qū))。
3.(0B):表示D盤的文件系統(tǒng)為FAT32。
4.(FE FF 7B):
(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (7B) 16 = (0111 1011)
2. 磁頭號:(254) 10;
扇區(qū)號:(11 1111) 2 = (63) 10.
柱面號:(11 0111 1011) 2 = (891) 10
故D盤結(jié)束扇區(qū)為(891柱面,254磁頭,63扇區(qū))。
5.(3F 00 00 00):
反向,(00 00 00 3F)16 =
(63)10,為D盤起始邏輯扇區(qū)號(510柱面,1磁頭,1扇區(qū))與擴展分區(qū)起始邏輯扇區(qū)號(510柱面,0磁頭,1扇區(qū))之差。表示D盤前面已有63個扇區(qū),這63個扇區(qū)為系統(tǒng)隱藏扇區(qū)。
6. (BF A3 5D 00):
反向,(00 5D A3 BF) 16 = (6136767) 10。表明D盤有6136767個扇區(qū)。
通過上面得到的起點和分區(qū)的大小,可以推導(dǎo)出D盤的結(jié)束位置:8193150 +
63 + 6136767 =
14329980號扇區(qū)。即(891柱面,254磁頭,63扇區(qū))。與上面的正好吻合。第二項:
(00)(00 C1 7C)(05)(FE FF FF)(FE A3 5D 00)(21 88 56 00)
描述的是E盤的情況。
1. (00): 表示E盤不是活動分區(qū)。
2. (00 C1 7C):
(00) 16 = (0) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2
磁頭號:(0) 10
扇區(qū)號:(00 0001) 2 = (1) 10
柱面號:(11 0111 1100) 2 = (892) 10
所以E盤的起始扇區(qū)為(892柱面,0磁頭,1扇區(qū))。
3. (05): 表示E盤的在擴展分區(qū)里面。
4.(FE FF FF):
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2
磁頭號:(254) 10
扇區(qū)號:(11 1111) 2 = (63) 10
柱面號:(11 1111 1111) 2 = (1023) 10
但這是不準(zhǔn)確的,原因同上。
5.(FE A3 5D 00):
反向,(00 5D A3 FE) 16 = (6136830) 10.
這一項非常重要,它定位了E盤分區(qū)表所在扇區(qū)。其值為E盤分區(qū)表所在扇區(qū)號與擴展分區(qū)起始扇區(qū)號之差。所以,E盤分區(qū)表所在扇區(qū)號為:
8193150 + 6136830 = 14329980。即(892柱面,0磁頭,1扇區(qū))。
6.(21 88 56 00):
反向,(00 56 88 21) 16 = (5670945)
10.表示E盤共有11807775個扇區(qū)。通過上面得到的起點和分區(qū)的大小,可以推導(dǎo)出E
盤的結(jié)束位置:14329980 + 5670945 = 20000925號扇區(qū),即(1244
柱面,254磁頭,63扇區(qū))。三.查找E盤分區(qū)表
根據(jù)上面的信息,第三個分區(qū)表,也即E盤分區(qū)表在(892柱面,0磁頭,1扇區(qū))處。讀取該扇區(qū),得到分區(qū)表如下:
[00 01 C1 7C 0B FE FF FF 3F 00 00 00 E2 87 56 00] [ 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
該分區(qū)表第二項全為0,說明沒有下一個分區(qū)表了。該分區(qū)表就是分區(qū)表鏈的最后一個節(jié)點。第一項:(00)(01
C1 7C)(0B)(FE FF FF)(3F 00 00 00 )(E2 87 56
00)該項與D盤分區(qū)表的第二項描述的都是E盤的情況,但它們在某些細節(jié)上又有所區(qū)別。
1.(00):表示E盤不是活動分區(qū)。 2.(01 C1 7C):
(01) 16 = (1) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2.
磁頭號:(1) 10
扇區(qū)號:(00 0001) 2 = (1) 10
柱面號:(11 0111 1100) 2 = (892) 10
故E盤起始扇區(qū)為(892柱面,1磁頭,1扇區(qū))。
3.(0B):表示E盤的文件系統(tǒng)為FAT32。
4.(FE FF FF):
(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111)
2. 磁頭號:(254) 10;
扇區(qū)號:(11 1111) 2 = (63) 10.
柱面號:(11 1111 1111) 2 = (1023) 10
但這是不準(zhǔn)確的,原因同上。
5.(3F 00 00 00):
反向,(00 00 00 3F) 16 = (63)
10.這一項與D盤分區(qū)表相應(yīng)項有所不同.為E盤起始邏輯扇區(qū)號(892柱面,1磁頭,1扇區(qū))與(892柱面,0磁頭,1扇區(qū))之差。表示E盤前面已有63個扇區(qū),
這63個扇區(qū)為系統(tǒng)隱藏扇區(qū)。操作系統(tǒng)無法對這些扇區(qū)進行讀寫,所以可以把自己的秘密信息寫在這里.
6. (E2 87 56 00):
反向,(00 56 87 E2) 16 = (5670882)
10。表明E盤有5670882個扇區(qū)。而D盤分區(qū)表相應(yīng)項為5670945. 5670945 -
5670882 = 63.
正好等于63個隱藏扇區(qū).這是因為D盤分區(qū)表描述的是(892柱面,0磁頭,1扇區(qū)) 到
(1244 柱面,254磁頭,63扇區(qū)) 之間的扇區(qū)數(shù)。而E盤分區(qū)表描述的是(892柱面,
1磁頭,1扇區(qū)) 到 (1244 柱面,254磁頭,63扇區(qū))
之間的扇區(qū)數(shù)。四.結(jié)束語至此,我們已經(jīng)打通了整個分區(qū)表鏈.以后在某個鏈節(jié)點數(shù)據(jù)受損時,也可以根據(jù)上下節(jié)點的信息而手工定位并修復(fù)之。修復(fù)工具可采用可讀寫磁盤的Winhex.
一.分區(qū)表的位置及識別標(biāo)志
分區(qū)表一般位于硬盤某柱面的0磁頭
1扇區(qū).而第1個分區(qū)表(也即主分區(qū)表)總是位于
(0柱面,1磁頭,1扇區(qū)),剩余的分區(qū)表位置可以由主分區(qū)表依次推導(dǎo)出來.分區(qū)表有64個字節(jié),占據(jù)其所在扇區(qū)的[441-509]字節(jié).要判定是不是分區(qū)表,就看其后緊鄰的兩個字節(jié)(也即[510-511])是不是
"55AA",若是,則為分區(qū)表.二.分區(qū)表的結(jié)構(gòu)分區(qū)表由4項組成,每項16個字節(jié).共4×16
= 64個字節(jié).每項描述一個分區(qū)的基本信息.每個字節(jié)的含義如下: 分區(qū)表項含義
字節(jié) 含義
0
Activeflag.活動標(biāo)志.若為0x80H,則表示該分區(qū)為活動分區(qū).若為0x00H,則表示該分區(qū)為非活動分區(qū).
1,2,3 該分區(qū)的起始磁頭號,扇區(qū)號,柱面號磁頭號 -- 1字節(jié), 扇區(qū)號 --
2字節(jié)低6位,柱面號 -- 2字節(jié)高2位 + 3字節(jié) 4 分區(qū)文件系統(tǒng)標(biāo)志:分區(qū)未用:
0x00H. 擴展分區(qū): 0x05H, 0x0FH.
FAT16分區(qū): 0x06H.
FAT32分區(qū): 0x0BH, 0x1BH, 0x0CH, 0x1CH.
NTFS分區(qū): 0x07H.
5,6,7 該分區(qū)的結(jié)束磁頭號,扇區(qū)號,柱面號,含義同上.
8,9,10,11 邏輯起始扇區(qū)號。表示分區(qū)起點之前已用了的扇區(qū)數(shù).
12,13,14,15 該分區(qū)所占用的扇區(qū)數(shù).
分區(qū)表項有幾個字節(jié)比較重要,下面分別闡述之: 1、(1,2,3)字節(jié)
磁頭號由(1)字節(jié)8位表示,其范圍為(0 -- 28 - 1),也即(0 磁頭--
254磁頭)。扇區(qū)號由(2)字節(jié)低6位表示,其范圍為(0 -- 26 -
1),由于扇區(qū)號從1開始,所以其范圍是(1扇區(qū)--
63扇區(qū))。柱面號由(2)字節(jié)高2位 + (3)字節(jié),共10位表示,其范圍為(0
--2 10 - 1),也即(0 柱面--
1023柱面)。當(dāng)柱面號超過1023時,這10位依然表示成1023,需要注意。(5,6,7)字節(jié)含義同上。
2、(8, 9, 10, 11)字節(jié)如果是主分區(qū)表,則這4
個字節(jié)表示該分區(qū)起始邏輯扇區(qū)號與邏輯0扇區(qū)(0柱面,0磁頭,1扇區(qū))之差。如果非主分區(qū)表,則這4
個字節(jié)要么表示該分區(qū)起始邏輯扇區(qū)號與擴展分區(qū)起始邏輯扇區(qū)號之差,要么為63。詳細情況在后面有所闡述。注意:
1、扇區(qū)上的字節(jié)是按左邊低位,右邊高位的順序排列的。所以在取值時,需要把字節(jié)再反一下,讓高位字節(jié)在左邊,低位字節(jié)在右邊,這一點在讀取邏輯起始扇區(qū)號和分區(qū)大小時需要注意。舉個例子:第一項的邏輯起始扇區(qū)為(3F
00 00 00),轉(zhuǎn)換為十進制前要先反一下字節(jié)順序,為(00 00 00
3F)然后在轉(zhuǎn)換為十進制,即63 .同理分區(qū)大小為(3F 04 7D 00),先反為(00
7D 04 3F)再轉(zhuǎn)換為十進制,即8193087。
2、邏輯扇區(qū)號與(柱面,磁頭,扇區(qū))的相互轉(zhuǎn)換:令L = 邏輯扇區(qū)號,C =
柱面號,H = 磁頭號,S = 扇區(qū)號。每道扇區(qū)數(shù) = 63
每柱面磁頭數(shù) = 255
每柱面扇區(qū)數(shù) = 每道扇區(qū)數(shù)* 每柱面磁頭數(shù)
= 63 × 255
= 16065
柱面號下標(biāo)從0開始。磁頭號[0 -- 254],扇區(qū)號[1 -- 63]。
邏輯扇區(qū)號下標(biāo)也從0開始。
(柱面,磁頭,扇區(qū))轉(zhuǎn)換成邏輯扇區(qū)號的公式為:
L = C×16065 + H ×63 + S - 1 ;
比如(1柱面,1磁頭,1扇區(qū)),其邏輯扇區(qū)號為:
L = 1×16065 + 1×63 + 1 - 1
= 16128
邏輯扇區(qū)號轉(zhuǎn)換成(柱面,磁頭,扇區(qū)) 公式為:
C = L / 16065
H = (L % 16065) / 63
S = (L % 16065) % 63 + 1
比如邏輯扇區(qū)號 16127:
C = 16127 / 16065 = 1
H = (16127 % 16065) / 63 = 0
S = (16127 % 16065) % 63 + 1 = 63
即(1柱面,0磁頭,63扇區(qū))
3、分區(qū)表上有四項,每一項表示一個分區(qū),所以一個分區(qū)表最多只能表示4個分區(qū)。主分
區(qū)表上的4項用來表示主分區(qū)和擴展分區(qū)的信息。因為擴展分區(qū)最多只能有一個,所以硬盤
最多可以有四個主分區(qū)或者三個主分區(qū),一個擴展分區(qū)。余下的分區(qū)表是表示邏輯分區(qū)的。
這里有必要闡述一點:邏輯區(qū)都是位于擴展分區(qū)里面的,并且邏輯分區(qū)的個數(shù)沒有限制。
4、分區(qū)表所在扇區(qū)通常在(0磁頭,1扇區(qū)),而該分區(qū)的開始扇區(qū)通常位于(1磁頭,1扇區(qū)),中間隔了63
個隱藏扇區(qū)。三.分區(qū)表鏈的查找
分區(qū)表鏈實際上相當(dāng)于一個單向鏈表結(jié)構(gòu)。第一個分區(qū)表,也即主分區(qū)表,可以有一項
描述擴展分區(qū)。而這一項就相當(dāng)于指針,指向擴展分區(qū)。然后我們根據(jù)該指針來到擴展分
區(qū)起始柱面的0頭1扇區(qū),找到第二個分區(qū)表。對于該分區(qū)表,通常情況下:第一項描述了
擴展分區(qū)中第一個分區(qū)的信息,第二項描述下一個分區(qū),而這第二項就相當(dāng)于指向第二個分
區(qū)的指針,第三項,第四項一般均為0。我們可以根據(jù)該指針來到擴展分區(qū)中第二個分區(qū)起
始柱面的0頭1扇區(qū),找到第三個分區(qū)表。以此類推,只到最后一個分區(qū)表。而最后一個分
區(qū)表只有第一項有信息,余下三項均為0.相當(dāng)于其指針為空.所以只要找到了一個分區(qū)表就可
以推導(dǎo)找出其后面所有分區(qū)表。不過該分區(qū)表前面的分區(qū)表就不好推導(dǎo)出來了。但令人高興
的是這個鏈表的頭節(jié)點,也即主分區(qū)表的位置是固定的位于(0柱面, 0磁頭,
1扇區(qū))處,
我們可以很輕易的找到它,然后把剩下的所有分區(qū)表一一找到。以筆者的硬盤為例:一個主分區(qū)(C盤),
一個擴展分區(qū).擴展分區(qū)中有兩個邏輯分區(qū)(D盤,E盤)其分區(qū)表鏈?zhǔn)疽鈭D如下:
圖一 分區(qū)表鏈?zhǔn)疽鈭D (一).讀取(0柱面,0磁頭,1扇區(qū))處C盤的主分區(qū)表:
[80 01 01 00 0B FE 7F FD 3F 00 00 00 3F 04 7D 00 ] [00 00 41 FE 0F FE
FF FF 7E 04 7D 00 1F 2C B4 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
第一項:(80)(01 01 00)(0B)(FE 7F FD )(3F 00 00 00 )(3F 04 7D
00)描述的是C盤的情況。
1.(80):表示C盤為活動分區(qū)。即系統(tǒng)會從C盤啟動。 2.(01 01
00):表示C盤的起始扇區(qū)為(0柱面,0磁頭,1扇區(qū))。
3.(0B):表示C盤的文件系統(tǒng)為FAT32。 4.(FE 7F FD): (FE) 16 = (254)
10 (7F) 16 = (0111 1111) 2 (FD) 16 = (1111 1101) 2 磁頭號:(254)
10;扇區(qū)號:(11 1111) 2 = (63) 10. 柱面號:(01 1111 1101) 2 = (509) 10
故C盤結(jié)束扇區(qū)為(509柱面,254磁頭,63扇區(qū))。 5.(3F 00 00
00):反向,(00 00 00 3F) 16 = (63)
10,為C盤起始邏輯扇區(qū)號與邏輯0扇區(qū)號之差。表示C盤前面已有63個扇區(qū),這63個扇區(qū)為系統(tǒng)隱藏扇區(qū)。
6. (3F 04 7D 00):反向,(00 7D 04 3F) 16 = (8193087)
10。表明C盤有8193087個扇區(qū)。即(0柱面,1磁頭,1扇區(qū))至(509柱面,254磁頭,63扇區(qū))共有8193087個扇區(qū)。第二項:
(00)(00 41 FE)(0F)(FE FF FF)(7E 04 7D 00)(1F 2C B4
00)描述的是擴展分區(qū)的情況。 1. (00): 表示該分區(qū)不是活動分區(qū)。 2. (00
41 FE): (00) 16 = (0) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110)
2 磁頭號:(0) 10;扇區(qū)號:(00 0001) 2 = (1) 10.
柱面號:(01 1111 1110) 2 = (510) 10
所以擴展分區(qū)的起始扇區(qū)為(510柱面,0磁頭,1扇區(qū))。
3. (0F): 表示該分區(qū)為擴展分區(qū)。
4. (FE FF FF):
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2;
磁頭號:(254) 10;
扇區(qū)號:(11 1111) 2 = (63) 10.
柱面號:(11 1111 1111) 2 = (1023) 10
但這是不準(zhǔn)確的,因為當(dāng)柱面號的真實值超過1023時,表示柱面號的10位也依然是1023。
5. (7E 04 7D 00):
反向,(00 7D 04 7E) 16 = (8193150) 10.
表示擴展分區(qū)的起始扇區(qū)號為8193150,即(510
柱面,0磁頭,1扇區(qū))。這是真實準(zhǔn)確的,我一般都用這一項來定位分區(qū)起點。
6. (1F 2C B4 00): 反向, (00 B4 2C 1F) 16 = (11807775) 10.
表示擴展分區(qū)共有11807775個扇區(qū)。通過上面得到的起點和分區(qū)的大小,可以推導(dǎo)出擴展分區(qū)的結(jié)束位置:8193150
+ 11807775 = 20000925號扇區(qū),即(1244
柱面,254磁頭,63扇區(qū))。二.查找D盤分區(qū)表
根據(jù)上面的信息,第二個分區(qū)表,也即D盤分區(qū)表在(510柱面,0磁頭,1扇區(qū))處。讀取該扇區(qū),得到分區(qū)表如下:
[00 01 41 FE 0B FE FF 7B 3F 00 00 00 BF A3 5D 00 ] [00 00 C1 7C 05 FE
FF FF FE A3 5D 00 21 88 56 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
第一項:(00)(01 41 FE)(0B)(FE FF 7B)(3F 00 00 00 )(BF A3 5D
00)描述的是D盤的情況。 1.(00):表示D盤不是活動分區(qū)。
2.(01 41 FE):
(01) 16 = (1) 10 (41) 16 = (0100 0001) 2 (FE) 16 = (1111 1110) 2.
磁頭號:(1) 10;
扇區(qū)號:(00 0001) 2 = (1) 10.
柱面號:(01 1111 1110) 2 = (510) 10;
故D盤開始扇區(qū)為(510柱面,1磁頭,1扇區(qū))。
3.(0B):表示D盤的文件系統(tǒng)為FAT32。
4.(FE FF 7B):
(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (7B) 16 = (0111 1011)
2. 磁頭號:(254) 10;
扇區(qū)號:(11 1111) 2 = (63) 10.
柱面號:(11 0111 1011) 2 = (891) 10
故D盤結(jié)束扇區(qū)為(891柱面,254磁頭,63扇區(qū))。
5.(3F 00 00 00):
反向,(00 00 00 3F)16 =
(63)10,為D盤起始邏輯扇區(qū)號(510柱面,1磁頭,1扇區(qū))與擴展分區(qū)起始邏輯扇區(qū)號(510柱面,0磁頭,1扇區(qū))之差。表示D盤前面已有63個扇區(qū),這63個扇區(qū)為系統(tǒng)隱藏扇區(qū)。
6. (BF A3 5D 00):
反向,(00 5D A3 BF) 16 = (6136767) 10。表明D盤有6136767個扇區(qū)。
通過上面得到的起點和分區(qū)的大小,可以推導(dǎo)出D盤的結(jié)束位置:8193150 +
63 + 6136767 =
14329980號扇區(qū)。即(891柱面,254磁頭,63扇區(qū))。與上面的正好吻合。第二項:
(00)(00 C1 7C)(05)(FE FF FF)(FE A3 5D 00)(21 88 56 00)
描述的是E盤的情況。
1. (00): 表示E盤不是活動分區(qū)。
2. (00 C1 7C):
(00) 16 = (0) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2
磁頭號:(0) 10
扇區(qū)號:(00 0001) 2 = (1) 10
柱面號:(11 0111 1100) 2 = (892) 10
所以E盤的起始扇區(qū)為(892柱面,0磁頭,1扇區(qū))。
3. (05): 表示E盤的在擴展分區(qū)里面。
4.(FE FF FF):
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2
磁頭號:(254) 10
扇區(qū)號:(11 1111) 2 = (63) 10
柱面號:(11 1111 1111) 2 = (1023) 10
但這是不準(zhǔn)確的,原因同上。
5.(FE A3 5D 00):
反向,(00 5D A3 FE) 16 = (6136830) 10.
這一項非常重要,它定位了E盤分區(qū)表所在扇區(qū)。其值為E盤分區(qū)表所在扇區(qū)號與擴展分區(qū)起始扇區(qū)號之差。所以,E盤分區(qū)表所在扇區(qū)號為:
8193150 + 6136830 = 14329980。即(892柱面,0磁頭,1扇區(qū))。
6.(21 88 56 00):
反向,(00 56 88 21) 16 = (5670945)
10.表示E盤共有11807775個扇區(qū)。通過上面得到的起點和分區(qū)的大小,可以推導(dǎo)出E
盤的結(jié)束位置:14329980 + 5670945 = 20000925號扇區(qū),即(1244
柱面,254磁頭,63扇區(qū))。三.查找E盤分區(qū)表
根據(jù)上面的信息,第三個分區(qū)表,也即E盤分區(qū)表在(892柱面,0磁頭,1扇區(qū))處。讀取該扇區(qū),得到分區(qū)表如下:
[00 01 C1 7C 0B FE FF FF 3F 00 00 00 E2 87 56 00] [ 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 ] [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]
該分區(qū)表第二項全為0,說明沒有下一個分區(qū)表了。該分區(qū)表就是分區(qū)表鏈的最后一個節(jié)點。第一項:(00)(01
C1 7C)(0B)(FE FF FF)(3F 00 00 00 )(E2 87 56
00)該項與D盤分區(qū)表的第二項描述的都是E盤的情況,但它們在某些細節(jié)上又有所區(qū)別。
1.(00):表示E盤不是活動分區(qū)。 2.(01 C1 7C):
(01) 16 = (1) 10 (C1) 16 = (1100 0001) 2 (7C) 16 = (0111 1100) 2.
磁頭號:(1) 10
扇區(qū)號:(00 0001) 2 = (1) 10
柱面號:(11 0111 1100) 2 = (892) 10
故E盤起始扇區(qū)為(892柱面,1磁頭,1扇區(qū))。
3.(0B):表示E盤的文件系統(tǒng)為FAT32。
4.(FE FF FF):
(FE) 16 = (254) 10 。 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111)
2. 磁頭號:(254) 10;
扇區(qū)號:(11 1111) 2 = (63) 10.
柱面號:(11 1111 1111) 2 = (1023) 10
但這是不準(zhǔn)確的,原因同上。
5.(3F 00 00 00):
反向,(00 00 00 3F) 16 = (63)
10.這一項與D盤分區(qū)表相應(yīng)項有所不同.為E盤起始邏輯扇區(qū)號(892柱面,1磁頭,1扇區(qū))與(892柱面,0磁頭,1扇區(qū))之差。表示E盤前面已有63個扇區(qū),
這63個扇區(qū)為系統(tǒng)隱藏扇區(qū)。操作系統(tǒng)無法對這些扇區(qū)進行讀寫,所以可以把自己的秘密信息寫在這里.
6. (E2 87 56 00):
反向,(00 56 87 E2) 16 = (5670882)
10。表明E盤有5670882個扇區(qū)。而D盤分區(qū)表相應(yīng)項為5670945. 5670945 -
5670882 = 63.
正好等于63個隱藏扇區(qū).這是因為D盤分區(qū)表描述的是(892柱面,0磁頭,1扇區(qū)) 到
(1244 柱面,254磁頭,63扇區(qū)) 之間的扇區(qū)數(shù)。而E盤分區(qū)表描述的是(892柱面,
1磁頭,1扇區(qū)) 到 (1244 柱面,254磁頭,63扇區(qū))
之間的扇區(qū)數(shù)。四.結(jié)束語至此,我們已經(jīng)打通了整個分區(qū)表鏈.以后在某個鏈節(jié)點數(shù)據(jù)受損時,也可以根據(jù)上下節(jié)點的信息而手工定位并修復(fù)之。修復(fù)工具可采用可讀寫磁盤的Winhex.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
