最近接觸到一個
0
磁道損壞的硬盤,做數據恢復,有機會學習了一下分區表的結構。在這里簡要的做點筆記。
MBR
(
Main Boot Record
)位于硬盤第一個物理扇區(絕對扇區)柱面
0
,磁頭
0
,扇區
1
(簡化成(
0
,
0
,
1
))處。由于
DOS
是由柱面
0
,磁頭
1
,扇區
1
開始,故
MBR
不屬于
DOS
扇區,
DOS
不能直接訪問。
MBR
中包含硬盤的主引導程序和硬盤分區表。分區表有
4
個分區記錄區,這也就是我們為什么只能在硬盤里最多擁有
4
個主分區的原因了。記錄區就是記錄有關分區信息的一張表。它從主引導記錄(
MBR
)偏移地址
01BEH
處連續存放,每個分區記錄區占
16
個字節。
下面用我的硬盤的分區表來詳細解釋一下分區表各區段的具體含義。
偏移位置
|
00
|
01
|
02
|
03
|
04
|
05
|
06
|
07
|
08
|
09
|
0a
|
0b
|
0c
|
0d
|
0e
|
0f
|
00000000
|
33
|
c0
|
8e
|
d0
|
bc
|
00
|
7c
|
fb
|
50
|
07
|
50
|
1f
|
fc
|
be
|
1b
|
7c
|
…………
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
…
|
000001b0
|
00
|
00
|
00
|
00
|
00
|
2c
|
44
|
63
|
60
|
65
|
50
|
65
|
00
|
00
|
80
|
01
|
000001c0
|
01
|
00
|
07
|
fe
|
bf
|
fc
|
3f
|
00
|
00
|
00
|
7e
|
86
|
bb
|
00
|
00
|
00
|
000001d0
|
81
|
fd
|
0f
|
c5
|
fe
|
ff
|
bd
|
86
|
bb
|
00
|
43
|
3b
|
6b
|
01
|
00
|
00
|
000001e0
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
000001f0
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
00
|
55
|
aa
|
????????????? 000 ~ 1bd???? ?
(
446
字節)可執行代碼區段
????????????? 1be ~ 1cd??????
(
016
字節)第一個分區入口(參數解釋見下)
????????????? 1ce ~ 1dd??????
(
016
字節)第二個分區入口(同第一個分區)
????????????? 1de ~ 1ed??????
(
016
字節)第三個分區入口(同第一個分區)
????????????? 1ee ~ 1fd????????
(
016
字節)第四個分區人口(同第一個分區)
????????????? 1fe ~ 1ff
(
002
字節)引導記錄標志位(固定值:
55 aa
)
要說明的是:這里講的“分區”,確切說是:主分區。擴展分區也當成主分區,擴展分區內部的分區信息不在
MBR
里面。
要注意的是,在這里出現的數字均是
16
進制數。
下面就分區記錄這
16
個字節再詳細解釋一下,以我的第一個分區為例:
偏移位置
|
00
|
01
|
02
|
03
|
04
|
05
|
06
|
07
|
08
|
09
|
0a
|
0b
|
0c
|
0d
|
0e
|
0f
|
000001b0
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
?
|
80
|
01
|
000001c0
|
01
|
00
|
07
|
fe
|
bf
|
fc
|
3f
|
00
|
00
|
00
|
7e
|
86
|
bb
|
00
|
?
|
?
|
80???????????
分區狀態(
80H
表示為激活分區,
00H
表示為非激活分區)
01???? ????
分區的開始磁頭
01 00 ????
分區的開始柱面和扇區(這個地方有點玄機,等會再詳細解釋)
07???? ???
分區的類型(
0c
表示為
FAT32
,
07
為
NTFS
,
0f
代表擴展)
fe???????????
分區的結束磁頭
bf fc ????? ??????
分區的結束柱面和扇區(表示同開始磁頭,等會詳解)
3f 00 00 00 ???
從
MBR
到第一個分區扇區的扇區個數(分區前的扇區數)
7e 86 bb 00????
分區的總扇區數
也就是說我的第一個分區是一個從(
0,1,1
)位置開始的可引導的
NTFS
格式的分區。結束位置是(
764,254,63
)容量為:
5.86G
。
下面說一下這些數據具體是怎么得來的。
1b00e
位置的
80
是分區狀態,上面已經說清楚了,這里就不再多說。
1b00f
位置的
01
是分區開始的磁頭數,磁頭數是從
0
到
254
的整數,這里用的是
2
位的十六進制數表示。
(01)HEX=(1)DEC
。
1c000-1c001
位置的
01 00
合在一起,表示的是分區開始的柱面和磁頭數。我們知道,一位的
16
進制數可以轉換成
4
位的二進制數。那么,將這兩個兩位的
16
進制數轉換分別轉換成
2
進制數就是:
(01)HEX? =? (0000 0001)BIN ?(00)HEX=(0000 0000)BIN
。然后,取前面的
(01)HEX
的二進制的后六位,也就是
(000001)BIN
,他就代表了分區開始的扇區數,也就是
1
。這樣取了以后,
(01)HEX
還剩下高位的兩個數,這兩個數放到
(00)HEX
轉成的二進制數的前面,就構成了一個
10
位的二進制數,表示的是分區開始的柱面數。到這里,分區開始位置就確定了。
1c002
位置的
07
表示分區類型——
NTFS
1c003-1c005
位置的
fe bf fc
表示分區的結束位置,
fe
代表磁頭數。
(fe)HEX = (254)10
。然后,
(bf)HEX = (1011 1111)BIN ?(fc)HEX = (1111 1100)BIN
,按照前面說的,取
1011 1111
的后六位,得到
(11 1111)BIN = (63)DEC
也就是說結束的扇區是
63
。最后,
(10 1111 1100)BIN = (764)DEC
,即表示結束柱面為
764
。
(
表示開始和結束位置的這幾位,可以說是分區表中最復雜的地方了,看了很多文章,都沒怎么講清楚,希望我這里講的比較清楚了。
)
1c006-1c009
位置的
3f 00 00 00
表示的是分區前面的扇區數,我們需要倒過來看這串數字,也就是看成
(00 00 00 3f)HEX = (63)DEC
,說明分區開始前的扇區數是
63(
這個分區從
(0,1,1)
位置開始,前面當然就是一個磁頭的扇區數
63
了
)
。
1c00a-1c00d
位置的
7e 86 bb 00
表示的是分區內的扇區總數,和上面一樣,倒過來看成是
(00 bb 86 7e)HEX = (12289662)DEC
。扇區總數=(結束柱面-起始柱面+
1
)×磁頭數
(255)
×每柱面扇區數
(63)
。分區容量=扇區數×每扇區字節數
(512)
得到單位為字節,再每除以
1024
,就向
KByte
、
MByte
、
GByte
轉換。
posted on 2006-10-16 10:32
xiaosilent 閱讀(1293)
評論(1) 編輯 收藏 所屬分類:
Linux相關