日本电子维修技术 硬盘数据恢复教程
网上收集的PDF电子书
1
硬盘数据恢复教程.rar
sjhf
2
4
https:///forum.php?mod=attachment&aid=MjQ0MDN8OWRmZDMxYzQ1ZjU4MWRmMTdmYzcxNjFjNDViNmNjNzR8MTYyODkwMjAzNg%3D%3D&request=yes&_f=.rar
3
评论
应该是好东西,下载来看看!
评论
老康师傅指教.你的谜底对我一定有用.
评论
好东东..支持一下...
顺便问一下,是手工恢复还是用软件的?
评论
能不能发点内容出来呢?有的话就好了。
评论
以下是LZ所提供的资料,有兴趣的朋友可以看下。比较多,分几个帖子上传!
这样做主要是为了节省大家的经验数,无心占用论坛宝贵的空间。如有不妥,请删帖!请各位包涵~~
硬盘数据恢复教程
前言:
硬盘数据恢复很大程度依靠运气,无必胜把握,并且不与投入时间成正比,不要寄予太
大的希望。
请勿轻易拿自己硬盘做实验。
建议数据恢复前先用硬盘保护卡对拷到其他硬盘上做一个备份,然后修理备份。(用
ghost不行)
●硬盘数据恢复,一概论
初买来一块硬盘,我们是没有办法使用的,你需要将它分区、格式化,然后再安装上操
作系统才可以使用。一个完整硬盘的数据应该包括五部分:MBR,DBR,FAT,DIR区和
DATA区。其中只有主引导扇区是唯一的,其它的随你的分区数的增加而增加。
主引导扇区
主引导扇区位于整个硬盘的
0磁道
0柱面
1扇区,包括硬盘主引导记录
MBR(Main Boot
Record)和分区表
DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否
正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统
引导扇区)调入内存加以执行。至于分区表,很多人都知道,以
80H或
00H为开始标志,
以
55AAH为结束标志,共
64字节,位于本扇区的最末端。值得一提的是,MBR是由分区
程序(例如
DOS 的
Fdisk.exe)产生的,不同的操作系统可能这个扇区是不尽相同。如果你
有这个意向也可以自己去编写一个,只要它能完成前述的任务即可,这也是为什么能实现多
系统启动的原因(说句题外话:正因为这个主引导记录容易编写,所以才出现了很多的引导
区病毒)。
操作系统引导扇区
OBR(OS Boot Record)即操作系统引导扇区,通常位于硬盘的
0磁道
1柱面
1扇区
(这是对于
DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分
区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被
称为
BPB(BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个
OBR,
其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目
录前两个文件是否为操作系统的引导文件(例如
MSDOS或者起源于
MSDOS的
Win9x/Me
的
IO.SYS和
MSDOS.SYS)。如是,就把第一个文件读入内存,并把控制权交予该文件。
BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目
录大小、FAT个数、分配单元(Allocation Unit,以前也称之为簇)的大小等重要参数。OBR
由高级格式化程序产生(例如
DOS 的
Format.com)。
文件分配表
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等都有自己的文
件管理方式。
目录区
DIR是
Directory即根目录区的简写,DIR紧接在第二
FAT表之后,只有
FAT还不能定位
文件在磁盘中的位置,FAT还必须和
DIR配合才能准确定位文件的位置。DIR记录着每个
文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根
据
DIR中的起始单元,结合
FAT表就可以知道文件在磁盘的具体位置及大小了。在
DIR区
之后,才是真正意义上的数据存储区,即
DATA区。
数据区
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个逻辑磁盘往往不能满足实际
需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的
指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储
一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也
就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建
立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁
盘。
需要特别注意的是,由于主分区之后的各个分区是通过一种单向链表的结构来实现链接
的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。
数据存储原理
既然要进行数据的恢复,当然数据的存储原理我们不能不提,在这之中,我们还要介绍
一下数据的删除和硬盘的格式化相关问题
……
文件的读取
操作系统从目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件
在数据区保存的第一个簇的簇号),我们这里假设第一个簇号是
0023。
操作系统从
0023簇读取相应的数据,然后再找到
FAT的
0023单元,如果内容是文件
结束标志(FF),则表示文件结束,否则内容保存数据的下一个簇的簇号,这样重复下去直
到遇到文件结束标志。
文件的写入
当我们要保存文件时,操作系统首先在
DIR区中找到空区写入文件名、大小和创建时
间等相应信息,然后在
Data区找到闲置空间将文件保存,并将
Data区的第一个簇写入
DIR
区,其余的动作和上边的读取动作差不多。
文件的删除
Win9x的文件删除工作却是很简单的,简单到只在目录区做了一点小改动——将目录区
的文件的第一个字符改成了
E5就表示将改文件删除了。
附录:
Fdisk和
Format的一点小说明
和文件的删除类似,利用
Fdisk删除再建立分区和利用
Format格式化逻辑磁盘(假设
你格式化的时候并没有使用
/U这个无条件格式化参数)都没有将数据从
DATA区直接删除,
前者只是改变了分区表,后者只是修改了
FAT表,因此被误删除的分区和误格式化的硬盘
完全有可能恢复……
[ 本帖最后由 悠澜客 于 2008-5-22 00:48 编辑 ]
评论
系统启动流程
各种不同的操作系统启动流程不尽相同,我们这里以
Win9x/DOS的启动流程为例。
第一阶段:系统加电自检
POST过程。POST是
Power On Self Test的缩写,也就是加电
自检的意思,微机执行内存
FFFF0H处的程序(这里是一段固化的
ROM程序),对系统的
硬件(包括内存)进行检查。
第二阶段:读取分区记录和引导记录。当微机检查到硬件正常并与
CMOS设置相符后,
按照
CMOS设置从相应设备启动(我们这里假设从硬盘启动),读取硬盘的分区记录(DPT)
和主引导记录(MBR)。
第三阶段:读取
DOS引导记录。微机正确读取分区记录和主引导记录后,如果主引导记
录和分区表校验正确,则执行主引导记录并进一步读取
DOS引导记录(位于每一个主分区
的第一个扇区),然后执行该
DOS引导记录。
第四阶段
:装载系统隐含文件。将
DOS系统的隐含文件
IO.SYS入内存,加载基本的文
件系统
FAT,这时候一般会出现
Starting Windows 9x...的标志,IO.SYS将
MS.SYS读入内存,
并处理
System.dat和
User.dat文件,加载磁盘压缩程序。
第五阶段:实
DOS模式配置。系统隐含文件装载完成,微机将执行系统隐含文件,并执
行系统配置文件(Config.sys),加载
Config.sys中定义的各种驱动程序。
第六阶段:调入命令解释程序(Command.com)。系统装载命令管理程序,以便对系统的各种
操作命令进行协调管理(我们所使用的
Dir、Copy等内部命令就是由
Command.com提供的)。
第七阶段:执行批处理文件(Autoexec.bat)。微机将一步一步地执行批处理文件中的各条
命令。
第八阶段
:加载
Win.com。Win.com负责将
Windows下的各种驱动程序和启动执行文件
加以执行,至此启动完毕。
●硬盘数据恢复,二分区表的推算
Master Boot Record
The Master Boot Record is located at the physical beginning of a hard disk, editable using the
Disk Editor. It consists of a master bootstrap loader code (446 bytes) and four subsequent,
identically structured partition records. Finally, the hexadecimal signature 55AA completes a valid
Master Boot Record.
硬盘的主引导记录在硬盘的
0磁头
0柱面
1扇区。
主引导记录由三部分组成:
(1)主引导程序;
(2)四个分区表;
(3)主引导记录有效标志字。
详见表
1。
[表
1主引导记录结构]
位置内容
0000H -00D9H 主引导记录代码区
00DAH -01BDH 空闲区
01BEH -01CDH 分区
1结构信息
01CEH -01DDH 分区
2结构信息
01DEH -01EDH 分区
3结构信息
01EEH -01FDH 分区
4结构信息
01FEH -01FFH 55 AAH 主引导记录有效标志
说明:
A,分区表自偏移
1BEH处开始,分区表共
64个字节,表中可填入四个分区信息,每十六
个字节为一个分区说明项,这
16个字节含义详见表
2。
B,必须注意:扇区号的高二位占用柱面号所在字节的最高二位,即柱面号为
10位,扇区
号
6位。
The format of a partition record is as follows:
Offset Size Description
0 8 bit A value of 80 designates an active partition.
1 8 bit Partition start head
2 8 bit Partition start sector (bits 0-5)
3 8 bit Partition start track (bits 8,9 in bits 6,7 of sector)
4 8 bit Operating system indicator
5 8 bit Partition end head
6 8 bit Partition end sector (bits 0-5)
7 8 bit Partition end track (bits 8,9 in bits 6,7 of sector)
8 32 bit Sectors preceding partition
C 32 bit Length of partition in sectors
Operating system indicators: (hexadecimal, incomplete list)
00 Empty partition-table entry
01 DOS FAT12
04 DOS FAT16 (up to 32 MB)
05 DOS 3.3+ extended partition
06 DOS 3.31+ FAT16 (over 32 MB)
07 OS/2 HPFS, Windows NT NTFS, Advanced Unix
08 OS/2 v1.0-1.3, AIX bootable partition, SplitDrive
09 AIX data partition
0A OS/2 Boot Manager
0B Windows 95+ FAT32
0C Windows 95+ FAT32 (using LBA-mode INT 13 extensions)
0E DOS FAT16 (over 32 MB, using INT 13 extensions)
0F Extended partition (using INT 13 extensions)
17 Hidden NTFS partition
1B Hidden Windows 95 FAT32 partition
1C Hidden Windows 95 FAT32 partition (using LBA-mode INT 13 extensions)
1E Hidden LBA VFAT partition
42 Dynamic disk volume
50 OnTrack Disk Manager, read-only partition
51 OnTrack Disk Manager, read/write partition
81 Linux
82 Linux Swap partition, Solaris (Unix)
83 Linux native file system (ext2fs/xiafs)
85 Linux EXT
86 FAT16 volume/stripe set (Windows NT)
87 HPFS fault-tolerant mirrored partition, NTFS volume/stripe set
BE Solaris boot partition
C0 DR-DOS/Novell DOS secured partition
C6 Corrupted FAT16 volume/stripe set (Windows NT)
C7 Corrupted NTFS volume/stripe set
F2 DOS 3.3+ secondary partition
[表
2分区结构信息]
偏移长度含义
00H 1 活动分区指示符,该值为
80H表示为可自举分区(仅有一个),该值为
00H表示
其余分区。
01H 1 分区起始磁头号。
02H 1 低
6位是分区开始的扇区,高
2位是分区开始的柱面的头两位。
03H 1 分区开始的起始柱面号的低
8位。
04H 1 系统标志,该值为
01H表示采用
12位
FAT格式的
DOS 分区,该值
04H表示
采用
16位
FAT格式的
DOS分区,该值为
05H表示为扩展
DOS分区,为
06H
表示为
DOS系统。
05H 1 分区终止头号
06H 1 低
6位为分区结束的扇区号,头
2位为结束柱面号的前
2位。
07H 1分区结束柱面号的低
8位。
08H 4 本分区前的扇区数,低位字节在前。
0CH 4 本分区总的扇区数,低位字节在前。
重要公式:
02H为
X,03H为
Y。柱面=(X>>6)*16^2+Y;
以我的硬盘为例:
有九个可用分区,二个不可用分区;
两个
Primary NTFS分区,第二个为
active;
七个
Extened 分区,第五个为
NTFS其他为
FAT32.
评论
主分区表数据:位置
cylinder0, head 0,sector1
偏
移
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 33 C0 8E D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C
1 BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07 B1 04
2 38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B
3 EE 83 C6 10 49 74 16 38 2C 74 F6 BE 10 07 4E AC
4 3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25
5 96 8A 46 04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05
6 3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55 50 B4
7 41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74
8 0B 8A E0 88 56 24 C7 06 A1 06 EB 1E 88 66 04 BF
9 0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E
A 25 03 4E 02 CD 13 72 29 BE 59 07 81 3E FE 7D 55
B AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 2E 07 EB
C 8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB
D D5 4F 74 E4 33 C0 CD 13 EB B8 00 00 80 24 45 00
E 56 33 F6 56 56 52 50 06 53
1B …
…
00 00
1C 01 46 07 FE 7F 1E C6 28 11 00 99 31 35 00 80 00
1D 41 30 07 FE 7F B2 30 85 4A 00 C3 1C 20 00 00 00
1E 41 B3 0F FE FF FF F3 A1 6A 00 08 FE F7 01 00 00
1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
主分区表分析:
Master bootstrap loader code
0000H -00D9H
33 C0 8E D0 BC 00 7C FB 50 。。。
主引导记录代码,表示住分区表
01BEH -01CDH 分区
1结构信息
multi(0)disk(0)rdisk(0)partition(0)
知该分区
Boot Sector位于:起始磁
头为
0头,起始柱面为
70D,起始
扇区为
1扇区。
01CEH -01DDH 分区
2结构信息
multi(0)disk(0)rdisk(0)partition(1)
活动分区指示符为
80H,表示该
分区为可自举分区。
系统标志为
07表示
OS/2 HPFS,
Windows NT NTFS, Advanced Unix
系统。知该分区
Boot Sector位于:
起始磁头为
0头,起始柱面为
304D,起始扇区为
1扇区。
01DEH -01EDH 分区
3结构信息
Extended partition
系统标志字节为
0F,说明是扩展
分区
Extended partition (using INT
13 extensions)。
从扩展分区说明项知下一个分
区表位于:起始磁头为
0头,起始
柱面为
435D,起始扇区为
1扇区。
01EEH -01FDH 分区
4结构信息
分区说明项数据均为
00H没有定
义。
01FEH -01FFH 55 AAH 主引导
记录有效标志
扩展分区一分区表数据:位置
cylinder435D, head 0,sector1
偏
移
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1B 00 00
1C 41 B3 0B FE FF 08 3F 00 00 00 97 D5 53 00 00 00
1D C1 09 05 FE FF FF D6 D5 53 00 D6 D5 53 00 00 00
1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
扩展分区表分析:
01BEH -01CDH 分区
1结构信息
multi(0)disk(0)rdisk(0)partition(3)
知该分区位于:起始磁头为
1头,
起始柱面为
435D,起始扇区为
1
扇区(分区表占用磁头
0)。
系统标志字
0BH表示
Windows
95+ FAT32
01BEH -01CDH 分区
1结构信息
系统标志字节为
05H,说明是扩
展
DOS分区。于是知下一个分区
表位于:起始磁头为
0头,起始柱
面为
777D,起始扇区为
1扇区。
Partition Table Entry #3 数据均为
00H没有定义。
Partition Table Entry #4 数据均为
00H没有定义。
其他扩展分区同理。
附录:
Fdisk的
MBR参数
MBR 系
FDISK.COM(EXE) 一项未公布的开关,隐含于
MS DOS 3.30,延至
MS DOS
8.0(Windows ME)。实践中,有籍以修复主引导信息,重点在主引导程序。
FDISK /MBR 命令流程的分支有二:
读得主引导扇区检验标志(字) AA55h,操作单一,仅向主引导扇区位移 0-1BDH 写入当
前系统固有的主引导程序,安全可靠。
难能可贵的是它不触动主引导信息其余模块(分区表、检验标志),以及随后的
DOS 引导
信息、文件分配表、根目录,省事许多。检出检验标志非
AA55h,写主引导程序、初始化
分区表及登录检验标志,在
MS DOS 7.0 -8.0 环境中,常规以系统支持的最大容量分配
给基本
DOS 分区的方式登录分区表。分区表初始化(可能幸存的分区表被清除)的后果不难
想象;目前硬盘大都设置有其它分区,即使在高版本
DOS 环境中运作,常规建立的分区
表每难能符合实际需求,后续工作量也相当可观。
不过,它也不触动位于其后的
DOS 引导信息、文件分配表及根目录,高版本
FDISK
/MBR 命令适用于修复仅设基本
DOS 分区的硬盘分区表及检验标志受损,或主引导信息全
毁。
可见,在运行
FDISK /MBR 命令之前,需查明检验标志是否
AA55h,酌情处理,切忌
盲动。
经由
DOS 软盘引导,认硬盘,检验标志必健在。
另外,在
FDSIK 主菜单中选
4. Display Partition Information,列出分区信息,进一步证
实检验标志正常;若现
No partitition defined,检验标志每变异,而分区表或许尚健在。
●硬盘数据恢复,三深入逻辑分区
现在深入每一个逻辑分区。逻辑分区结构如下:
FAT12/16
Logical sector =0
Logical
sector=1
(Floppy
disk=1~9)
Logical
sector=1+se
ctors_per_F
AT
(Floppydisk
=10~18)
Logical
sector=1+secto
rs_per_FAT*2
(Floppy
disk=19~32)
Logical
sector=1+sectors_per_FAT*2+sectors_of_ro
otdirectories
(Floppy disk=33~)
DOS Boot SectorFAT1FAT2ROOT DirectoryData area(where filesand subdirectories arestored)
FAT32
Usually 32 sectors Logical sector
=0032h
Logical sector =0032h+
2*sectors_per_FAT
DOS Boot Recore 3
SectorsReserved sectorsCopy of recordReserve sectorsFAT1FAT2Data area(where files
and all bdirectories
are stored)
在逻辑分区当中用逻辑的
cluster和
sector。换算关系为:
cluster=logical_sector/sectors_per_cluster;
这里
sectors_per_cluster是在
BIOS Parameter Block里得到的。
Sector=( logical_sector mod sectors_per_track)+1;
Head=( logical_sector / sectors_per_track)mod total_heads;
Cylinder= logical_sector(sectors_per_track* total_heads);
logical_sector=( cluster-2)*sectors_per_cluster+sector_of_file_area_offset;
logical_sector=(sector-1)+head*sector_per_track+sector*sector_per_track*heads;
每个扇区长度=512字节
总簇数=逻辑盘容量/簇容量
总簇数=FAT表长度(字节)/每个表项长度(字节)-2
FAT表长度=逻辑盘容量/簇容量*每个表项长度
Dos引导记录块位于逻辑
0 sector中包含三部分:
(1)磁盘
IO参数表
BPB;
(2)磁盘基数表;
(3)引导区代码。
FAT16的
BPB(BIOS Parameter Block)表,描述逻辑盘结构组成,包含隐藏扇区数目
(从
0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。
FAT32系统中,BPB表的偏移与
FAT16不同,但表项基本相同。整个隐藏扇区部分都作
为逻辑盘的描述区域。
典型的
primary partion 的磁盘
IO参数表
BPB:
典型的
logical partion 磁盘参数表:
硬盘
BPB主要结构说明:
(Cylinder柱面/磁道-Side/Head磁头-Sector扇区地址以下简称为?-?-?)
主分区
名称地址长度(扇区)
主引导记录(
Main Boot
Record)
0-0-1 1
系统扇区(System Secotrs)
0-0-2,0-0-63 62
引导扇区(Boot)
0-1-1 1
扩展分区
名称地址长度(扇区)
扩展分区(Extend Partition)
?-y-1 1
系统扇区(System Secotrs)
?-y-2,?-y-63 62
引导扇区(Boot)
?-(y+1)-1 1
其后各项与主分区相同……
隐藏扇区(Hidden Secotrs):
FAT16 0-1-1 1
FAT32 0-1-1 32
评论
文件分配表(File Allocation Table):
FAT16 0-1-2根据逻辑盘容量变化
FAT32 0-1-33根据逻辑盘容量变化
说明:
FAT16的每个表项由
2字节(16位)组成,通常每个表项指向的簇包含
64个扇区,即
32K字节。逻辑盘容量最大为
2047MB。
FAT32的每个表项由
4字节(32位)组成,通常每个表项指向的簇包含
8个扇区,即
4K
字节。逻辑盘容量最小为
512MB。
对于
C分区,在
MBR的偏移
01c2H处,FAT16为
06H,FAT32为
0CH。
FAT是
DOS、Windows9X系统的文件寻址格式,位于
DBR之后。
在解释文件分配表的概念的时候,我们有必要谈谈簇(Cluster)的概念。文件占用磁盘空
间,基本单位不是字节而是簇。一般情况下,软盘每簇是
1个扇区,硬盘每簇的扇区数与硬
盘的总容量大小有关,可能是
4、8、16、32、64……同一个文件的数据并不一定完整地存
放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式
称为文件的链式存储。由于硬盘上保存着段与段之间的连接信息(即
FAT),操作系统在读
取文件时,总是能够准确地找到各段的位置并正确读出。
为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个
已经占用的簇指明存储后继内容的下一个簇的簇号。对一个文件的最后一簇,则要指明本簇
无后继簇。这些都是由
FAT表来保存的,表中有很多表项,每项记录一个簇的信息。由于
FAT对于文件管理的重要性,所以为了安全起见,FAT有一个备份,即在原
FAT的后面再
建一个同样的
FAT。初形成的
FAT中所有项都标明为“未占用”,但如果磁盘有局部损坏,
那么格式化程序会检测出损坏的簇,在相应的项中标为“坏簇”,以后存文件时就不会再使
用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,
因为其中需要存放簇号。FAT的格式有多种,最为常见的是
FAT16和
FAT32。
当一个磁盘
Format后,在其逻辑
0扇区(即
BOOT扇区)后面的几个扇区中存在着一个重
要的数据表—文件分配(FAT),文件分配表一式两份,占据扇区的多小凭磁盘类型大小而
定。顾名思义,文件分配表是用来表示磁盘问件的空分配信息的。它不对引导区,文件目录
的信息进行表示,也不真正存储文件内容。
我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位
的,哪怕这个文件只有
1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,
每个表项占
1.5个字节(磁盘空间在
10MB以下)或
2个字节(磁盘空间在
10MB以上)。
为了方便起见,以后所说的表项都是指
2个字节的。
FAT表的开始由介质描述符+一串“已占用”标志组成:
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F
每个有效的
FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件分配表结构如
1(H表示
16进制)
表
1
第
0字节表头,表磁盘类型。FFH双面软盘,每次道
8扇区
FEH单面软盘,每磁道
8扇区
FDH双
面软盘,每磁道
9扇区
FCCH单面软盘,每
磁道
9扇区
FC8H硬盘
第
1~2字节(表项号
1)表示第一簇状态,因第一簇被系
统占据,故此两字节为
FFFFH
第
3~4字节(表项号
2)表示第二簇状态,若为
FFFH表
此簇为坏的,DOS已标记为不能用;0000H
表示此簇为空,可以用;FFF8H表不能示该
簇为文件的最后一簇;其余数字表示文件的
下一个簇号,注意高字节在后,低字节在前。
第
5~6字节(表项号
3)表示第三簇状态,同上。
注意:
不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。.高字节在
后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节
12H,34H,应
调整为
3412H。
文件分配表与文件目录(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘
上哪些簇是坏的或已被使用,哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总
调度师”。
当
DOS写文件时,首先在文件目录中检查是否有相同文件名,若无则使用一个文件目录
表项,然后依次检测
FAT中的每个表项对应的簇中,同时将该簇号写入文件目录表项相的
26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找
到的表项中,如此直到文件结束,在最后一簇的表项里填上
FFF8H,形成单向链表。
DOS删除文件时只是把文件目录表中的该文件的表项第
0个字节改为
E5H,表此项已被
删除,并在文件分配表中把该文件占用的各簇的表项清
0,并释放空间。其文件的内容仍然
在盘上,并没有被真正删除,这就是
undelete.exe,unerase.exe等一类恢复删除工具能起作用
的原因。
文件分配表在系统中的地位十分重要,用户最好不要去修改它,以免误操作带来严重的后
果。
典型的
FAT32表:
F8 FF FF FF FF FF FF FF 96 C4 00 00 FF FF FF 0F
FF FF FF 0F 06 00 00 00 FF FF FF 0F 08 00 00 00
09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00
0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00
FF FF FF 0F 00 00 00 00 FF FF FF 0F 14 00 00 00
15 00 00 00 FF FF FF 0F FF FF FF 0F FF FF FF 0F
19 00 00 00 1A 00 00 00 1B 00 00 00 FF FF FF 0F
00 00 00 00 1E 00 00 00 FF FF FF 0F 20 00 00 00
FF FF FF 0F 22 00 00 00 23 00 00 00 24 00 00 00
25 00 00 00 26 00 00 00 27 00 00 00 28 00 00 00
文件目录表(File Directory Table),即根目录区,又称为
ROOT区:
紧跟在
FAT2的下一个扇区,长度为
32个扇区(256个表项)。如果支持长文件名,则每
个表项为
64个字节,其中,前
32个字节为长文件链接说明;后
32个字节为文件属性说明,
包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为
32个字节的
属性说明。
值得注意的是:
1,FAT32没有储存目录的目录区,而
FAT16储存根目录并把子目录放到数据区。
2,表示目录的目录项指出根目录地址同时长度字节为
0,表示文件的目录项指出数据地址。
典型的
FAT32根目录:
30 30 30 30 30 30 20 20 20 20 20 10 00 12 3C 7C
39 2B 39 2B 05 00 3D 7C 39 2B 3A 34 00 00 00 00
44 4D 32 4B 44 49 53 4B 49 4D 47 20 00 96 DB 40
39 2B 39 2B 0A 00 DC 40 39 2B 88 02 5B 72 13 00
42 49 4E 42 49 4E 20 20 20 20 20 08 00 00 00 00
00 00 00 00 00 00 47 65 09 2B 00 00 00 00 00 00
000000子目录
注意OS7前的怪字符为
E5H,表示被删除,被删除文件仍旧能够找到开始簇,数据恢
复就依靠这一特点。
数据区(Data Area):紧跟在
FDT的下一个扇区,直到逻辑盘的结束地址。
由上图可以想到,即使目录被破坏仍旧可能从磁盘里把信息读出。
到现在为止,硬盘数据结构的理论部分已经讲完。
数据恢复主要是手动找出
FAT、目录、数据的对应关系或直接找到数据,现在已经有完善
的磁盘编辑器帮助我们做到这一点,使工作大大简化了。
有只能化的恢复工具能不依靠
FAT而恢复被删除文件,比如
RECOVERNT,估计是依靠
Win2000的文件使用记录。这种方法在冲启动之前恢复文件的可能性很大。
从理论上讲只要数据不被覆盖总能被恢复的
评论
●硬盘数据恢复,四文件分配表
FAT是
DOS、Windows9X系统的文件寻址格式,位于
DBR之后。
在解释文件分配表的概念的时候,我们有必要谈谈簇(Cluster)的概念。文件占用磁盘空
间,基本单位不是字节而是簇。一般情况下,软盘每簇是
1个扇区,硬盘每簇的扇区数与硬
盘的总容量大小有关,可能是
4、8、16、32、64……同一个文件的数据并不一定完整地存
放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式
称为文件的链式存储。由于硬盘上保存着段与段之间的连接信息(即
FAT),操作系统在读
取文件时,总是能够准确地找到各段的位置并正确读出。
为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已
经占用的簇指明存储后继内容的下一个簇的簇号。对一个文件的最后一簇,则要指明本簇无
后继簇。这些都是由
FAT表来保存的,表中有很多表项,每项记录一个簇的信息。由于
FAT
对于文件管理的重要性,所以为了安全起见,FAT有一个备份,即在原
FAT的后面再建一
个同样的
FAT。初形成的
FAT中所有项都标明为“未占用”,但如果磁盘有局部损坏,那么
格式化程序会检测出损坏的簇,在相应的项中标为“坏簇”,以后存文件时就不会再使用这
个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因
为其中需要存放簇号。FAT的格式有多种,最为常见的是
FAT16和
FAT32。
当一个磁盘
Format后,在其逻辑
0扇区(即
BOOT扇区)后面的几个扇区中存在着一个重
要的数据表—文件分配(FAT),文件分配表一式两份,占据扇区的多小凭磁盘类型大小而
定。顾名思义,文件分配表是用来表示磁盘问件的空分配信息的。它不对引导区,文件目录
的信息进行表示,也不真正存储文件内容。
我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位
的,哪怕这个文件只有
1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,
每个表项占
1.5个字节(磁盘空间在
10MB以下)或
2个字节(磁盘空间在
10MB以上)。
为了方便起见,以后所说的表项都是指
2个字节的。
文件分配表结构如
1(H表示
16进制)
表
1
第
0字节表头,表磁盘类型。FFH双面软盘,每次道
8扇区
FEH单面软盘,每磁道
8扇区
FDH双
面软盘,每磁道
9扇区
FCCH单面软盘,每
磁道
9扇区
FC8H硬盘
第
1~2字节(表项号
1)表示第一簇状态,因第一簇被系
统占据,故此两字节为
FFFFH
第
3~4字节(表项号
2)表示第二簇状态,若为
FFFH表
此簇为坏的,DOS已标记为不能用;0000H
表示此簇为空,可以用;FFF8H表不能示该
簇为文件的最后一簇;其余数字表示文件的
下一个簇号,注意高字节在后,低字节在前。
第
5~6字节(表项号
3)表示第三簇状态,同上。
注意:
不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。.高字节在
后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节
12H,34H,应
调整为
3412H。
文件分配表与文件目录(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘
上哪些簇是坏的或已被使用,哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总
调度师”。
当
DOS写文件时,首先在文件目录中检查是否有相同文件名,若无则使用一个文件目录
表项,然后依次检测
FAT中的每个表项对应的簇中,同时将该簇号写入文件目录表项相的
26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找
到的表项中,如此直到文件结束,在最后一簇的表项里填上
FFF8H,形成单向链表。
DOS删除文件时只是把文件目录表中的该文件的表项第
0个字节改为
E5H,表此项已被
删除,并在文件分配表中把该文件占用的各簇的表项清
0,并释放空间。其文件的内容仍然
在盘上,并没有被真正删除,这就是
undelete.exe,unerase.exe等一类恢复删除工具能起作用
的原因。
文件分配表在系统中的地位十分重要,用户最好不要去修改它,以免误操作带来严重的后
果。
FAT表的定位
硬盘分区的主要结构说明:
(Cylinder柱面/磁道-Side磁头-Sector扇区地址以下简称为?-?-?)
《主分区》
名称地址长度(扇区)
主引导记录(Main Boot Record) 0-0-1 1
系统扇区(System Secotrs)
0-0-2,0-0-63 62
引导扇区(Boot)
0-1-1 1
FAT16系统中,此扇区包含
BPB(BIOS Parameter Block)表,描述逻辑盘结构组成,包
含隐藏扇区数目(从
0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录
表项最大值等。
FAT32系统中,BPB表的偏移与
FAT16不同,但表项基本相同。整个隐藏扇区部分都作
为逻辑盘的描述区域。
隐藏扇区(Hidden Secotrs):
FAT16 0-1-1 1
FAT32 0-1-1 32
文件分配表(File Allocation Table):
FAT16 0-1-2根据逻辑盘容量变化
FAT32 0-1-33根据逻辑盘容量变化
说明:
FAT16的每个表项由
2字节(16位)组成,通常每个表项指向的簇包含
64个扇区,即
32K字节。
逻辑盘容量最大为
2047MB。
FAT32的每个表项由
4字节(32位)组成,通常每个表项指向的簇包含
8个扇区,即
4K
字节。
逻辑盘容量最小为
512MB。
对于
C分区,在
MBR的偏移
01c2H处,FAT16为
06H,FAT32为
0CH。
有关计算公式为:
每个扇区长度=512字节
总簇数=逻辑盘容量/簇容量
总簇数=FAT表长度(字节)/每个表项长度(字节)-2
FAT表长度=逻辑盘容量/簇容量*每个表项长度
FAT表的开始由介质描述符+一串“已占用”标志组成:
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F
每个有效的
FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件目录表(File Directory Table),即根目录区,又称为
ROOT区:
紧跟在
FAT2的下一个扇区,长度为
32个扇区(256个表项)。如果支持长文件名,则每
个表项
为
64个字节,其中,前
32个字节为长文件链接说明;后
32个字节为文件属性说明,包
括文件长
度、起始地址、日期、时间等。如不支持长文件名,则每个表项为
32个字节的属性说明。
数据区(Data Area):
紧跟在
FDT的下一个扇区,直到逻辑盘的结束地址。
《扩展分区》
名称地址长度(扇区)
扩展分区(Extend Partition)
?-y-1 1
系统扇区(System Secotrs)
?-y-2,?-y-63 62
引导扇区(Boot)
?-(y+1)-1 1
其后各项与主分区相同……
FAT表引起的读写故障
硬盘文件分配表庞大无法手工修复,只能依靠工具。
FAT表记录着硬盘数据的存储地址,每一个文件都有一组
FAT链指定其存放的簇地址。FAT
表的损坏意味着文件内容的丢失。庆幸的是
DOS系统本身提供了两个
FAT表,如果目前使
用的
FAT表损坏,可用第二个进行覆盖修复。但由于不同规格的磁盘其
FAT表的长度及第
二个
FAT表的地址也是不固定的,所以修复时必须正确查找其正确位置,一些工具软件如
NU等本身具有这样的修复功能,使用也非常的方便。采用
DEBUG也可实现这种操作,即
采用其
m命令把第二个
FAT表移到第一个表处即可(不建议这样做)。如果第二个
FAT表也
损坏了,则也无法把硬盘恢复到原来的状态,但文件的数据仍然存放在硬盘的数据区中,可
采用
CHKDSK或
SCANDISK命令进行修复,最终得到*.CHK文件,这便是丢失
FAT链的
扇区数据。如果是文本文件则可从中提取出完整的或部分的文件内容。
软盘文件分配
FAT表修复
在运行某个程序时,有时会在屏幕上看到:File allocation table bad,drive A(文件分配表坏)
的错误信息,导致程序不能正常运行。
我们知道,在磁盘中有两个文件分配表:FAT1和
FAT2。FAT1用于日常工作,FAT2备用。
因此,在
FAT1损坏时,可用
FAT2表修补。
具体方法是:运行
DEBUG,将
FAT2读入缓冲区,用缓冲区的
FAT2数据覆盖磁盘中的
FAT1。
例:修复
3寸
1.44M软盘,在
A驱
在
DOS环境下进入
debug环境
在“-”提示符下进行如下操作:
-L 100 0 0A 9
-W 100 0 1 9
-q
评论
其它类型的软盘的修复方法参照下表进行。
起止逻辑扇区
5.25"低密
5.25"高密
3.5"低密
3.5"高密
BOOT区
0 0 0 0
FAT1 1-2 1-7 1-3 1-9
FAT2 3-4 8-0EH 4-6 0A-12H
例如我们要修复
5.25"高密软盘的
FAT,则需将上述参数改为:
-L 100 0 8 7
-W 100 0 1 7
-q
●硬盘数据恢复,五相关工具及实例
Win2k”秘密武器
”之磁盘编辑
Dskprobe.exe
一.简介
Dskprobe.exe是一个微软自己开发的、应用于
windows 2000环境下的磁盘
扇区编辑工具,主要用于硬盘扇区的编辑。这个工具允许使用者以本地管理员的
身份或权限直接对硬盘的物理扇区进行:读取、编辑、修改、保存及备份。这是
用别的方法难以实现的操作。是微软支持工具中的一个。
Dskprobe的应用有以下限制和适用范围:1. 这个工具与诺顿工具的最大区
别就是引入了对工具使用者权限的要求,当执行
Dskprobe的时候,它会先要求
你输入管理员的登录密码。2.由于每台计算机配备的硬盘都可能不一样,所安装
的操作系统的类型、版本也参差不一;如果利用了多系统引导安装,则还存在怎
样组合问题,凡此种种,都会影响主引导记录和分区表乃至引导扇区的内容。所
以,进行对比的时候,决不能照搬书本上的例子。3.该工具不能在
FAT32上使用,
即不支持
FAT32系统。4.该工具不能用在动态磁盘上。
该工具在使用时可分成两个阶段:
1.备份阶段,这是指系统尚属正常的时候,事先使用
Dskprobe来将重要信
息读出、并保存为一个或多个文件。需要保存的有:主引导记录、分区表和引导
扇区。
2.排除故障,当发现引导故障后,如果确认是主引导记录、分区表和引导扇
区的问题。就可以用
Dskprobe先将原来备份的文件读出来,然后进行替换并保
存到相应的物理扇区。进一步说:由于
Dskprobe工具实际可以对硬盘的任意物
理扇区进行编辑修改,所以,它也决不限于只能完成上面三部分替换。
二.如何进行针对主引导记录的操作?
硬盘上电后,系统首先访问硬盘控制电路中保存的诸如厂商、型号等等基本
信息备用。随后系统执行
BIOS中的一段例行代码,首先读取的硬盘的主引导记
录(Master Boot Record (MBR))到内存中,然后执行引导记录中的代码,就可
以完成引导过程并最终将整个系统的控制权交给操作系统。这就是计算机引导过
程的粗略描述。如果要配置多个操作系统,希望在引导过程中可以被用户选择,
就需要修改引导记录中的代码来实现这些功能。当然,这种情况下的主引导记录
要比单一引导更为复杂。
要访问主引导记录,可以先启动程序:Dskprobe.exe,启动成功的界面如图所示。
然后可以按照下列步骤:
1.先指定要读取(主引导记录所在)的驱动器,可用鼠标点击菜单中的:Drives->Physical Drive,会显示一个用来指定物理驱动器的对话框。
2.这个对话框的编辑栏中默认显示一个"Physical Drive 0",这就是第一个物
理驱动器――硬盘。
3.鼠标点击"Physical Drive 0",再点击按钮
Set Active,就完成了指定
物理驱动器的任务了。4.然后指定要读取的物理扇区位置。可以点击图1菜单中
的
Sectors->Read Sectors。又出现的对话框可以用来指定扇区的起始位置和
要连续读取的扇区数。
如
Starting Sector(起始扇区)=0,Number of Sectors(扇区数)=1,
点击OK按钮后,立即显示出来的内容如图
1窗口中所示。这就是物理硬盘
0
柱面
0磁盘面第一扇区的信息,也就是主引导记录的内容(包含分区表信息)。
如果将这些信息单独截取出来,以文本方式显示,基本上与下面的类似:之所以
说成基本类似,是因为这些内容中有些部分不是每台计算机都相同的,例如分区
表会随分区数多少而不同,引导记录代码也会因是否加入多引导选择而不同。
5.将显示结果保存为一个文件:上面已经说过物理硬盘
0柱面
0磁盘面第一扇区
的信息非常重要,我们何不趁现在计算机正常时将这些信息保存起来呢?你可以
点击"File->Save as…",指定一个文件的保存路径和名称,就可以予以保
存,默认的后缀是.dsk。
6.用完好的主引导记录替换当前(损坏)的这个:如果你自己的计算机存在引导
问题并确认是主引导扇区的问题,况且以前保存有完好的引导记录文件,那么,
你就可以进行这个操作了。首先点击"File->Open",找到引导记录文件并打
开,如果核对一下没有问题,就可以再点击"Write -> Write Sector",然
后会有对话框让你指定(要写入的)起始扇区,选好后点击"OK",就可以完
成改写。必须说明的是:这种操作非常关键,一步也不能错。否则后果是非常严
重的,为防万一,动手之前重要数据先作好备份。
能导致主引导记录损坏的原因主要有:a.病毒,许多病毒都修改这里,因
为主引导记录被执行的时候,操作系统还没有在内存中完全取得系统控制权,这
种修改的结果是病毒先取得了系统控制权。如果真是这种情况,病毒代码往往还
会接着存放在后续的扇区中,而正常情况下,0柱面
0磁面上应当是除了主引导
记录外什么也没有的。假设,你的硬盘是每面
63个扇区,如果你发现
0柱面
0
磁盘面第一扇区之后的哪些扇区上并不是以
0填充的,而是有别的非
0值,就可
以肯定你的硬盘存在问题。b.分区表损坏。这也是常见的问题,我们留在后面
详细讨论。c.分区操作不当,这主要发生在没有安装操作系统之前,所以也用
不上本次所介绍的工具。
评论
三.引导记录结构。
下面是一个主引导记录区的内容:最左边的:号前的数字是相对的物理地址;
中间的那些
16进制数字是记录内容(限于蓝色的部分);粉红色的字体是磁盘
签名,在以前的dos中是没有这一项的;以
80开头的红色字体部分是分区表;
末尾的
55AA是引导结束标志。
Physical Sector: Cyl 0, Side 0, Sector 1
00000000: 33 C0 8E D0 BC 00 7C FB -50 07 50 1F FC BE 1B 7C 3.....|.P.P...|
00000010: BF 1B 06 50 57 B9 E5 01 -F3 A4 CB BD BE 07 B1 04 ...PW...........
00000020: 38 6E 00 7C 09 75 13 83 -C5 10 E2 F4 CD 18 8B F5 8n.|.u..........
00000030: 83 C6 10 49 74 19 38 2C -74 F6 A0 B5 07 B4 07 8B ...It.8,t.......
00000040: F0 AC 3C 00 74 FC BB 07 -00 B4 0E CD 10 EB F2 88 ..<.t...........
00000050: 4E 10 E8 46 00 73 2A FE -46 10 80 7E 04 0B 74 0B N..F.s*.F..~..t.
00000060: 80 7E 04 0C 74 05 A0 B6 -07 75 D2 80 46 02 06 83 .~..t....u..F...
00000070: 46 08 06 83 56 0A 00 E8 -21 00 73 05 A0 B6 07 EB F...V...!.s.....
00000080: BC 81 3E FE 7D 55 AA 74 -0B 80 7E 10 00 74 C8 A0 ..>.}U.t..~..t..
00000090: B7 07 EB A9 8B FC 1E 57 -8B F5 CB BF 05 00 8A 56 .......W.......V
000000A0: 00 B4 08 CD 13 72 23 8A -C1 24 3F 98 8A DE 8A FC .....r#..$?.....
000000B0: 43 F7 E3 8B D1 86 D6 B1 -06 D2 EE 42 F7 E2 39 56 C..........B..9V
000000C0: 0A 77 23 72 05 39 46 08 -73 1C B8 01 02 BB 00 7C .w#r.9F.s......|
000000D0: 8B 4E 02 8B 56 00 CD 13 -73 51 4F 74 4E 32 E4 8A .N..V...sQOtN2..
000000E0: 56 00 CD 13 EB E4 8A 56 -00 60 BB AA 55 B4 41 CD V......V.`..U.A.
000000F0: 13 72 36 81 FB 55 AA 75 -30 F6 C1 01 74 2B 61 60 .r6..U.u0...t+a`
00000100: 6A 00 6A 00 FF 76 0A FF -76 08 6A 00 68 00 7C 6A j.j..v..v.j.h.|j
00000110: 01 6A 10 B4 42 8B F4 CD -13 61 61 73 0E 4F 74 0B .j..B....aas.Ot.
00000120: 32 E4 8A 56 00 CD 13 EB -D6 61 F9 C3 49 6E 76 61 2..V.....a..Inva
00000130: 6C 69 64 20 70 61 72 74 -69 74 69 6F 6E 20 74 61 lid partition
ta
00000140: 62 6C 65 00 45 72 72 6F -72 20 6C 6F 61 64 69 6E ble.Error loadin
00000150: 67 20 6F 70 65 72 61 74 -69 6E 67 20 73 79 73 74 g operating
syst
00000160: 65 6D 00 4D 69 73 73 69 -6E 67 20 6F 70 65 72 61 em.Missing
opera
00000170: 74 69 6E 67 20 73 79 73 -74 65 6D 00 00 00 00 00 ting system.....
00000180: 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 ................
00000190: 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 ................
000001A0: 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 ................
000001B0: 00 00 00 00 00 2C 44 63 -32 31 37 31 35 0C 80 01 .....,Dc21715...
000001C0: 01 00 07 FE 7F 7D 3F 00 -00 00 BF A3 5D 00 00 00 .... }?.....]...
000001D0: 41 7E 06 FE BF 62 FE A3 -5D 00 A5 22 38 00 00 00 A~...b..].."8...
000001E0: 81 63 0B FE FF 7A A3 C6 -95 00 18 A3 44 00 00 00 .c...z......D...
000001F0: C1 7B 05 FE FF FF BB 69 -DA 00 E2 48 D4 00 55 AA .{.....i...H..U.
重新格式化动态系统
/启动分区后无法继续进行设置
日期: 2000年
09月
20日
故障现象
在进行文本模式设置和设置完毕后的文件复制过程中重新格式化系统/启动分区
后,当你重启计算机进入图形模式设置时可能会出现以下的某些故障:
·计算机完成开电自检(POST)后出现黑屏,没有响应。
·出现以下错误信息:
Cannot find NTLDR(找不到
NTLDR)
Press any key to restart(按下任意键重启)
原因
之所以出现以上现象,主要是由于启动扇区的
BIOS参数块(
BPB)中包含了非法
的驱动器转换值,从而阻碍了系统的正常启动。
解决
要继续完成设置,可以按照以下文章中描述的步骤创建启动盘,而后用启动盘进
行启动,这些文章收录在“微软知识基础”中。
完成设置后,可以采取以下的一种方法修正启动扇区的
BPB,以使
Windows 2000
能够正常启动。你可以使用“Dskprobe.exe”工具修正
BPB,该工具位于
Windows
2000 CD-ROM的“Support\Tools”文件夹中,它能够修改下列启动扇区的字段,
以符合硬盘的实际结构:
·每磁道的扇区数
·磁头(磁道/柱面)
修正
FAT32格式的系统/启动分区
警告:对于
FAT32分区,不要在“查看”菜单中将启动扇区作为
FAT启动分区
来浏览和保存,这种方式将破坏现有分区,你应当在编辑时将工具置于“字节”
模式。
1. 启动
Dskprobe.exe.
2. 在“驱动器”菜单中点击“物理驱动器”,而后双击代表系统/启动驱动器的
物理驱动器。
3. 点击“只读”复选框以取消选择,点击“设置激活”,而后点击“确定”。
4. 在“扇区”菜单中点击“读取”以使用缺省设置。
5. 在“驱动器”菜单中点击“卷信息”,而后注意以下值:
o每磁道的扇区数
o磁头(磁道/柱面)
6. 使用“计算器”(Calc.exe)将上述值由十进制转换为十六进制,并将转换后的值留待以后
使用。例如:
Sectors / Track 十进制值
63转换为十六进制值
3F。
Tracks / Cylinder 十进制值
255转换为十六进制值
FF。
7. 在“查看”菜单中点击“分区表”。
8. 双击每个分区表的索引项找到激活分区(“Boot Indicator”字段的值为“SYSTEM”)。注意
对应于激活分区(SYSTEM)的“相关扇区”号。
9. 点击激活分区“相关扇区”号旁的“执行”按钮。
10. 在“查看”菜单中点击“字节”,该操作将显示十六进制的
BPB信息。
11. 修改偏移量
0x018的值,修改范围从十六进制数
01到步骤
6中读取的扇区/磁道值。
12. 修改偏移量
0x01A的值,修改范围从十六进制数
01到步骤
6中读取的扇区/磁道值。
13. 确认
BPB条目的值都等于正确的十六进制值后,点击“扇区”菜单中的“写入”选项。
14. 确认你要写入的扇区与“相关扇区”设置中的相同,而后点击“写入”。
15. 退出“Dskprobe.exe”工具而后重启计算机,此时不使用启动盘。
修正
FAT (非
FAT32)或
NTFS系统/启动分区
1.
启动
Dskprobe.exe.
2.
在“驱动器”菜单中点击“物理驱动器”,而后双击代表系统
/启动驱动器的物理驱动器。
3.
点击“只读”复选框以取消选择,点击“设置激活”,而后点击“确定”。
4.
在“扇区”菜单中点击“读取”以使用缺省设置。
5.
在“驱动器”菜单中点击“卷信息”,而后注意以下值:
o每磁道的扇区数
o磁头(磁道/柱面)
6.
在“查看”菜单中点击“分区表”。
7.
双击每个分区表的索引项找到激活分区(
“Boot Indicator”字段的值为“SYSTEM”)。
注意对应于激活分区(
SYSTEM)的“相关扇区”号。
8.
点击激活分区“相关扇区”号旁的“执行”按钮。
9.
基于当前文件系统类型,在“查看”菜单中点击“FAT启动扇区”或“NTFS启动扇区”,
该操作将显示需编辑的
BPB信息。
10.
修改“每磁道扇区数”条目的值,取值范围为从“1”到步骤
5中获取的“扇区/磁道”值。
11.
修改“磁头”条目的值,取值范围为从“1”到步骤
5中获取的“扇区/磁道”值。
12.
确认
BPB条目的值都正确后,点击“扇区”菜单中的“写入”选项。
13.
确认你要写入的扇区与“相关扇区”设置中的相同,而后点击“写入”。
14.
退出“Dskprobe.exe”工具而后重启计算机,此时不使用启动盘。
Runtime's DiskExplorer
评论
NTFS文件系统
一,ntfs文件系统
nt文件系的统主要特征是在引导记录了描述的。这些文件系统从引导扇区的位置开始直至
这些磁道加上卷(分区)里的磁道区域。分区是由簇构成,而且只能是簇(512字节)的整
数倍。每个分区的开始地址是(逻辑)0簇。
任何(软件的磁盘)定位系统都是用簇而不是磁道号。各种(磁盘)信息储存在文件分配表
(MFT)里。文件分配表的位置在引导扇区的“第一文件分配表”表项里给出。文件分配
表是一个数据库,包含了此分区的所有文件及目录的信息。每一个表项是
1024字节(fat32
是
4个字节,fat16是
2个字节,fat12是
1.5个字节)。每一个表项记录一个文件或目录(包
括文件分配表自己),并且有一个记录号等于文件分配表的位置除以
1024。文件分配表的表
项由一个表头和表示文件或目录属性的列表组成。这些属性描述了文件或目录的名称、时间、
大小等。主要的属性如下:
10 Standard information: contains time stamps and DOS attributes,
30 File name: contains the file's name for different name spaces (usually NT's native Unicode file
name and DOS compatible DOS file name),
80 Data: if the entry represents a file, this attribute contains the file's data.
90 Index root: if the entry is a directory, this attribute describes the root of a binary tree in which
the directory entries are located,
A0 Index allocation: if the entry is a directory, this attribute contains a list of file names.
这些属性表比
1024字节大,意味着一些属性必须记录在文件分配表表项外。在这种情况下,
就有一个运行列表(run list)记录这些在表项外的数据。运行列表实质上是簇的使用列表。
二,文件条目表项细节
任何一个文件或目录都被至少一条文件分配表项所描述。文件分配表位于一个系统文件,叫
做$MFT。这个文件能够理解为包括每一个文件和目录的数据库。每一个文件分配表的条目
默认
1024字节。MFT条目位置由序号标志。例如:第
100条的地址为
100*1024。开始的
16条为保留区域,第
0条是最重要的,它描述了文件分配表自己,其次第
5条描述根目录。
实例:
一个典型的
6G硬盘,一个
NTFS分区。
引导记录如下:
或这样看:
于是第一个文件分配表(MFT)就在
25256(0x000062A8)处,每个表项
2个磁道。
注意:此分区每个磁道一个簇,这也是
ntfs比
fat32节省空间的原因。
第一个表项:
此文件就是文件分配表$MFT,文件名如此.
0 1 2 3 4 5 6 7 8 9 A B C D E F
46 49 4C 45 2A 00 03 00 B0 7B A4 A5 00 00 00 00
01 00 01 00 30 00 01 00 B0 01 00 00 00 04 00 00
00 00 00 00 00 00 00 00 08 00 0F 07 00 00 00 00
10 00 00 00 60 00 00 00 00 00 18 00 00 00 00 00
48 00 00 00 18 00 00 00 60 56 5E D5 0D A4 C1 01
60 56 5E D5 0D A4 C1 01 60 56 5E D5 0D A4 C1 01
60 56 5E D5 0D A4 C1 01 06 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 00 00 00 68 00 00 00 00 00 18 00 00 00 03 00
4A 00 00 00 18 00 01 00 05 00 00 00 00 00 05 00
60 56 5E D5 0D A4 C1 01 60 56 5E D5 0D A4 C1 01
60 56 5E D5 0D A4 C1 01 60 56 5E D5 0D A4 C1 01
00 B4 44 00 00 00 00 00 00 B4 44 00 00 00 00 00
06 00 00 00 00 00 00 00 04 03 24 00 4D 00 46 00
54 00 00 00 00 00 00 00 80 00 00 00 58 00 00 00
01 00 40 00 00 00 07 00 00 00 00 00 00 00 00 00
15 25 02 00 00 00 00 00 40 00 00 00 00 00 00 00
00 2C 4A 04 00 00 00 00 00 2C 4A 04 00 00 00 00
00 2C 4A 04 00 00 00 00 21 20 A8 62 33 63 9F 00
48 06 06 33 93 85 01 D1 77 60 00 81 01 00 00 00
B0 00 00 00 58 00 00 00 01 00 40 00 00 00 06 00
00 00 00 00 00 00 00 00 17 00 00 00 00 00 00 00
40 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00
58 22 00 00 00 00 00 00 58 22 00 00 00 00 00 00
21 02 C8 62 31 06 A2 EA 0D 31 08 F7 70 1E 41 08
C8 25 87 00 00 A2 41 80 FF FF FF FF 00 00 00 00
B0 00 00 00 48 00 00 00 01 00 40 00 00 00 06 00
00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
40 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00
E0 03 00 00 00 00 00 00 E0 03 00 00 00 00 00 00
21 02 C8 62 00 00 00 00 FF FF FF FF 00 00 0F 07
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 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 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 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 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 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 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 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 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 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 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F 07
表示
注意:左边绝对磁道
62e7-相对磁道
62a8=(分区表+保留扇区)3f,因为它们是不记如分区之内
的。
注意:run list表示数据不在这里。
这样的系统使用的表项一共最多
16个:
而普通文件的表项如下:
换成目录方式就是:
代序。
关于
int13与扩展
int13
评论
1,1
一. 硬盘结构简介
1. 硬盘参数释疑
到目前为止, 人们常说的硬盘参数还是古老的
CHS (Cylinder/Head/Sector)参数. 那么为什么要
使用这些参数, 它们的意义是什么? 它们的取值范围是什么? 很久以前, 硬盘的容量还非常小的
时候, 人们采用与软盘类似的结构生产硬盘. 也就是硬盘盘片的每一条磁道都具有相同的扇区数.
由此产生了所谓的
3D参数
(Disk Geometry). 既磁头数(Heads), 柱面数(Cylinders), 扇区数
(Sectors),以及相应的寻址方式.
其中:
磁头数(Heads) 表示硬盘总共有几个磁头,也就是有几面盘片, 最大为
255 (用
8 个二进制位存
储); 柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道, 最大为
1023 (用
10 个二进制位存
储); 扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为
63 (用
6 个二进制位存储).
每个扇区一般是
512个字节, 理论上讲这不是必须的, 但好象没有取别的值的.所以磁盘最大容
量为: 255 * 1023 * 63 * 512 / 1048576 = 8024 GB ( 1M = 1048576 Bytes ) 或硬盘厂商常用的单位:
255 * 1023 * 63 * 512 / 1000000 = 8414 GB ( 1M = 1000000 Bytes ) 在
CHS 寻址方式中, 磁头,
柱面, 扇区的取值范围分别为
0 到
Heads -1, 0 到
Cylinders -1, 1 到
Sectors (注意是从
1 开
始).
2. 基本
Int 13H 调用简介
BIOS Int 13H 调用是
BIOS 提供的磁盘基本输入输出中断调用, 它可以完成磁盘(包括硬盘和软
盘)的复位, 读写, 校验, 定位, 诊断, 格式化等功能.它使用的就是
CHS 寻址方式, 因此最大识
能访问
8 GB 左右的硬盘
( 本文中如不作特殊说明, 均以
1M = 1048576 字节为单位).
3. 现代硬盘结构简介
在老式硬盘中, 由于每个磁道的扇区数相等, 所以外道的记录密度要远低于内道, 因此会浪费很
多磁盘空间 (与软盘一样). 为了解决这一问题, 进一步提高硬盘容量, 人们改用等密度结构生产
硬盘. 也就是说, 外圈磁道的扇区比内圈磁道多
. 采用这种结构后, 硬盘不再具有实际的
3D参数,
寻址方式也改为线性寻址, 即以扇区为单位进行寻址.为了与使用
3D寻址的老软件兼容 (如使用
BIOS Int13H接口的软件), 在硬盘控制器内部安装了一个地址翻译器, 由它负责将老式
3D参数
翻译成新的线性参数. 这也是为什么现在硬盘的
3D参数可以有多种选择的原因 (不同的工作模
式, 对应不同的
3D参数, 如
LBA, LARGE, NORMAL).
4. 扩展
Int 13H 简介
虽然现代硬盘都已经采用了线性寻址, 但是由于基本
Int 13H 的制约, 使用
BIOS Int 13H 接口
的程序, 如
DOS 等还只能访问
8G 以内的硬盘空间.为了打破这一限制, Microsoft 等几家公司
制定了扩展
Int 13H 标准(Extended Int13H), 采用线性寻址方式存取硬盘, 所以突破了
8G 的
限制, 而且还加入了对可拆卸介质 (如活动硬盘) 的支持.
二. Boot Sector 结构简介
1. Boot Sector 的组成
Boot Sector 也就是硬盘的第一个扇区, 它由
MBR (Master Boot Record), DPT (Disk Partition
Table) 和
Boot Record ID 三部分组成. MBR 又称作主引导记录占用
Boot Sector 的前
446 个
字节
( 0 to 0x1BD ), 存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序).
DPT 即主分区表占用
64 个字节
(0x1BE to 0x1FD), 记录了磁盘的基本分区信息. 主分区表分
为四个分区项, 每项
16 字节, 分别记录了每个主分区的信息(因此最多可以有四个主分区).Boot
Record ID 即引导区标记占用两个字节
(0x1FE and 0x1FF), 对于合法引导区, 它等于
0xAA55,
这是判别引导区是否合法的标志.Boot Sector 的具体结构如下图所示:
0000 |------------------------------------------------|
||
||
| Master Boot Record |
||
||
| 主引导记录
(446字节)|
||
||
||
01BD | |
01BE |------------------------------------------------|
||
01CD | 分区信息
1(16字节)|
01CE |------------------------------------------------|
||
01DD | 分区信息
2(16字节)|
01DE |------------------------------------------------|
||
01ED | 分区信息
3(16字节)|
01EE |------------------------------------------------|
||
01FD | 分区信息
4(16字节)|
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|--------------------------
评论
2. 分区表结构简介
分区表由四个分区项构成, 每一项的结构如下:
BYTE State : 分区状态,0 = 未激活, 0x80 = 激活 (注意此项)
BYTE StartHead : 分区起始磁头号
WORD StartSC : 分区起始扇区和柱面号, 底字节的低
6位为扇区号,高
2位为柱面号的第
9,10
位, 高字节为柱面号的低
8 位
BYTE Type : 分区类型, 如
0x0B = FAT32, 0x83 = Linux 等,
00 表示此项未用
BYTE EndHead : 分区结束磁头号
WORD EndSC : 分区结束扇区和柱面号, 定义同前
DWORD Relative : 在线性寻址方式下的分区相对扇区地址
(对于基本分区即为绝对地址)
DWORD Sectors : 分区大小 (总扇区数)
注意: 在
DOS / Windows 系统下, 基本分区必须以柱面为单位划分( Sectors * Heads 个扇区),
如对于
CHS 为
764/255/63 的硬盘, 分区的最小尺寸为
255 * 63 * 512 / 1048576 = 7.844 MB.
3. 扩展分区简介
由于主分区表中只能分四个分区
, 无法满足需求, 因此设计了一种扩展分区格式. 基本上说, 扩
展分区的信息是以链表形式存放的, 但也有一些特别的地方.首先, 主分区表中要有一个基本扩
展分区项, 所有扩展分区都隶属于它, 也就是说其他所有扩展分区的空间都必须包括在这个基本
扩展分区中. 对于
DOS / Windows 来说, 扩展分区的类型为
0x05. 除基本扩展分区以外的其他
所有扩展分区则以链表的形式级联存放, 后一个扩展分区的数据项记录在前一个扩展分区的分
区表中, 但两个扩展分区的空间并不重叠.扩展分区类似于一个完整的硬盘
, 必须进一步分区才
能使用. 但每个扩展分区中只能存在一个其他分区
. 此分区在
DOS/Windows 环境中即为逻辑
盘. 因此每一个扩展分区的分区表 (同样存储在扩展分区的第一个扇区中)中最多只能有两个分
区数据项(包括下一个扩展分区的数据项). 扩展分区和逻辑盘的示意图如下:
|-----------------------| -------|
主扩展分区(/dev/hda2) | ^
|-----------------------| |
| 扩展
| 分区项
1 |--\ |
| |------------| | |
| 分区表
| 分区项
2 |--+--\ |
|-----------------------| | | |
|||||
| 逻辑盘
1 (/dev/hda5) |<-/ | |
||||
|-----------------------| | 主
| 扩展分区
2 |<----/
|-----------------------| 扩
| 扩展
| 分区项
1 |--\
| |------------| | 展
| 分区表
| 分区项
2 |--+--\
|-----------------------| | | 分
||||
| 逻辑盘
2 (/dev/hda6) |<-/ | 区
||||
|-----------------------| | |
| 扩展分区
3 |<----/ |
|-----------------------| |
| 扩展
| 分区项
1 |--\ |
| |------------| | |
| 分区表
| 分区项
2|||
|-----------------------| | |
||||
| 逻辑盘
3 (/dev/hda7) |<-/ |
|||
|-----------------------| ---------
三. 系统启动过程简介
系统启动过程主要由一下几步组成(以硬盘启动为例
):
1. 开机
:-)
2. BIOS 加电自检
( Power On Self Test --POST )
内存地址为
0ffff:0000
3. 将硬盘第一个扇区
(0头
0道
1扇区, 也就是
Boot Sector)
读入内存地址
0000:7c00 处.
4. 检查
(WORD) 0000:7dfe 是否等于
0xaa55, 若不等于
则转去尝试其他启动介质, 如果没有其他启动介质则显示
"No ROM BASIC" 然后死机.
5. 跳转到
0000:7c00 处执行
MBR 中的程序.
6. MBR 首先将自己复制到
0000:0600 处, 然后继续执行.
7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动
分区或有不止一个活动分区, 则转停止.
8. 将活动分区的第一个扇区读入内存地址
0000:7c00 处.
9. 检查
(WORD) 0000:7dfe 是否等于
0xaa55, 若不等于则
显示
"Missing Operating System" 然后停止, 或尝试
软盘启动.
10. 跳转到
0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统
...
以上步骤中
2,3,4,5 步是由
BIOS 的引导程序完成. 6,7,8,9,10
步由
MBR中的引导程序完成.
一般多系统引导程序 (如
SmartFDISK, BootStar, PQBoot 等) 都是将标准主引导记录替换成自
己的引导程序, 在运行系统启动程序之前让用户选择要启动的分区
. 而某些系统自带的多系统引
导程序 (如
lilo, NT Loader 等) 则可以将自己的引导程序放在系统所处分区的第一个扇区中,
在
Linux 中即为
SuperBlock (其实
SuperBlock 是两个扇区). 注: 以上各步骤中使用的是标准
MBR, 其他多系统引导程序的引导过程与此不同
评论
第二部分技术资料
第一章扩展
Int13H 技术资料
一. 简介
设计扩展
Int13H 接口的目的是为了扩展
BIOS 的功能, 使其支持
多于
1024柱面的硬盘, 以及可移动介质的琐定, 解锁及弹出等功能.
二. 数据结构
1. 数据类型约定
BYTE 1 字节整型
(8 位
)
WORD 2 字节整型
( 16 位
)
DWORD 4 字节整型
( 32 位
)
QWORD 8 字节整型
( 64 位
)
2. 磁盘地址数据包
Disk Address Packet (DAP)
DAP 是基于绝对扇区地址的, 因此利用
DAP, Int13H 可以轻松地逾
越
1024 柱面的限制, 因为它根本就不需要
CHS 的概念.
DAP 的结构如下:
struct DiskAddressPacket
{
BYTE PacketSize; // 数据包尺寸(16字节)
BYTE Reserved; // ==0
WORD BlockCount; // 要传输的数据块个数
(以扇区为单位)
DWORD BufferAddr; // 传输缓冲地址(segmentffset)
QWORD BlockNum; // 磁盘起始绝对块地址
};
PacketSize 保存了
DAP 结构的尺寸, 以便将来对其进行扩充. 在目前使用的扩展
Int13H 版本
中
PacketSize 恒等于
16. 如果它小于
16, 扩展
Int13H 将返回错误码( AH=01, CF=1 ).
BlockCount 对于输入来说是需要传输的数据块总数, 对于输出来说是实际传输的数据块个数
.
BlockCount = 0 表示不传输任何数据块. BufferAddr 是传输数据缓冲区的
32 位地址 (段地址:
偏移量). 数据缓冲区必须位于常规内存以内
(1M). BlockNum 表示的是从磁盘开始算起的绝对块
地址(以扇区为单位), 与分区无关. 第一个块地址为
0. 一般来说, BlockNum 与
CHS 地址的关
系是: BlockNum = cylinder * NumberOfHeads + head * SectorsPerTrack + sector -1; 其中
cylinder,
head, sector 是
CHS 地址, NumberOfHeads 是磁盘的磁头数, SectorsPerTrack 是磁盘每磁道的
扇区数. 也就是说
BlockNum 是沿着扇区->磁道->柱面的顺序记数的. 这一顺序是由磁盘控
制器虚拟的, 磁盘表面数据块的实际排列顺序可能与此不同 (如为了提高磁盘速度而设置的间
隔因子将会打乱扇区的排列顺序).
3. 驱动器参数数据包
Drive Parameters Packet
驱动器参数数据包是在扩展
Int13H 的取得驱动器参数子功能调用中使用的数据包. 格式如下:
struct DriveParametersPacket
{
WORD InfoSize; // 数据包尺寸
(26 字节)
WORD Flags; // 信息标志
DWORD Cylinders; // 磁盘柱面数
DWORD Heads; // 磁盘磁头数
DWORD SectorsPerTrack; // 每磁道扇区数
QWORD Sectors; // 磁盘总扇区数
WORD SectorSize; // 扇区尺寸 (以字节为单位)
};
信息标志用于返回磁盘的附加信息, 每一位的定义如下:
0 位:
0 = 可能发生
DMA 边界错误
1 = DMA 边界错误将被透明处理
如果这位置
1, 表示
BIOS 将自动处理
DMA 边界错误, 也就是说
错误代码
09H 永远也不会出现.
1 位:
0 = 未提供
CHS 信息
1 = CHS 信息合法
如果块设备的传统
CHS 几何信息不适当的话, 该位将置
0.
2 位:
0 = 驱动器不可移动
1 = 驱动器可移动
3 位: 表示该驱动器是否支持写入时校验.
4 位:
0 = 驱动器不具备介质更换检测线
1 = 驱动器具备介质更换检测线
5 位:
0 = 驱动器不可锁定
1 = 驱动器可以锁定
要存取驱动器号大于
0x80 的可移动驱动器, 该位必须置
1
(某些驱动器号为
0 到
0x7F 的设备也需要置位)
6 位:
0 = CHS 值是当前存储介质的值 (仅对于可移动介质), 如果
驱动器中有存储介质
, CHS 值将被返回.
1 = CHS 值是驱动器支持的最大值 (此时驱动器中没有介质).
7 -15 位: 保留, 必须置
0.
三. 接口规范
1. 寄存器约定
在扩展
Int13H 调用中一般使用如下寄存器约定:
ds:di ==> 磁盘地址数据包( disk address packet )
dl ==> 驱动器号
ah ==> 功能代码
/ 返回码
在基本
Int13H 调用中, 0 -0x7F 之间的驱动器号代表可移动驱动器
0x80 -0xFF 之间的驱动器
号代表固定驱动器. 但在扩展
Int13H 调用中
0x80 -0xFF 之间还包括一些新出现的可移动驱动
器, 比如活动硬盘等. 这些驱动器支持先进的锁定,解锁等功能. ah 返回的错误码除了标准
Int13H 调用规定的基本错误码以外,又增加了以下错误码:
B0h 驱动器中的介质未被锁定
B1h 驱动器中的介质已经锁定
B2h 介质是可移动的
B3h 介质正在被使用
B4h 锁定记数溢出
B5h 合法的弹出请求失败
2. API 子集介绍
1.x 版的扩展
Int13H 调用中规定了两个主要的
API 子集. 第一个子集提供了访问大硬盘所必
须的功能, 包括检查扩展
In13H 是否存在( 41h ), 扩展读
( 42h ), 扩展写
( 43h ), 校验扇区
( 44h ), 扩展定位( 47h ) 和取得驱动器参数( 48h ). 第二个子集提供了对软件控制驱动器锁定和
弹出的支持, 包括检查扩展
Int13H 是否存在( 41h ), 锁定/解锁驱动器( 45h ), 弹出驱动器( 46h ),
取得驱动器参数( 48h ), 取得扩展驱动器改变状态( 49h ), int 15h. 如果使用了调用规范中不支持
的功能, BIOS 将返回错误码
ah = 01h, CF = 1.
3. API 详解
1) 检验扩展功能是否存在
入口:
AH = 41h
BX = 55AAh
DL = 驱动器号
返回:
CF = 0
AH = 扩展功能的主版本号
AL = 内部使用
BX = AA55h
CX =API 子集支持位图
CF = 1
AH = 错误码
01h, 无效命令
这个调用检验对特定的驱动器是否存在扩展功能. 如果进位标志置
1 则此驱动器不支持扩展功
能. 如果进位标志为
0, 同时
BX = AA55h, 则存在扩展功能. 此时
CX 的
0 位表示是否支持
第一个子集, 1位表示是否支持第二个子集.对于
1.x 版的扩展
Int13H 来说, 主版本号
AH = 1.
AL 是副版本号, 但这仅限于
BIOS 内部使用, 任何软件不得检查
AL 的值.
2) 扩展读
入口:
AH = 42h
DL = 驱动器号
DSI = 磁盘地址数据包(Disk Address Packet)
返回:
CF = 0,AH= 0 成功
CF = 1,AH = 错误码
这个调用将磁盘上的数据读入内存. 如果出现错误, DAP 的
BlockCount项中则记录了出错前实
际读取的数据块个数
.
3) 扩展写
入口:
AH = 43h
AL
0 位
=0 关闭写校验
1 打开写校验
1-7 位保留, 置
0
DL = 驱动器号
DSI = 磁盘地址数据包(DAP)
返回:
CF = 0,AH= 0 成功
CF = 1,AH = 错误码
这个调用将内存中的数据写入磁盘. 如果打开了写校验选项, 但
BIOS不支持, 则会返回错误码
AH = 01h, CF = 1. 功能
48h 可以检测
BIOS是否支持写校验. 如果出现错误, DAP 的
BlockCount 项中则记录了出错前实际写入的数据块个数
.
4) 校验扇区
入口:
AH = 44h
DL = 驱动器号
DSI = 磁盘地址数据包(Disk Address Packet)
返回:
CF = 0,AH= 0 成功
CF = 1,AH = 错误码
这个调用校验磁盘数据, 但并不将数据读入内存.如果出现错误, DAP 的
BlockCount 项中则记录
了出错前实际校验的数据块个数
.
5) 锁定/解锁驱动器
入口:
AH = 45h
AL
= 0 锁定驱动器
= 1 驱动器解锁
= 02 返回锁定/解锁状态
= 03h-FFh - 保留
DL = 驱动器号
返回:
CF = 0,AH= 0 成功
CF = 1,AH = 错误码
这个调用用来缩定指定驱动器中的介质. 所有标号大于等于
0x80 的可移动驱动器必须支持这
个功能. 如果在支持可移动驱动器控制功能子集的固定驱动器上使用这个功能调用, 将会成功返
回. 会成功返回. 驱动器必须支持最大
255次锁定, 在所有锁定被解锁之前, 不能在物理上将驱
动器解锁. 解锁一个未锁定的驱动器,将返回错误码
AH= B0h. 如果锁定一个已锁定了
255次的
驱动器, 将返回错误码
AH = B4h. 锁定一个没有介质的驱动器是合法的.
6) 弹出可移动驱动器中的介质
入口:
AH = 46h
AL = 0 保留
DL = 驱动器号
返回:
CF = 0,AH= 0 成功
CF = 1,AH = 错误码
这个调用用来弹出指定的可移动驱动器中的介质.
所有标号大于等于
0x80 的可移动驱动器必须支持这个功能. 如果
在支持可移动驱动器控制功能子集的固定驱动器上使用这个功能调用, 将
会返回错误码
AH= B2h (介质不可移动). 如果试图弹出一个被锁定的介质
将返回错误码
AH= B1h (介质被锁定).
如果试图弹出一个没有介质的驱动器, 则返回错误码
Ah = 31h (驱动器
中没有介质).
中没有介质).
如果试图弹出一个未锁定的可移动驱动器中的介质, Int13h会调用
Int15h
(AH = 52h) 来检查弹出请求能否执行. 如果弹出请求被拒绝则返回错误码(同
Int15h). 如果弹出请求被接受,但出现了其他错误, 则返回错误码
AH = B5h.
7) 扩展定位
入口:
AH = 47h
DL = 驱动器号
DS:DI = 磁盘地址数据包(Disk Address Packet)
返回:
CF = 0,AH= 0 成功
CF = 1,AH = 错误码
这个调用将磁头定位到指定扇区.
8) 取得驱动器参数
入口:
AH = 48h
DL = 驱动器号
DS:DI = 返回数据缓冲区地址
返回:
CF = 0,AH= 0 成功
DS:DI 驱动器参数数据包地址, (参见前面的文章)
CF = 1,AH = 错误码
这个调用返回指定驱动器的参数.
9) 取得扩展驱动器介质更换检测线状态
入口:
AH = 49h
DL = 驱动器号
返回:
CF = 0,AH= 0 介质未更换
CF = 1,AH= 06h 介质可能已更换
这个调用返回指定驱动器的介质更换状态
.
这个调用与
Int13h AH = 16h 子功能调用相同, 只是允许任何驱动器标号. 如果对一台支持可移
动介质功能子集的固定驱动器使用此功能,则永远返回
CF = 0, AH = 0. 简单地将可移动介质锁
定再解锁就可以激活检测线, 而无须真正更换介质.
10) Int 15h 可移动介质弹出支持
入口:
AH = 52h
DL = 驱动器号
返回:
CF = 0,AH= 0 弹出请求可能可以执行
CF = 1,AH = 错误码
B1h 或
B3h 弹出请求不能执行
这个调用是由
Int13h AH=46h 弹出介质功能调用内部使用的
.
评论
说实话自己看得都晕了,这次看来犯错啦!!
评论
这么多我自己看得都晕了!!!!!!!再支持一下.. 电路 电子 维修 求创维42c08RD电路图 评论 电视的图纸很少见 评论 电视的图纸很少见 评论 创维的图纸你要说 版号,不然无能为力 评论 板号5800-p42ALM-0050 168P-P42CLM-01 电路 电子 维修 我现在把定影部分拆出来了。想换下滚,因为卡纸。但是我发现灯管挡住了。拆不了。不会拆。论坛里的高手拆解过吗? 评论 认真看,认真瞧。果然有收
·日本中文新闻 唐田绘里香为新剧《极恶女王》剃光头 展现演员决心
·日本中文新闻 真子小室夫妇新居引发隐私担忧
·日本中文新闻 前AKB48成员柏木由纪与搞笑艺人交往曝光
·日本学校 {日本国际学校}梅田インターナショナルスクール
·日本学校 LINE:sm287 陳雨菲、20歳、台湾からの留学生、東京に来たばかり
·日本留学生活 出售平成22年走行48000km 代步小车
·日本华人网络交流 円相場 一時1ドル=140円台まで上昇?
·日本华人网络交流 问日本华人一个问题
·日本旅游代购 富山接机
·生活百科 英国转澳大利亚转换插头
·汽车 【求助】修车遇到困难怎么办?