首页 百科知识 硬盘数据结构的保存与恢复

硬盘数据结构的保存与恢复

时间:2024-10-16 百科知识 版权反馈
【摘要】:硬盘的主引导记录主要包括主引导程序和硬盘分区表。由于在使用FDISK对硬盘分区时,会改变MBR中的分区表内容。FDT和FAT在磁盘数据结构中具有同样的重要作用。FAT表记录着硬盘数据的存储地址,每一个文件都有一组FAT链指定其存放的簇地址。FAT表的损坏意味着文件内容的丢失。庆幸的是DOS系统本身提供了两个FAT表,如果目前使用的FAT表损坏,可用第二个进行覆盖修复。硬盘中涉及一种低位在前高位在后的存储数字方式,读出时应对其进行调整。

4.3.1 硬盘数据结构的保存与恢复

在硬盘使用过程中,由于各种原因,如突然停电、病毒入侵等原因,常会造成硬盘上的数据丢失,甚至硬盘完全失效。

为了避免硬盘上的数据丢失,最简单的办法就是对硬盘上的重要数据进行备份,但是由于目前硬盘容量比较大,所以,要对硬盘上的所有数据备份是不可能的;因此较为可靠的办法就是对硬盘上的关键数据区进行备份,一旦出现故障,只要不是硬盘的物理损坏,就可以利用备份的关键数据区信息进行对硬盘数据区快速、方便的恢复硬盘的工作。

1.硬盘上关键的数据区

硬盘上的系统信息区数据主要包括如下内容:

(1)硬盘主引导记录

主引导扇区位于整个硬盘的0磁道、0柱面、1扇区,该扇区是在对硬盘分区时候产生的。

硬盘的主引导记录主要包括主引导程序和硬盘分区表。由于在使用FDISK对硬盘分区时,会改变MBR中的分区表内容。所以每次执行FDISK命令之后,都应该备份主引导扇区上的内容。

(2)各逻辑盘上的DOS引导记录

DOS的主引导扇区位于DOS基本分区的第一个逻辑扇区上,该扇区的内容由FORM AT命令生成。主要包括DOS引导程序和BPB表。如果DOS中的主引导记录M BR中的引导程序损坏,则不能引导系统;如果BPB表损坏,则DOS读/写磁盘时不能对磁盘定位,导致不能正常读取磁盘上的数据。

(3)文件分配表

文件分配表是DOS和Windows文件管理系统用来给每个文件分配磁盘空间的表格,它会告诉操作系统文件存放的位置。如果FAT表损坏,将会出现磁盘上的文件无法读取。写入和删除等对磁盘的操作,操作系统都会修改FAT的内容,所以要经常地备份FAT表,防止磁盘文件出现故障。

(4)文件根目录表

FDT和FAT在磁盘数据结构中具有同样的重要作用。在FDT中记录了根目录下的文件和子目录中在磁盘的起始地址、文件大小等信息。操作系统在查找文件时,首先查找FDT表中存放该文件的起始地址,然后到FAT中查找文件的具体位置。如果根目录下的FDT表损坏,也会造成不能正常读取磁盘上的文件。

2.MBR和DBR的备份与恢复

由于MBR不属于任何操作系统,所以操作系统的普通命令对该扇区上的信息是不能操作的,而且DEBUG命令也不能直接读取该扇区的信息。但是我们可以通过BIOS中断INT13H或者其他一些工具软件来读取该扇区的信息。

下面我们就来介绍如何利用BIOS INT 13H进行编程来读取MBR和DBR信息,并进行备份和恢复。

(1)备份逻辑盘C:中的MBR

1)MBR读取程序

A:>DEBUG

-A 100(编程开始)

xxxx∶0100 MOV AX,201 (AL=读取的扇区数)

xxxx∶0103 MOV BX,1000 (ES:BX=缓冲区地址)

xxxx∶0106 MOV CX,1 (柱面号=CL高2位+CH,扇区号=CL低6位)

xxxx∶0109 MOV DX,0080 (DH=磁头,DL=0、1软盘;80、81硬盘)

xxxx∶010C INT 13

xxxx∶010E INT 3(程序结束)

