一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 7614|回复: 10

fat 相关资料

[复制链接]
发表于 2010-2-19 17:37 | 显示全部楼层 |阅读模式
本帖最后由 kenson 于 2010-2-19 17:45 编辑
( e5 O- q/ y, o! d+ r" C
2 [. m5 P- o+ Q+ E8 e0 X5 F" { Fat16 Interface for MSP430.pdf (76.54 KB, 下载次数: 367)
& N. b' K* l% R/ T! C6 ^6 T FAT原理透析.doc (33.61 KB, 下载次数: 376)
' w" Y. H; d0 T0 q6 g8 u7 E 读SD卡程序_FAT16文件结构.rar (109.44 KB, 下载次数: 351)
 楼主| 发表于 2010-2-19 17:37 | 显示全部楼层
本帖最后由 kenson 于 2010-2-22 12:23 编辑
' @* w; c0 M  x" ?3 H3 E' ^
$ t  y- e2 G& T5 T2 B5 q' y
我对硬盘MBR、DBR、BPB、FAT和FDT的理解(gliethttp)
7 T4 v0 c5 M+ d: h4 ?
文章来源:http://gliethttp.cublog.cn[转载请声明出处]9 \- y' A' H! p2 b  p% i

, g% T/ Q' o% G. h& W  硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。
. o2 }; ~2 p# Q6 {0 n! Q" ?# \, c硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据。因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘。这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据。4 Z; |: v$ m7 \) p9 P, z7 r1 w
  硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。这三个参数即是硬盘的物理参数。 [摘自:《FAT文件系统原理》]
4 N, A  C# ?/ s8 e" g) j以下为我的理解(gliethttp)! n0 ]7 K# a3 s5 w% _7 l
Cylinders柱面个数为同心不同径的磁道个数
) @4 k: P+ q2 E7 N4 K& J: a4 |Heads磁头个数为一个存放Cylinders个磁道的存储介质表面的面数
! x2 L4 S) f+ P2 k/ z8 b7 wSector就是一个磁道上的扇区个数& Q( y7 o% C, U# K  ?6 Q2 Y
所以Cylinders×Heads×Sector就是这个物理硬盘的扇区总数.
2 o' d0 O+ e" G6 V. e6 ~) XMBR->DPT( w& ^( j, Q. H# }. p. u
主分区1-->起始扇区DBR[包括BPB和扩展BPB]-->FAT1-->FAT2-->FDT-->数据区- j8 N( I, I! e& X( S- N4 V
主分区2-->下一个扩展分区信息描述9 y1 U  |0 `3 q3 _
主分区3) S' v9 L1 B; _
主分区4
% n) @5 i, o8 |- m7 r: }0 e6 l) ~5 vMBR-->位于绝对的第0扇区9 ]; ~) \' r% E8 k; g& J" Q
      MBR的引导程序占了其中的前446个,紧接着的后64个字节是硬盘分区表DPT,最后2个字节是"55 AA",为磁盘有效结尾标志值, {+ o$ A4 S9 O
      [0x000~0x1BD]存放MBR--对于pc电脑bios执行完自举之后,会将cpu控制权交给此间的最大446个字节的loader程序% g' \( g/ ^# y$ J* F( l
      [0x1BE~0x1FD]存放MBR--DPT硬盘分区表,每16个字节描述一个主分区,根据分区类型字节域,我们可以知道该分区类型
5 g, k" O+ _. n# X      所以pc上主分区最多只能有4个.[gliethttp]
5 Z6 _+ [" B% `0 W7 X9 Y(注:DPT中对于>1字节的组合类型数据的存储,按小端模式[little endian]存储): n, a) \0 A, b) o* h5 I' P
几个常见的分区类型值:
6 [1 D2 U+ i* {6 j2 F" m  }4 h" j6 t0x01 --- FAT329 ~7 o$ i3 Q: Y. \
0x04 --- FAT16<32M+ ^9 s; T6 w4 g& d- |- z  t5 ?6 ?" Q
0x05 --- Extended(扩展分区)  J3 \3 ?( p5 W: M
0x06 --- FAT16
  H" }; h) O) `$ v3 Q5 p0x07 --- NTFS$ m. n/ ^& }. F  x1 R# w5 C
0x0B --- WIN95 FAT329 n7 t7 {1 h2 W4 X
0x0C --- WIN95 FAT328 y1 b8 E8 ~, p& S" `+ ~
0x0E --- WIN95 FAT16, d& l# [- }: A9 s. U& {/ B
0x0F --- WIN95 Extended>8GB
) n' c" ^% z; w* n; p4 |* {! x  Q4 P0x11 --- Hidden FAT12
; q+ [5 Q1 r1 Q! n5 j6 E1 [! P0x14 --- Hidden FAT16<32GB& C3 E* d; N( A% l3 W/ r
0x16 --- Hidden FAT16
) m7 L& F8 x# A: B0x17 --- Hidden NTFS
' o6 j( x6 W' B- A$ M, o3 P" V0x1B --- Hidden FAT32
$ T4 Y2 Z$ ]( p  J( |0x82 --- Linux swap
, K6 B. C- _8 {9 ?9 |. M0x83 --- Linux
( p# Y, N# j1 d; D0x85 --- Linux extended1 ?( c: H+ |7 Z' m9 o( d& @* E
0xA6 --- Open BSD
/ Q  s, j3 T* {8 gpc执行完bios之后,将cpu控制权交给MBR的前446个字节的loader程序,位于MBR中的loader程序会加载活动主分区对应的DBR区,即—操作系统
* m  a9 P7 @$ x( u) x4 L启动程序,之后MBR将cpu控制权交给DBR,所以DBR的第1个扇区的前3个字节必须对应x86的跳转指令”E8 58 90”,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。3 Y. ^* M8 r1 j  Q2 d- f4 o
DBR位于当前分区的起始扇区,比如c盘的第1个起始扇区地址,就是c盘对应的DRB区,) G* F# `5 y  M( N
同样D盘的第1个起始扇区地址,就是D盘对应的DBR区,
/ t# _; R) }: p8 t  A对于usb盘,也一样,usb的第1个起始扇区就是该U盘的DBR区2 Y3 p1 C# C7 Z1 y4 ^2 L- r
DBR的BPB区域描述本分区的大小,起始、终止磁盘、柱面、扇区号以及细分内容:fat的个数、每扇区字节数、
2 ]# _, v  ~* [; _每簇扇区数、当前分区保留扇区数、根目录FDT项数、本分区对应的存储介质类型、每个fat需要的扇区数、
0 d. Y" i( I; m9 P  t; w总扇区数、根目录FDT簇号等
# C% A/ x3 Z" H* R8 v+ pBPB地址  ---0x0B~0x40& n0 s# ^* M4 f, Z$ G" k3 D9 B/ y3 h
扩展BPB地址 ---0x40~0x57; v$ h& f3 ], A" n
还记得前面提到的x86跳转指令”E8 58 90”吧,这个指令翻译过来就是从指令处开始向后跳转几个字节到0x5A处继续执行程序,( P$ w: W0 h6 _& R8 u! N
所以DBR的0x5A处开始存放了windows操作系统的引导代码,DBR扇区的最后两个字节一般存储值为0x55AA的DBR有效标志,
* }" c# m. l5 n9 U- u# i7 M如果是其他值,系统将不会执行DBR中的操作系统引导代码.
1 ~* o% b/ H' Q8 B. a2 q还有一个知识点,就是“保留扇区”(也叫“隐藏扇区”或“系统扇区”),“保留扇区”指从管理本逻辑磁盘,如C盘:D盘:U盘等的DBR/ D9 ~6 }' f; W) n2 ?* F
扇区开始的供当前逻辑盘使用的用来描述本逻辑盘信息或者操作系统启动代码之类数据的扇区总数.2 d: k4 o9 E9 w: c& n$ }
对于DBR管理的当前分区,如:C盘、D盘等来说,DBR所在的扇区为相对于当前分区的0扇区,
% u, c' L% d9 d7 |' f7 e所以使用winhex,打开整个硬盘时, 看到的是该硬盘的绝对地址[gliethttp]
/ N: q! i( S+ {" m( `即:第0扇区为MBR,第63扇区为C盘的DBR,对于我的硬盘还有D、E和F  I. U. h3 X5 e. P! q
C盘:分区表DPT---0扇区              ,它对应的DBR扇区---DPT+63=63扇区
5 M, {! g% a8 d+ xD盘:分区表DPT---81931500扇区(无用) ,它对应的DBR扇区---DPT+63=81931563扇区
% Q* p5 c. i/ B2 a& Z/ r7 N+ W( B" DE盘:分区表DPT---163863000扇区(无用),它对应的DBR扇区---DPT+63=163863063扇区
1 K% {" C! M! }& `9 E; r% ^DBR又叫做该分区盘的起始扇区,在绝对地址下, 该分区盘的DBR就是绝对偏移扇区值,+ `" C" M6 K. P" {0 ~
使用winhex打开该分区盘(如D盘)之后,DBR在该分区盘(如D盘)内部的相对扇区值为0,2 k2 U& N" v  S; T3 h7 L
我的硬盘中[gliethttp]# C! K; D& |/ P
C盘的DBR相对扇区为0
- ?' a, N* J  TC盘的FAT1相对C盘的扇区偏移值为341 v9 X2 B' Q5 Y& \& h! `6 B$ f
D盘的DBR相对扇区为0% H5 s5 m- ?/ z/ Q( M" M
D盘的FAT1相对D盘的扇区偏移值为349 L. X( }$ L% m8 [& i( h
E盘的DBR相对扇区为0
' ?. S  U, l, G1 oE盘的FAT1相对E盘的扇区偏移值为38, P8 T, G8 D* C! i0 t
U盘的DBR相对扇区为0
) J9 t4 z9 \4 I8 p5 r( X) kU盘的FAT1相对U盘的扇区偏移值为36
- M0 H; {% Z: }! J3 p以上这些偏移值都在每个分区盘的DBR中的BPB里有描述.
( J$ v! m/ A0 q; C  Y. M: F( d6 ~

http://blogimg.chinaunix.net/blog/upfile/070920165541.jpg(winhex操作图例1)http://blogimg.chinaunix.net/blog/upfile/070920165624.jpg(进入C盘之后,DBR即起始扇区为相对地址0)

http://blogimg.chinaunix.net/blog/upfile/070920165656.jpgwinhex操作图例2http://blogimg.chinaunix.net/blog/upfile/070920165624.jpg(进入D盘之后,DBR即起始扇区为相对地址0)

虽然进入D盘或E盘等分区盘之后使用winhex打开的“起始扇区(模板)”的DBR相对地址不一样,但实际上都是指向同一个绝对物理地址,2 X8 ^3 h( h% g! l4 i3 G' o
DBR的内容都是一样的.

对于存在扩展分区的硬盘,比如我的硬盘有C、D、E和F共4个盘符0 o% a9 j  r; _! q+ c
那么C盘将真正的使用硬盘的MBR,对于扩展分区是如何被系统识别的,以及他们之间是如何串联起来的,
: x, A: P; p2 d1 g5 [% z有这样一个规定,使用MBR的第2个主分区作为下一个扩展分区相对与本分区的偏移扇区描述体
$ j+ c. r& n9 q# T/ U; E那么如果在扩展分区中,也没有MBR啊,是的,所以我们虚拟出一个MBR,认为下一个扩展分区是一个虚拟的物理硬盘,它也存在MBR5 X3 L" ]  t0 W# C0 J6 W6 H$ P
这样在虚拟MBR中只需要填写第2个主分区,即这个扩展分区对应的下一个扩展分区的偏移扇区描述体即可,这样循环下去.# p: E% _8 P% @. Z$ ]2 D7 o7 _! e

http://blogimg.chinaunix.net/blog/upfile/070920165906.jpg

http://blogimg.chinaunix.net/blog/upfile/070920165925.jpg

http://blogimg.chinaunix.net/blog/upfile/070920165953.jpg

回复

使用道具 举报

 楼主| 发表于 2010-2-19 17:38 | 显示全部楼层
本帖最后由 kenson 于 2010-2-22 12:50 编辑
# P+ J0 J$ ]* ?: O, B1 u$ p+ ]/ j
硬盘主引导记录(MBR)及其结构硬盘的0柱面、0磁头、1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR)。该记录占用512个字节,它用语硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。
4 x6 f% N; t2 o+ o9 _$ ^/ o1.MBR的读取
3 ^. n/ |3 b1 Z4 W, _    硬盘的引导记录(MBR)是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。9 ~; W- O% m2 _( |/ u. Z$ ]: L
用INT13H的读磁盘扇区功能的调用参数如下:. _9 W5 k3 c' f) V! c" x8 ]/ @
入口参数:AH=2 (指定功能号)
' h, q4 A/ p. L4 dAL=要读取的扇区数
5 T3 Z( @( F0 P7 a' H! b# cDL=磁盘号(0、1-软盘;80、81-硬盘)0 X+ r. S0 Y  t8 m) C: x3 _
DH=磁头号  P2 H. q1 m- V
CL高2位+CH=柱面号" P; o& q! d" x7 l1 T0 H' E
CL低6位=扇区号/ Y3 K0 |# f9 V) @
CS:BX=存放读取数据的内存缓冲地址# j# A* q9 A) m' ]& A3 B
出口参数:CS:BX=读取数据存放地址) o3 G5 ~. s2 v) j& a+ X6 a
错误信息:如果出错CF=1 AH=错误代码
- T9 ]- W, i7 J) I$ e, {; D用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
7 P* y1 m8 p2 V8 q) [6 J3 OA>DEBUG$ [' I* `. z7 Q3 f* \2 M
-A 100
' L+ k- @0 b& E  Y* t7 [8 aXXXX:XXXX MOV AX,0201 (用功能号2读1个扇区)- _! L. Z/ p* X( J3 Q
XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000)
' U- Y3 R7 `6 Q. N' HXXXX:XXXX MOV CX,0001 (读0柱面,1扇区)* }+ W$ V+ A- K  |, d. P
XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头)1 l2 X$ |" h3 e2 P; j
XXXX:XXXX INT 135 s/ e& c: f) J- h6 P% [
XXXX:XXXX INT 3- Q' N. v+ E* C' V/ T5 d
XXXX:XXXX (按回车键)
2 [' F/ x7 O3 J( l6 C1 {-G=100 (执行以上程序段), {% I/ @% f( j& `; N  S6 ]5 W2 [5 \
-D 1000 11FF (显示512字节的MBR内容)/ d. {% m4 ?5 ^! Y2 u1 J5 h; d
2.MBR的组成, o# t4 n2 m5 N5 v; Y; H
一个扇区的硬盘主引导记录MBR由如图6-15所示的4个部分组成。
6 }2 h& B) R# y! ]·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
4 S$ r8 g* n, v# z, \2 B  q% r·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。0 v9 d6 ~, i. l- N8 Q0 Z
·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
- c8 G3 `, @/ ]; V+ _4 }, x) w# m·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

0000-0088

 

Master Boot Record 主引导程序6 O. Y5 g/ K* H  E4 I3 X

主引导

程序

0089-01BD

出错信息数据区

数据区

01BE-01CD

分区项1(16字节)

 

分区表

 

01CE-01DD

分区项2(16字节)

01DE-01ED

分区项3(16字节)

01EE-01FD

分区项4(16字节)

01FE

55

结束标志

01FF

AA

图6-15 MBR的组成结构图
0 z* y9 ]4 ^8 w; A3.MBR中的分区信息结构, f' P2 Y: q$ d# U2 g
    占用512个字节的MBR中,偏移地址01BEH--01FDH的64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用FDISK定义分区说确定的。在实际应用中,FDISK对一个磁盘划分的主分区可少于4个,但最多不超过4个。每个分区表的项目是16个字节,其内容含义如表6-19所示。" R7 z( J. @& C" g1 z' B4 B+ }
表6-19 分区项表(16字节)内容及含义

存贮字节位

内容及含义

第1字节

引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。

第2、3、4字节

本分区的起始磁头号、扇区号、柱面号。其中:4 K2 X$ V+ U5 P+ {
    磁头号——第2字节;
+ ?9 N. ^* ^+ R+ ]- q) H. M    扇区号——第3字节的低6位;( U  h# _- n7 h* |1 r0 F1 B
    柱面号——为第3字节高2位+第4字节8位。8 [7 h  P5 m: q- c1 n4 [

第5字节

分区类型符。
; T, X6 ~: p9 D& j4 p/ P' j7 `; A. n    00H——表示该分区未用(即没有指定);
1 T, J. C5 e" ]( J; ?    06H——FAT16基本分区;
- O& O* O6 f" G/ w- D6 U- v+ |6 P9 L7 Y    0BH——FAT32基本分区;+ u& t  ^1 Q1 z) h  @) O& s! C
    05H——扩展分区;7 \1 O* c8 Z0 Z
    07H——NTFS分区;0 K. g) x! d3 G- u
    0FH——(LBA模式)扩展分区(83H为Linux分区等)。. [6 ^9 I1 g+ M

第6、7、8字节

本分区的结束磁头号、扇区号、柱面号。其中:9 G2 G, ?: S5 V/ }4 Y
    磁头号——第6字节;
8 t4 i+ g7 B; ^    扇区号——第7字节的低6位;
3 P+ L  \4 z/ c- m$ l+ g$ X; e    柱面号——第7字节的高2位+第8字节。9 D) B- d$ N+ h- d

第9、10、11、12字节

本分区之前已用了的扇区数。

第13、14、15、16字节

本分区的总扇区数。
4.MBR的主要功能及工作流程* M" q2 q" s* F: @! D: }8 z
    启动PC机时,系统首先对硬件设备进行测试,测试成功后进入自举程序INT 19H,然后读系统磁盘0柱面、0磁头、1扇区的主引导记录(MBR)内容到内存指定单元0:7C00地址开始的区域,并执行MBR程序段。+ E. D; m$ ]- l( E
    硬盘的主引导记录(MBR)是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的操作系统,并用主分区信息表来管理硬盘。7 y4 O: P2 s9 R9 _; G+ h
MBR程序段的主要功能如下:
  T! h: G9 W* o9 P·检查硬盘分区表是否完好。+ q. w# z: ]1 c- E  G2 b, _
·在分区表中寻找可引导的“活动”分区。( R2 C" |; @% z- f9 K4 C4 w
·将活动分区的第一逻辑扇区内容装入内存。在DOS分区中,此扇区内容称为DOS引导记录(DBR)。
# R$ ]/ P4 T9 ?5 q3 V: CMBR引导程序段的执行流程如图6-16所示。8 @3 p" G& ~, D& ^6 }9 v5 e. a

) Q6 i3 P) N1 i, m3 l+ g                                 硬盘逻辑驱动器的分区表链结构5 M/ L" `( g( \3 b: J  g  u& K
    硬盘是由很多个512字节的扇区组成,而这些扇区会被组织成一个个的“分区”。
9 P2 \4 N/ x) P硬盘的分区规则是:一个分区的所有扇区必须连续,硬盘可以有最多4个物理上的分区,这4个物理分区可以时个主分区或者3个主分区加一个扩展分区。在DOS/Windows管理下的扩展分区里,可以而且必须再继续划分逻辑分区(逻辑盘)。
( R' }1 x3 N; H1 |+ t从MS-DOS3.2问世以后,用户就可以在一个物理硬盘驱动器上划分一个主分区和一个扩展分区,并在扩展分区上创建多个逻辑驱动器,也即我们常说的一个物理盘上多个逻辑盘。9 ^  A7 T% v; K: z4 K
举一个例子,一个10G的硬盘,安装Windows,有C:、D:、E:三个逻辑盘,那么它的分区情况可以是如下的方式:
. o. T( T, M' @2 S% T: k$ p+ G" a& J分区一:主分区2GB,格式化为C:盘。) \& `* _0 y0 D9 v5 t( S: b5 }+ A
分区二:扩展分区8GB。它被再划分为两个各4GB的逻辑盘,格式化为以D:和E:盘。
+ K1 d0 V) X; w7 q' A) ?在一个划分有多个主分区的硬盘上,则可安装多个不同的操作系统。如Windows、Linux、Solaris等。每个操作系统自己去管理分配给自己的分区。但是,每个操作系统对分区的操作方式是不同的。对于DOS/Windows来说,它能够把它所能管辖的一个主分区和一个扩展分区格式化,然后按照C:、D:、E:逻辑盘的方式来管理。而Linux则不同,它是把“分区”看作一个设备,既没有“扩展分区”的概念,也没有“逻辑盘”的概念。
" ^6 z4 T9 n% E$ |% E! F( n1.逻辑盘的链接关系
% _  B. H( g4 `! T在FAT文件系统中,硬盘的逻辑盘字符用字符C:、D:、E:、...、Z:来表示。主分区一般被格式化成C:盘,从D:盘开始的逻辑盘是建立在扩展分区之上的。在系统进行读写操作时,DOS首先查看主引导记录(MBR)中的分区信息表,分区项将指向活动主分区的DOS引导记录(DBR)。1 Q6 o5 ?$ S' F5 L4 a( t
MBR中的分区表位于0柱面、0磁头、1扇区内,以位移1BEH开始的第一分区表作为链首,有表内的链接表项指示下一分区表的物理位置(xx柱面、0磁头、1扇区),在该位置的扇区内同样位移1BEH处,保存着第2张分区表,依次类推,直至指向最后一张分区表的物理位置(yy柱面、0磁头、1扇区)。因该分区表内不存在链接表项,即作为分区表链的链尾。如图6-17所示。
; p0 W% U  T8 W' o; G9 T   硬盘                      第一个虚拟              第二个虚拟                   第三个虚拟  
. @8 t2 |* {6 ?4 K5 ~3 ]MBR分区表                    MBR分区表               MBR分区表                    MBR分区表
定义C:盘------------>定义D:盘----------->定义E:盘------------>定义F:盘

描述剩余空间

描述剩余空间描述剩余空间描述剩余空间

未用

未用未用未用

未用

未用未用未用

55AA

55AA55AA55AA
图具有4个逻辑盘的分区链表示意图# O( Z8 \" v: z" q7 B! s5 M" }4 F: x5 q
举例来说,本来位于柱面0、磁头0、扇区1上的分区表的每一项记录和主分区的DBR之间有一对应的关系,但是,如果在扩展分区中建立了多个逻辑盘,例如D:、E:、F:,该分区表中的分区项可指向第一个逻辑盘:,但对于其它的逻辑盘,则就没有这种对应关系了。为能够查找扩展分区中的多个逻辑盘,DOS系统可做如下安排:
  U- h3 G9 V  H·如果硬盘只有一个主分区,即是将整个硬盘作为一个逻辑盘C:,则分区命令FDISK只在硬盘的柱面0、磁头0、扇区1上建立一个MBR。
. W' M, c$ X5 E) v! @5 e+ A& p  \- P6 T·如果硬盘被划分成2--4个分区,则FDISK除了在柱面0、磁头0、扇区1上建立一个MBR之外,还在扩展分区的每个逻辑盘的起始扇区上都建立一个虚拟MBR,每一个虚拟MBR用于扩展分区上的一个逻辑盘。! ?6 x3 Y7 F* C+ ?+ H# T0 q
·扩展分区的第一个扇区不是用于一个逻辑盘的DBR,而是指向一个“扩展的”分区表,即第一个虚拟的MBR。该逻辑盘DBR扇区的起点应为虚拟MBR的下一个磁道1扇区。
% v$ J' `; w  _) |! t这些MBR中的各个分区表链接成一个如图6-17所示的分区表链。这是一个硬盘具有4个表项所描述的内容。$ b- {1 n# R% r& x. ^& @  C
DOS就是用这种方法来使一个扩展分区看起来象是有多个硬盘。1 {4 t" ~) ~5 c/ r1 r& P& ]
从图中可以看到,位于磁盘柱面0、磁头0、扇区1上MBR的分区表指向基本分区及扩展分区中的第一个逻辑盘。
回复

使用道具 举报

 楼主| 发表于 2010-2-22 13:07 | 显示全部楼层
FAT分区原理。' y: I, ^+ Y9 k! e) G( H% A- H
0 A+ H2 D; L  }* n! W' @" D% Q! ^
     先来一幅结构图:
) i  L  P9 M; O- T9 |, S  j9 d: h+ K0 u8 l; O
http://www.channel7.cn/Files/RoUpimages/1395446307.GIF   
: w. d% I5 o: H
. D7 q+ {9 U- u# f  h/ W     现在我们着重研究FAT格式分区内数据是如何存储的。FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的。; B9 \  z3 C. x, l/ F: I: i

* S+ ]. S# u! Y     仔细研究图7中的fat16和fat32分区的组成结构。下面依次解释DBR、FAT1、FAT2、根目录、数据区、剩余扇区的概念。提到的地址如无特别提示均为分区内部偏移。; Q  f  z* C7 S" k" N1 T% `8 L6 N0 h- q

6 Q5 v5 E5 ^% l     4.1 关于DBR.; D( C# m# z" m& k; ~7 e
- h8 C, j& E, v
     DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区,我们先说第0扇)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程序,结束标志几部分组成。 以用的最多的FAT32为例说明分区DBR各字节的含义。见图8。$ |1 w$ S3 C& `

2 V# M" H$ a$ u+ ]$ k% @# |http://www.channel7.cn/Files/RoUpimages/2139556407.GIF! o; s0 Q. @7 N$ q' U/ O8 f& k

2 ?$ J: b; z7 i     图8的对应解释见表3  
; }) y$ b) q* I0 L  [" P3 [. ?& ?! X! F7 {+ ]! u; S% y0 [
http://www.channel7.cn/Files/RoUpimages/1395523645.GIF
; ]# d) Q# @( U4 }5 J7 y# C
4 d  r+ n: h- g! b) P     表3   FAT32分区上DBR中各部分的位置划分  - E4 b/ _3 M9 n3 r. H

5 h* O, y# T; f/ X/ jhttp://www.channel7.cn/Files/RoUpimages/1395542228.GIF   
) d( N+ [4 k: m+ y, h2 |8 I
) l2 n" c+ g' o+ i- ~- P3 B字节位移 字段长度 字段名 对应图8颜色 % N. t0 D. P# a3 {
0x00 3个字节 跳转指令   8 V7 ]6 k9 Y0 V: _
0x03 8个字节 厂商标志和os版本号  
- g2 M" l) A! G# Q3 _. J6 M; F0x0B 53个字节 BPB   5 n7 ]' s- d2 ]  x, k
0x40 26个字节 扩展BPB  
: Q- ~4 X2 i* P1 H  f/ R2 k0x5A 420个字节 引导程序代码  
; Z4 F& _9 r3 G6 y" \$ {0x01FE 2个字节 有效结束标志 & u2 _. i$ L# |- |* D5 b
图9给出了winhex对图8 DBR的相关参数解释:( a3 V2 c4 n- \2 X- g' C" ]7 O; ]

6 g9 \/ F' S$ b$ ]     根据上边图例,我们来讨论DBR各字节的参数意义。
回复

使用道具 举报

 楼主| 发表于 2010-2-22 13:08 | 显示全部楼层
MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。
: p; z( n# z1 k* u: `5 A1 ]7 t) z% ^- Z) o' N7 L! v
     跳转指令之后是8字节长的OEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。为了保留与MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。通常在被Windows 95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。
  N- ?) t6 R1 y& `+ L, X0 `) Q