xxxx∶010F

-G=100(将MBR记录读入1000H开始的内存中)

-d 11BE 11FF(显示分区数据表

xxxx∶01B0 8001

xxxx∶01C0 01 00 04 03 97 75 1A 00-00 00D6 FF 00 00 00 00

xxxx∶01D0 81 76 05 03DA 23 F0 FF-00 00 B0 46 00 0000 00

xxxx∶01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00

xxxx∶01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55AA

2)保存MBR

-M 1000 11FF 100 (将MBR移动到100H位置)

-R CX

:200(保存200H=512字节)

-N CMBR.DAT

-W (存储MBR信息到文件CMBR.DAT中)

(2)C:盘的DBR备份

1)DBR读取程序

A:>DEBUG

-A 100(编程开始)

xxxx∶0100 MOV AX,201 (AL=读取的扇区数)

xxxx∶0103 MOV BX,1000 (ES:BX=缓冲区地址)

xxxx∶0106 MOV CX,1 (柱面号=CL高2位+CH,扇区号=CL低6位)

xxxx∶0109 MOV DX,0180 (DH=磁头号,DL=0、1软盘;80、81硬盘)

xxxx∶010C INT 13

xxxx∶010E INT 3(程序结束)

xxxx∶010F

-G=100(将DBR记录读入1000H开始的内存中)

2)保存DBR

-M 1000 11FF 100(将DBR移动到100H位置)

-R CX

:200(保存200H=512字节)

-N CDBR.DAT

-W (存储DBR信息到文件CMBR.DAT中)

(3)MBR备份与恢复实例

1)MBR的备份

C:>DEBUG

-A 100(编程开始)

xxxx∶0100 MOV AX,201 (AL=1,读取1扇区)

xxxx∶0103 MOV BX,1000 (缓冲区地址为CS:1000)

xxxx∶0106 MOV CX,1 (柱面号=0,扇区号=1)

xxxx∶0109 MOV DX,80 (第一硬盘0柱面、0磁头)

xxxx∶010C INT 13(调用INT13H读取MBR到1000H开始的内存中)

xxxx∶010E MOV CX,0000

xxxx∶0111 LEA DX,[0127] (指向MBR.DAT的首地址)

xxxx∶0115 MOV AH,  3C

xxxx∶0117 INT 21(打开文件)

xxxx∶0119 MOV CX,  0200

xxxx∶011C MOV BX,  AX

xxxx∶011E MOV AH,  40

xxxx∶0120 INT 21(将MBR信息写入文件MBR.DAT中)

xxxx∶0122 MOV AH,  3E

xxxx∶0124 INT  (关闭文件)

xxxx∶0126 RET (程序结束)

xxxx∶0127 DB 'MBR.DAT' (定义并保存MBR文件名)

xxxx∶012F DB 0

xxxx∶0130

-R CX

:30

-N CMBR.COM  (该程序段取名为CMBR.COM)

-W

-Q

C:>_

程序CMBR.COM就是保存的MBR信息。如果在A:上直接运行:

A:>CNBR

就可以得到当前目录中生成的一个文件名是MBR.DAT的MBR数据文件。

2)恢复MBR

C:>DEBUG

-A 100(编程开始)

xxxx∶0100 MOV AH,  3D

xxxx∶0102 LEA DX [0127](指向MBR.DAT的首地址)

xxxx∶0106 INT 21 (打开文件)

xxxx∶0108 MOV BX, AX

xxxx∶010A MOV CX,0200

xxxx∶010D MOV DX,1000

xxxx∶0110 MOV AH, 3F

xxxx∶0112 INT 21 (读文件内容到1000H开始的内存中)

xxxx∶0114 MOV AH, 3E

xxxx∶0116 INT 21(关闭文件)

xxxx∶0118 MOV AX, 0301

xxxx∶011B MOV BX, 1000

xxxx∶011E MOV CX, 0001

xxxx∶0121 MOV DX, 0080

xxxx∶0124 INT 13(将内存1000H开始的MBR信息写入硬盘)

xxxx∶0126 RET (程序结束)

xxxx∶0127 DB 'MBR.DAT' (定义并保存MBR文件名)