2 D; V! z5 A1 h  r) m* U5 {; I     接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter Block),BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置。磁盘容量和几何结构变量都被封在BPB之中。由于引导扇区的第一部分是一个x86跳转指令。因此,将来通过在BPB末端附加新的信息,可以对BPB进行扩展。只需要对该跳转指令作一个小的调整就可以适应BPB的变化。图9已经列出了项目的名称和取值,为了系统的研究,针对图8,将FAT32分区格式的BPB含义和扩展BPB含义释义为表格,见表4和表5。: g' r! Q' ]2 f0 L5 ?
% ~1 G6 z5 s; i: d* h7 \1 C' _6 D
http://www.channel7.cn/Files/RoUpimages/1395632192.GIF
" i- C+ @+ ]4 e+ i# l; Bhttp://www.channel7.cn/Files/RoUpimages/2139572958.GIF; I- r& a: t% ?/ ?8 X; _% H

  M2 _9 s1 g7 K; p/ p; T" G     表4  FAT32分区的BPB字段     
' U5 G/ Q, Y8 q9 v9 t; R  
# Z& m5 l! a1 m0 g- a. a     字节位移 字段长度(字节) 图8对应取值 名称和定义 6 k$ c6 w; L& @; U  ?$ h% K
2 i" ]5 A. p; m4 K! e! \- A
     0x0B 2 0x0200 扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512 0x0D 1 0x08 每簇扇区数(Sectors Per Cluster),一簇中的扇区数。由于FAT32文件系统只能跟踪有限个簇(最多为4 294 967 296个),因此,通过增加每簇扇区数,可以使FAT32文件系统支持最大分区数。一个分区缺省的簇大小取决于该分区的大小。本字段的合法十进制值有1、2、4、8、16、32、64和128。