xxxx∶012F DB 0

xxxx∶0130

-R CX

:30

-N BMBR.COM (该程序段取名为BMBR.COM)

-W

-Q

C:>_

将装有数据文件MBR.DAT的软盘A:放入驱动器中,直接运行BMBR.COM程序,就可以将损坏或者丢失的MBR信息恢复。

3.FAT的恢复

硬盘文件分配表庞大。FAT表记录着硬盘数据的存储地址,每一个文件都有一组FAT链指定其存放的簇地址。FAT表的损坏意味着文件内容的丢失。庆幸的是DOS系统本身提供了两个FAT表,如果目前使用的FAT表损坏,可用第二个进行覆盖修复。但由于不同规格的磁盘其FAT表的长度及第二个FAT表的地址也是不固定的,所以修复时必须正确查找其正确位置,一些工具软件如NU等本身具有这样的修复功能,使用也非常方便。

(1)重建硬盘主引导区(0扇区)

该扇区由“主引导记录+分区表+55AA有效标志”组成,通常也可以分别称为第一关键字、第二关键字和第三关键字。主引导记录即第一关键字中包含了一段引导程序,其主要作用是检查分区表是否正确,并且在系统硬件完成自检后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。它是由分区程序(如FDISK等)所产生的。KV3000在此方面具有强大的功能,第一关键字完全可以用KV3000/K来自动重建。

下面只需将第二关键字(分区表)及第三关键字55AA标志手动重建。

1)第二关键字是从0扇区的第446字节处开始的,首先在这里建立“80”,该字节是一个分区的激活标志,表示系统可以引导,该字节为“80”表示此分区为活动分区;“00”表示此分区不可自举,是非活动分区。

2)后面再填入一个字节“01”,表示该分区起始磁头号。

3)后面是“0100”,是一个字,表示该分区起始扇区号及起始柱面号,需要说明的是对于此硬盘,因为C区是小于8GB的,所以这里的起始扇区号只用到了低六位,而其高两位给了起始柱面号作为起始柱面号的高两位,也就是说起始柱面号应为十位。

4)下面一个字节处应填写C盘文件格式标志,如果是FAT32格式且容量小于8GB,此处应为“0B”,大于8GB应为“0C”;FAT16格式为“06”,NTFS为“07”。对于此硬盘,从63扇区向后翻一个扇区即64扇区就发现有FAT表的标志(通常FAT表扇区的前四个字节处为“F8FFFF7F”),再往后翻可分析出是正确的FAT表,所以该分区为FAT16格式(一般FAT32的FAT表是从95扇区开始的),所以在此处填上“06”。

5)在(后面)结论一的第6个字节处填入“FE”,它表示该分区结束磁头号。从硬盘救护箱的顶部可查看到Head=255,表示该硬盘有255个磁头或说是255个面,因为磁头编号是从0开始,所以结束磁头号应为255−1=254,转化成十六进制即为“FE”。

6)再往后应为一个字,写入“7F04”,它表示该分区的结束扇区号和结束柱面号,依然如起始扇区和柱面号一样,结束扇区号只占低六位,结束号占十位。

7)后面的一个双字填写“3F000000”是绝对引导扇区,即63个隐含扇区。硬盘中涉及一种低位在前高位在后的存储数字方式,读出时应对其进行调整。即实际十六进制值为“0000003F”,转换后成为十进制值是63。

8)在结论一的A处也是一个双字,它表示C盘绝对扇区数,具体计算方法可用D区的分区表所在扇区位置减去63扇区,即4192965−63=4192902。再将其转换成十六进制,按低位在前高位在后的存储方式交换得“86FA3F00”。

9)在结论一中的A以后是指向以后分区的链表。“00”这个字节表示下一个分区是不可自举的非活动分区。

10)再往后1个字节也是“00”,它表示下一个分区的起始磁头号。

11)在结论一中的B处是一个字,是指向下一个分区的起始扇区号和柱面号,即把D区分区表的起始扇区和柱面号写过来即可,所以应填入“4105”。

12)在结论一中的C处,“0F”这个字节表示分区类型,通常“0F”代表主DOS分区,“05”代表扩展DOS分区,所以此处应填“0F”。

13)在结论一的D字节处表示下一个分区的结束磁头号,可以从D区的分区表中得出并照抄,即“FE”。

14)在结论一中的E处是一个字,代表下一个分区的结束扇区号和结束柱面号,同样可以从D区的分区表中得出并照抄,即“BF83”。

15)在结论一中的F处为一个双字,是下一个分区的起始扇区位置,按照搜索到的D区分区表所在位置应为4192965,把它转换成十六进制为“003FFAC5”,再按低位在前高位在后的存储格式调整成为“C5FA3F00”。

16)在结论一中的G处也是一个双字,代表扩展分区的总扇区数,即应将搜索到的D区和E区的扇区数相加,再加上两个63(因每个分区都有63个隐含扇区,也应算在内),也就是说6152832+63+6152832+63=12305800,再转换成十六进制并按低位在前高位在后排列成为“7EC5BB00”。

上述为0扇区分区表的所有内容,已经推出,现只需按F1键翻到0扇区,再按F5功能键进入编辑状态,把上述推算出来的数字从446字节开始按顺序输入(结论一):

8001 010006FE 7F043F00

img95

(2)手工重建63扇区

因为前面已经判断出该分区应为FAT16格式,故此处需按FAT16的I/O表格式写入。

1)该扇区的前数3个字节处是一个跳转指令,它可以使启动程序跳转到引导代码,每个硬盘的这几个字节不尽相同,可先写入“EB3C90”。

2)从第4个字节到第11个字节处是一些厂商标识和操作系统的版本号,可暂时不填。

3)(参照结论二)在A的位置是一个字,它表示该硬盘每个扇区包含多少个字节,通常每个扇区都是512字节,把此数转换并调整后即成“0002”。

4)后面的一个字节处为每个簇的扇区数,簇是数据文件在磁盘上存储的一个基本单位,因硬盘大小不一,所以簇所包含的扇区数也不同(它一定是2的整数倍),一般来说,此数可通过查看目录区扇区数的方法来确定,这里应填写“40”。(查找目录区的方法后面会提到,此数为十六进制数)。

5)结论二中的B处为一个字,表示保留扇区(用于引导DOS等)数,此数可以理解为是从I/O表到FAT表1的相隔扇区数。因为该分区的I/O表向后翻1个扇区即64扇区就是FAT1表的头,故此处是“0001”,按低位在前高位在后写入应为“0100”。

6)再往后的一个字节处是文件分配表的份数,因为FAT表比较重要,且一旦被破坏将很难恢复,所以一般都有两份FAT表,FAT表2为FAT表1的备份,所以填写“02”。

7)结论二中的C处代表该硬盘根目录的项数(即所允许的最大目录项数),此处占两个字节,一般填入“0200”。

8)结论二中的D处是磁介质类型说明符,硬盘多为“F8”。

9)结论二中的E处表示每个FAT表所占用的扇区数。该数算法是先用KV3000硬盘救护箱的F4搜索字符串功能,查找“BOOTLOG.TXT”文件,这是C盘根目录下的一个文件(也可以搜索其他文件),即可找到目录区了,然后把这个扇区数记下,为576扇区,因为有两份FAT表,所以该FAT表的扇区数应为(576−64)/2=256,转换成十六进制为“0100H”再交换位以后此处应填入“0001”。

10)结论二中的F处是一个字,表示每磁道(柱面)的扇区数,查看顶部即知Sector=63,也就是说每磁道63个扇区,转换调整为“3F00”。

11)再往后的一个字处为该硬盘磁头数,依然查看顶部显示Head=255,转换成十六进制是“00FFH”,按低位在前高位在后应写为“FF00”。

12)结论二中的G处是双字,表示当前分区前面的隐含扇区数,共有63扇区,故此处应写入“3F000000”。

13)结论二中的H处的双字表示该分区的总扇区数,此数不包含63个隐含扇区,它应该与结论一中的A标志位置处的数字相同,所以照抄过来即“86FA3F00”。现在依然用F5编辑功能将上述数字写入63扇区,并用Ctrl+F10键确认保存(结论二):

img96

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