回复

使用道具 举报

 楼主| 发表于 2010-2-22 13:09 | 显示全部楼层
Windows 2000的FAT32实现只能创建最大为32GB的分区。但是,Windows 2000能够访问由其他操作系统(Windows 95、OSR2及其以后的版本)所创建的更大的分区0x0e 2 0x0020 保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为32 0x10 1 0x02 FAT数(Number of FAT) 该分区上FAT的副本数。本字段的值一般为2 * r* o& Z+ D8 L! v' i
0x11 2 0x0000 根目录项数(Root Entries)只有FAT12/FAT16使用此字段。对FAT32分区而言,本字段必须设置为 0 0x13 2 0x0000 小扇区数(Small Sector)(只有FAT12/FAT16使用此字段)对FAT32分区而言,本字段必须设置为0
$ l0 ?* ]+ c, X9 t. m" g0x15 1 0xF8 媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用0x16 2 0x0000 每FAT扇区数(Sectors Per FAT)只被FAT12/FAT16所使用,对FAT32分区而言,本字段必须设置为0 0x18 2 0x003F 每道扇区数(Sectors Per Track) 包含使用INT13h的磁盘的“每道扇区数”几何结构值。该分区被多个磁头的柱面分成了多个磁道
+ U6 w+ T! v9 g: r; J3 b, W8 H0x1A 2 0x00FF 磁头数(Number of Head) 本字段包含使用INT 13h的磁盘的“磁头数”几何结构值。例如,在一张1.44MB 3.5英寸的软盘上,本字段的值为 2 / i- \" [3 ~2 T2 q; `. m
0x1C 4 0x0000003F 隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录的数据区的绝对位移的过程中使用了该值。本字段一般只对那些在中断13h上可见的媒体有意义。在没有分区的媒体上它必须总是为0 ( C1 H1 x  E. G2 v- \0 v
0x20 4 0x007D043F 总扇区数(Large Sector) 本字段包含FAT32分区中总的扇区数 ( ~* Y3 ?- C8 n  G, U) N6 a( u
0x24 4 0x00001F32 每FAT扇区数(Sectors Per FAT)(只被FAT32使用)该分区每个FAT所占的扇区数。计算机利用这个数和 FAT数以及隐藏扇区数(本表中所描述的)来决定根目录从哪里开始。该计算机还可以从目录中的项数决定该分区的用户数据区从哪里开始
8 g* ~/ B7 V' }2 x1 [  f0x28 2 0x00 扩展标志(Extended Flag)(只被FAT32使用)该两个字节结构中各位的值为:9 v" Y5 c* g% J
位0-3:活动 FAT数(从0开始计数,而不是1).
, Z# [' Q! Y% \) T0 i1 l
# E8 J* P5 y% j6 [     只有在不使用镜像时才有效
; f, U/ Q6 o" ]9 t位4-6:保留
4 @7 x1 e$ ?+ H% d3 j- q+ a! u位7:0值意味着在运行时FAT被映射到所有的FAT* d; O: z) Z  o% |/ `7 ~* d% H
     1值表示只有一个FAT是活动的
6 E8 l3 l. @8 Z4 o位8-15:保留; h/ n; i, y+ J
2 K0 A3 h* l7 {7 j7 e% a
     0x2A 2 0x0000 文件系统版本(File ystem Version)只供FAT32使用,高字节是主要的修订号,而低字节是次要的修订号。本字段支持将来对该FAT32媒体类型进行扩展。如果本字段非零,以前的Windows版本将不支持这样的分区
* M0 U% K* S) f8 f# I0x2C 4 0x00000002 根目录簇号(Root Cluster Number)(只供FAT32使用) 根目录第一簇的簇号。本字段的值一般为2,但不总是如此 # N7 O2 t3 }  @" u! P+ l: F0 n+ _+ ?3 A
0x30 2 0x0001 文件系统信息扇区号(File System Information SectorNumber)(只供FAT32使用) FAT32分区的保留区中的文件系统信息(File System Information, FSINFO)结构的扇区号。其值一般为1。在备份引导扇区(Backup Boot Sector)中保留了该FSINFO结构的一个副本,但是这个副本不保持更新 $ `; t. [* F# Y0 H/ T4 G
0x34 2 0x0006 备份引导扇区(只供FAT32使用) 为一个非零值,这个非零值表示该分区保存引导扇区的副本的保留区中的扇区号。本字段的值一般为6,建议不要使用其他值
" {/ d9 l$ l3 g# L) q1 a( H0x36 12 12个字节均为0x00 保留(只供FAT32使用)供以后扩充使用的保留空间。本字段的值总为0 2 ^9 \: C% W- H

' L0 l3 z7 |' A6 i( Y' x     表5   FAT32分区的扩展BPB字段    : s$ M% u* J& t$ D9 A
         
! S$ y: P4 B7 P. P5 q$ ^5 k     字节位移 字段长度(字节) 图8对应取值 字段名称和定义 " b; |" \! w  q+ ]) j$ @
0x40 1 0x80 物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。一般地,在发出一个INT13h BIOS调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义 4 G- ^) R" Y3 N0 b1 ~3 ^

" x3 Q  ?. e/ I- x4 c. ~0x41 1 0x00 保留(Reserved) FAT32分区总是将本字段的值设置为0 ( r' _+ T6 M  G5 w$ r2 W2 n
0x42 1 0x29 扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29 1 C. |8 O( S* ]. x
0x43 4 0x33391CFE 分区序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘
% n" W+ e* E) i( b* |0x47 11 "NO NAME" 卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中
2 ^; p* `( B0 `1 y0x52 8 "FAT32" 系统ID(System ID) FAT32文件系统中一般取为"FAT32" - A' u& h2 W" R6 ~
DBR的偏移0x5A开始的数据为操作系统引导代码。这是由偏移0x00开始的跳转指令所指向的。在图8所列出的偏移0x00~0x02的跳转指令"EB 58 90"清楚地指明了OS引导代码的偏移位置。+ r, x; B6 a& Q, a' ^1 P6 U

1 U6 j+ h, R3 S& C     jump 58H加上跳转指令所需的位移量,即开始于0x5A。此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的。大多数的资料上都说win98,构建于fat基本分区上的win2000,winxp所使用的DBR只占用基本分区的第0扇区。他们提到,对于fat32,一般的32个基本分区保留扇区只有第0扇区是有用的。实际上,以FAT32构建的操作系统如果是win98,系统会使用基本分区的第0扇区和第2扇区存储os引导代码;以FAT32构建的操作系统如果是win2000或winxp,系统会使用基本分区的第0扇区和第0xC扇区(win2000或winxp,其第0xC的位置由第0扇区的0xAB偏移指出)存储os引导代码。所以,在fat32分区格式上,如果DBR一扇区的内容正确而缺少第2扇区(win98系统)或第0xC扇区(win2000或winxp系统),系统也是无法启动的。如果自己手动设置NTLDR双系统,必须知道这一点。  d7 T! c$ O& q" `
0 K. `6 t. _' {8 X2 k
     DBR扇区的最后两个字节一般存储值为0x55AA的DBR有效标志,对于其他的取值,系统将不会执行DBR相关指令。上面提到的其他几个参与os引导的扇区也需以0x55AA为合法结束标志。% l7 x1 I. y& K  g( a
+ X) n9 \# p( D& ^) Z% A/ Z
FAT16 DBR:
% A8 G- @) q- f2 _' N5 n/ ?' j2 J" S
FAT32中DBR的含义大致如此,对于FAT12和FAT16其基本意义类似,只是相关偏移量和参数意义有小的差异,FAT格式的区别和来因,以后会说到,此处不在多说FAT12与FAT16。我将FAT16的扇区参数意义列表。感兴趣的朋友自己研究一下,和FAT32大同小异的。/ ?; T* l( p' a
: Z* v* X7 R; n/ V+ |% w. }7 S
http://www.channel7.cn/Files/RoUpimages/1395845306.GIF9 Q8 h5 s, R! [
http://www.channel7.cn/Files/RoUpimages/1395727163.GIF
' F- Y1 b* u# }表6  一个FAT16分区上的引导扇区段
/ Y, w8 J# e2 \$ s( mhttp://www.channel7.cn/Files/RoUpimages/2139594852.GIF
回复

使用道具 举报

 楼主| 发表于 2010-2-22 13:10 | 显示全部楼层
字节位移 字段长度(字节) 字段名称 . i6 Y8 r& B% Q1 L
0x00 3 跳转指令(Jump Instruction) * u% w4 {' ?3 Y7 C" X; D8 @) K
0x03 8 OEM ID 2 x; r; k' t, n: d
0x0B 25 BPB
; e. E! ~( L1 c7 a4 h0x24 26 扩展BPB
0 f: \8 Z& Z* n6 T- N' a& ~- @, r0x3E 448 引导程序代码(Bootstrap Code)
4 [( Z1 W% ?# p+ C& t6 h9 ], d0x01FE 4 扇区结束标识符(0x55AA)
+ ]# `+ K+ B" i2 e表7  FAT16分区的BPB字段       0 \) T/ S. @: ~. H
字节位移 字段长度(字节) 例值 名称和定义
( ?* q1 B" h+ s
( s# _$ W# M- w. a# l0x0B 2 0x0200 扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512
5 D: }: U; E9 x2 R0x0D 1 0x40 每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536个)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大小取决于该 分区的大小。本字段合法的十进制值有 1、2、4、8、16、32、64和128。导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误
  p& p3 Q" C$ \% ^2 @: e1 `
( f2 \) M3 I: G/ r, L0x0e 2 0x0001 保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为1 0 Z) b5 c7 W* a+ T2 A
# @" G2 Y" ^3 I7 K/ \# U% _
0x10 1 0x02 FAT数(Number of FAT)该分区上FAT的副本数。本字段的值一般为2 - S4 G( h6 Y: t1 e+ n$ Q
0x11 2 0x0200 根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号(Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数
9 Y- F" l/ A( J8 Z) L6 N: S3 [0 M0x13 2 0x0000 小扇区数(Small Sector) 该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它
" p3 z' l4 m% |; ?2 a0x15 1 0xF8 媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用
' O- z) n( x/ ?. T) D) C1 j, [6 W* |; ]& v0 F
0x16 2 0x00FC 每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该 分区的用户数据区从哪里开始 2 ?: l- w0 M, D8 L. K
0x18 2 0x003F 每道扇区数(Sectors Per Trark)  , X1 Z. [+ z. {: i
0x1A 2 0x0040 磁头数(Number of head)  
' P, r$ N; {$ u0 p9 `2 {5 k% X3 R5 N0x1C 4 0x0000003F 隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据区的绝对位移的过程中使用了该值
0 m9 ~. u0 _5 h6 u8 S0x20 4 0x003EF001 大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0 6 b0 w7 H0 I. ~9 Q- |
5 C+ \8 x1 x4 W" s
表8   FAT16分区的扩展BPB字段     
2 x1 E. c: ~' [, d7 U* [6 @! @0 s        
5 R# R3 K# x4 s! g字节位移 字段长度(字节) 图8对应取值 字段名称和定义
1 Z+ L- @7 C7 W7 s0x24 1 0x80 物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。一般地,在发出一个INT13h BIOS调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义 0 I5 i, L6 Y% w8 S6 I0 l3 b& h

$ u1 `: @0 \: q; e. N0x25 1 0x00 保留(Reserved) FAT16分区一般将本字段的值设置为0
8 O6 Q1 Y/ X/ R8 h0x26 1 0x29 扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29 " t9 T5 E2 c5 K
0x27 2 0x52368BA8 卷序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘 ! \1 v% d! x! S  d
0x2B 11 "NO NAME" 卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中 ! o% U+ @0 a# G' F/ e
0x36 8 "FAT16" 文件系统类型(File System Type) 根据该磁盘格式,该字段的值可以为FAT、FAT12或FAT16
+ \. A4 `. ?% F& N/ \3 A4 L6 X  Y" E) P# c" h9 m. z% h
     4.2  关于保留扇区
+ b  r) N* h! y- R! ^2 g8 |
' @; }' o2 j; a" a     在上述FAT文件系统DBR的偏移0x0E处,用2个字节存储保留扇区的数目。所谓保留扇区(有时候会叫系统扇区,隐藏扇区),是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。在FAT16文件系统中,保留扇区的数据通常设置为1,即仅仅DBR扇区。而在FAT32中,保留扇区的数据通常取为32,有时候用Partition Magic分过的FAT32分区会设置36个保留扇区,有的工具可能会设置63个保留扇区。) d) o6 s8 q& Y2 T# i% Q$ n/ J% f

8 s6 _' k6 k6 Q" m     FAT32中的保留扇区除了磁盘总第0扇区用作DBR,总第2扇区(win98系统)或总第0xC扇区(win2000,winxp)用作OS引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理,通常情况下是没作用的。操作系统之所以在FAT32中设置保留扇区,是为了对DBR作备份或留待以后升级时用。FAT32中,DBR偏移0x34占2字节的数据指明了DBR备份扇区所在,一般为0x06,即第6扇区。当FAT32分区DBR扇区被破坏导致分区无法访问时。可以用第6扇区的原备份替换第0扇区来找回数据。
回复

使用道具 举报

发表于 2010-2-22 13:11 | 显示全部楼层
还以为在说坛子里的FAT老兄呢
回复

使用道具 举报

 楼主| 发表于 2010-2-22 13:13 | 显示全部楼层
呵呵! 这个我在发贴子的时候就有想到这个情况了!!
回复

使用道具 举报

发表于 2010-2-22 13:56 | 显示全部楼层
FAT表还是比较好理解的,比较固定的格式& L0 _* {" u" I" a- i4 e% w9 R1 o

) Q6 m9 g0 b& NNTFS就麻烦了
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-29 00:40 , Processed in 0.038773 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表