格式化磁盘的方法

文档序号:6416248阅读:323来源:国知局
专利名称:格式化磁盘的方法
技术领域
本发明涉及一种格式化磁盘的方法,应用于磁盘的格式化操作。
磁盘(如硬式磁盘、软式磁片)为电脑的周边设备之一,属于记录媒体的一种,用以存储操作系统、应用程序、数字数据等;不论是硬式磁盘或是软式磁片在使用前都必须先经过“启始”,这个启始的过程就称为格式化(Formatting),目前在DOS和Windows环境下,磁盘的格式化方式可由微软公司提供的“format”指令来进行,通过“format”指令把磁盘分成许多个扇区(Sector),以及由扇区所合成的磁轨(Track);再分别对扇区与磁轨予以编号,并将与扇区、磁轨相关的数据写入预先建立的文件配置表(FAT,FileAllocation Table)与文件目录(File Directory)中,请参阅

图1,为一磁盘分割区(Partition)10结构示意图,主要包括有一启动记录11、一第一文件配置表12、一第二文件配置表13、一文件目录14、以及一数据记录区15,其中文件目录是由多个文件目录项141所组成,用以提供与存储于数据记录区15内的数据相关的信息(如文件名称、附加文件名、时间标示…等等)。但是使用“format”指令格式化磁盘是需要很长时间的,以一容量为3G的硬式磁盘为例,对其进行格式化所需的时间是20分钟,虽然微软公司也有提供快速格式指令-“format/q”,但是它也只能在磁盘不需要完全格式化(在之前已有做过格式化)的情况下才能使用,而且当磁盘有下列情况时也不能进行快速格式化的工作1.磁盘经低级格式化(Low level format)后。2.磁盘被重新分割(Partitioning)。3.磁盘中某区域区(Sector)受损。
所以,以微软公司所提供的“format”指令对一磁盘作格式化时存有花费时间耗时的问题;以及在以“format/q”指令对磁盘进行快速格式化时,存在有磁盘本身的格式状态的限制(如磁盘已作低级格式化、或分割已被重新分割…等),也就是说“format/q”指令并不是适用任何的磁盘,仅能对一已经格式化,和未存有受损扇区的磁盘作快速格式化的程序。
本发明的目的在于提供一种能对磁盘(或磁盘分割区)快速格式化的方法,同时更可在磁盘经低级格式化后、重新分割后、以及磁盘中某区扇区受损的情况发生时,仍可对磁盘进行各格式化。
本发明的目的是这样实现的,即提供一种格式化磁盘的方法,应用于一具有一启动记录、一文件配置表、以及一文件目录的磁盘分割区的格式化操作,用以节省格式化的时间,其步骤包括a.以一逻辑运算单元取得与该磁盘分割区相关的一磁盘参数;b.产生一磁盘序号;c.根据该磁盘参数,以该逻辑运算单元取得该文件配置表的一扇区数;d.以该逻辑运算单元将该文件配置表的扇区数、该磁盘序号写入该启动记录中的相应位置;以及e.清除该文件配置表和一文件目录的内容。
本发明还提供一种格式化磁盘的方法,其步骤包括a.以一逻辑运算单元取得与该磁盘相关的一磁盘参数,且该磁盘具有一启动记录、一文件配置表、以及一文件目录;b.产生一磁盘序号;c.根据该磁盘参数,以该逻辑运算单元取得该文件配置表的一扇区数;d.以该逻辑运算单元将该文件配置表的扇区数、该磁盘序号写入该启动记录中的相应位置;以及e.清除该文件配置表和一文件目录的内容。
本发明的技术主要是由BIOS中断的INT 13h读取磁盘格式化所需要的磁盘参数,包括有磁盘(或磁盘分割区)的总扇区数,启动记录的位置,磁盘(或磁盘分割区)类型及磁盘的编号,以由一逻辑运算单元重新规划磁盘的扇区,并将规划后的结果写入原磁盘(或磁盘分割区)的启动记录内相应的位置。首先观察一磁盘的启动记录的结构,是分为五部分,如下1.Jump Instructon (占用3个位组)2.OEN Name (占用8个位组)3.DPB (FAT16与FAT32有一定的差别)4.Bootstrap code (为一段启动程序,以可以使磁盘于格式化后,再复制I0.dos及command.com两文件后能启动,相当于执行format/s的效果)5.以“55aa”结束在以上的结构中,磁盘参数块(DPB,Disc Properties Block)于FAT16与FAT32系统中的结构是不同的,而其他几部分基本上均为固定不变的,请参阅表一和表二,分别列出FAT16与FAT32系统的磁盘参数块的结构,所以本发明的技术重点也就是磁盘参数块中各项内容的计算,由表一和表二中可看出,在FAT16和FAT32系统中磁盘参数块有较大差别,如在FAT16系统的参数块结构中,文件目录项的最大值为0x0002,但在FAT32系统的参数块结构中,文件目录项的最大值则为0。于是在通过BIOS中断的INT 13h读取磁盘格式化所需要的磁盘参数后,由公式(1)或公式(2)以逻辑运算单元计算出每个文件配置表的扇区数(sfat),写入启动记录的相应位置内,并将文件配置表和文件目录的内容清为零,并在每文件配置表(FAT)的起始部分写入medianumber,于是便完成磁盘(或磁盘分割区)格式化的全部程序。再此值得注意的是FAT32系统的磁盘有三个启动记录,第一个包括DPB与FAT16的启动记录近似,第二启动记录中记录有该磁盘分割区Free Space的大小,以簇(Cluster)为单位,其计算公式为Free Space=(stotal-2×sfat-0x20)/8-1,第三个启动记录属于Bootstrap code,不会影响计算结果。sfat=(stotal-0x21)/(1+s×0x100)+1(1)sfat=(stotal-0X23)/(1+8×0x080)+1(2)表一、磁盘参数块的位置在磁盘分割区的第一扇区的0B字元处,FAT16的DPB结构。
>表二、磁盘参数块的位置在磁盘分割区的第一扇区的0B字元处,FAT32的DPB结构。<
下面结合附图,详细说明本发明的实施例,其中图1为磁盘分割区结构示意图;图2为在FAT16中分割区大小与每簇所含区数的对应关系;图3为本发明格式化磁盘的处理流程图。
本发明主要是通过BIOS中断的INT 13h来进行磁盘的格式化工作,所以为了有利于下面的说明,首先就将本发明所使用的INT 13h中断的代码02h、03h、08h的功能,以及所使用的寄存器、相关的程序函数说明如下(1)功能02h读取指定数目的磁盘扇区使用的寄存器AH 02h(cmd)AL 要传送的扇区数(nsectd)ESBX 指向用户磁盘缓冲区的指针(Buffer)CH 磁轨数(Track)CL 扇区数(Sector)DH 磁头数(Head)DL 驱动器号(Drive)在执行后将需要的扇区传入存储区中。其对应的Borland C++语言的函数为biosdisk(0x02,int drive,int head,int track,sector,int nsects,void×buffer);(2)功能03h将指定的存储区域写入设定的磁盘中使用的寄存器AH03h(cmd)AL要传送的扇区数(nsectd)
ESBX 指向用户磁盘缓冲区的指针(Buffer)CH 磁轨数(Track)CL 扇区数(Sector)DH 磁头数(Head)DL 驱动器号(Drive)其对应的Borland C++语言的函数为biosdisk(0x03,int drive,int head,int track,sector,int nsects,void×buffer);(3)功能08h返回指定磁盘驱动器的有关信息使用的寄存器AH 08hDL 驱动器号返回寄存器 CL(低6位)每磁轨的扇区数DH 磁头数其对应的Blorand C++语言的函数为union REGS inreg,outreg;unsigned f,g;inreg.h.ah=8;inreg.h.al=0x80;注磁盘号0x80表示第一块磁盘;0x81表示第二块磁盘,以此类推int86(0x13,&amp;inreg,&amp;outreg);f=(outreg.h.cl&amp;63);g=ooutreg.h.dh+1;请参阅图3,为本发明所揭露的技术,其进行磁盘(或磁盘分割区)的格式化的处理步骤依序如下步骤101,以一逻辑运算单元由INT 13h中断功能02h获得格式化所需要的磁盘参数,包括有一磁盘(或磁盘分割区)的总扇区数,一启动记录的位置,一磁盘(或磁盘分割区)的类型、以及一磁盘的编号;步骤102,以逻辑运算单元调用BIOS中断NIT 13h的功能08h,获得每磁轨的扇区数(f)及磁头数(g);步骤103,随机(Random)产生一磁盘序号(Volume Serial number);步骤104,判断执行对象(如磁盘或磁盘分割区)的文件系统的类型是FAT16还是FAT32,若为FAT16执行步骤105,若为FAT32则执行步骤108;因为FAT16与FAT32的磁盘参数块(DPB,Disc Properties Block)不同,所以需要分别处理;步骤105,取得每个簇的扇区数,这是因为文件系统为FAT16时,每个簇中的扇区数会因分割区增大而以2n的幂形式增长,请参阅图2,为分割区大小16与每个簇所含的扇区数17的对应情形,如图中所示,若磁盘容量是在16MB~127MB之间,则每个簇所含的扇区数为4。
步骤106,根据公式(1),以逻辑运算单元计算文件配置表的扇区数的大小;sfat=(stotal-0x21)/(1+s×0x100)+1 (1)其中sfat为FAT的扇区数,stotal为总扇区数,s为每簇的扇区数。而公式(1)的推算过程如下首先,每个扇区有512个字元;启动记录数为1;根目录扇区数为32;sdata为数据区的扇区数。因此磁盘(或磁盘分割区)中的总扇区数为stotal=1+sfat+32+sdata(1-1)又,FAT中每2个字元指向数据区的一个簇,所以有等式sfat×512/2=sdata/s (1-2)于是(1-2)式经重新整理后,可以表示为sdata=sfat×s×256(1-3)然后将公式(1-3)代回公式(1-1),则可得stotal=1+sfat+32+sfat×s×256 (1-4)最后经整理提出sfat后,即获得sfat=(statal-33)/(1+s×256)+1 (1-5)在公式(1-5)中,由于sfat为整数型,所以最后加上1,以弥补舍掉的小数部分,于是将公式化(1-5)为十六进制后便得如公式(1)所示的计算式步骤107,以一逻辑运算单元调用BIOS中断INT 13h的功能03h,将步骤106计算所得的扇区的内容,写到启动记录中相应的位置后,并跳至步骤110;步骤108,根据公式(2),以逻辑运算单元计算FAT扇区数的大小;sfat=(stotal-0x23)/(1+8×0x080)+1(2)其中,sfat为每FAT的扇区数,stotal为总扇区数,s为每簇的扇区数。而公式(2)的算式推算过程如下
由于目前所格式化的对象为FAT32,所以每4个字元指向一个簇,每个簇含有8个扇区。每个扇区有512个字元;启动记录数FAT16为3;文件目录的扇区数为32;首先根据前述数据可获得一等式sfat×512g=sdata/8 (2-1)经整理后,可另表示为sdata=sfat×8×128 (2-2)将公式(2-2)代入公式(1-1),则可得stotal=3+sfat+32+sfat×8×128 (2-3)提出(2-3)式中的sfat,并重新整理可得sfat=(stotal-35)/(1+8×128)+1 (2-4)同样地,在公式(2-4)中,由于sfat为整数型,所以最后加上1是为了补舍掉的小数部分,于是将(2-4)式化为十六进制后便得到公式(2)的计算式。
步骤110,以公式Free Space=(stotal-2×sfat-0x20)/8-1,计算Free Space的大小;步骤110,以逻辑运算单元调用BIOS中断INT 13h的功能03h,将步骤108计算所得的扇区的内容,分别写入三个启动记录的相应位置中;步骤111,这次把两个文件配置表和文件目录的内容清为零,供共需清t个扇区,其中t=sfat×2+32,并在每个文件配置表(FAT)的开始写入meadia number,其中FAT16为f8ff;而FAT32为f8ffff0f;以及步骤112,结束格式化。
现有一2G的硬盘,经过“FDISK”指令重新分割后,分为两个逻辑分割区,分别为C和D,其中,D盘的大小为1.2G,当以上述的处理流程对D盘进行快速格式化时,其处理过程如下(一)以逻辑运算单元调用BIOS中断INT 13h功能02h获取与磁盘分割区相关的信息;用函数biosdisk(2,0x80,0,0,1,1,buffer)可得到以下数据;(1)磁盘分割区的总扇区数0x259afl(2)起始的磁头号0x01(3)起始的柱面号0x96(4)起始的扇区号0x01
(5)硬盘序号08x0(即第一块硬盘)(6)FAT类型0x0b(即FAT32)(二)以逻辑运算单元调用BIOS中断INT 13h功能的08h可得到每磁轨所含扇区数(f)和磁头数(g)。
union REGS inreg,outreg;unsigned f,g;inreg.h.ah=8;inreg.h.al=0x80;in86(0x13,&amp;inreg,&amp;outreg);f=(outreg.h.cl&amp;63);g=ooutreg.h.dh+1;得到f=0x3F,G=0xF0;(三)用函数random( )随机产生磁盘序号(四)以逻辑运算单元计算文件配置表的扇区数sfat=(0x259af1-0x21)/(1+8×0x80)+1=0x965(五)计算Free SpaceFree Spage=(0x259af1-2×0x965-0x20)/8-1=0x4b101(六)以逻辑运算单元调用BIOS中断INT 13h功能03h将计算得到的启动记录内容(共3个)写到0x01磁头、0x96柱面、0x01扇区处。
(七)利用循环把2个文件配置表和文件目录的内容清为零,并在每个文件配置表起始处写入f8ffff0f(media number)。
共需清t个扇区,其中t=sfat×2+32=4842以上所述仅为本发明的优选实施例,并不限于以上述的硬体的装置实施,举凡任何熟悉此项技术人员在本发明的领域内所做的任何修饰,具有同等功效的,均应含盖于附上的权利要求范围内。
本发明方法的优点在于1.本发明通过调用BIOS的中断指令进行计算,重新配置磁盘的启动区、文件配置表(FAT)、以及根目录区的所有内容和位置,可节省大量的格式化时间。
2.本发明适用于FAT16和FAT32两种类型的分割区表。
3.本发明对于已被低级格式化、重新分割、以及磁盘中某区域受损的无法以传统“format/q”指令格式化的磁盘,仍可对其进行快速格式化。
权利要求
1.一种格式化磁盘的方法,应用于一具有一启动记录、一文件配置表、以及一文件目录的磁盘分割区的格式化操作,用以节省格式化的时间,其特征在于,它的步骤包括a.以一逻辑运算单元取得与该磁盘分割区相关的一磁盘参数;b.产生一磁盘序号;c.根据该磁盘参数,以该逻辑运算单元取得该文件配置表的一扇区数;d.以该逻辑运算单元将该文件配置表的扇区数、该磁盘序号写入该启动记录中的相应位置;以及e.清除该文件配置表和一文件目录的内容。
2.如权利要求1所述格式化磁盘的方法,其特征在于,该步骤a是以该逻辑运算单元调用BIOS中断INT 13h取得该磁盘参数。
3.如权利要求1所述格式化磁盘的方法,其特征在于,该磁盘参数包括有该磁盘分割区的一总扇区数、一启动记录位置,一该磁盘分割区的类型、以及一该磁盘分割区的编号。
4.如权利要求3所述格式化磁盘的方法,其特征在于,该类型可为FAT16。
5.如权利要求3所述格式化磁盘的方法,其特征在于,该类型可为FAT32。
6.如权利要求1所述格式化磁盘的方法,其特征在于,该磁盘序号是以随机(Random)的方式产生。
7.如权利要求1所述格式化磁盘的方法,其特征在于,该步骤e将该文件配置表和该文件目录的内容清为零。
8.一种格式化磁盘的方法,其特征在于,它的步骤包括a.以一逻辑运算单元取得与该磁盘相关的一磁盘参数,且该磁盘具有一启动记录、一文件配置表、以及一文件目录;b.产生一磁盘序号;c.根据该磁盘参数,以该逻辑运算单元取得该文件配置表的一扇区数;d.以该逻辑运算单元将该文件配置表的扇区数、该磁盘序号写入该启动记录中的相应位置;以及e.清除该文件配置表和一文件目录的内容。
9.如权利要求8所述格式化磁盘的方法,其特征在于,该步骤a是以该逻辑运算单元调用BIOS中断INT 13h取得该磁盘参数。
10.如权利要求8所述格式化磁盘的方法,其特征在于,该磁盘参数包括有该磁盘的一总扇区数、一启动记录位置,一该磁盘的类型、以及一该磁盘的编号。
11.如权利要求8所述格式化磁盘的方法,其特征在于,该磁盘序号是以随机(Random)的方式所产生的。
12.如权利要求8所述格式化磁盘的方法,其特征在于,该步骤e是将该文件配置表和该文件目录的内容清为零。
13.如权利要求8所述格式化磁盘的方法,其特征在于,该磁盘为一软式磁盘。
全文摘要
一种格式化磁盘的方法,用于磁盘(或磁盘分割区)的格式化操作,可节省格式化时间,本发明是通过调用BIOS的中断指令,取得磁盘(或磁盘分割区)的一总扇区数、一启动记录的位置以及一类型等与磁盘(或磁盘分割区)相关的信息,再根据磁盘(或磁盘分割区)的类型(FAT16或FAT32)以一逻辑运算单元重新规划每个文件配置表的扇区数,然后写入启动记录的相应位置内,并将文件配置表和文件目录和内容清为零,于是就完成磁盘的格式化程序。
文档编号G06F9/44GK1266224SQ9910248
公开日2000年9月13日 申请日期1999年3月4日 优先权日1999年3月4日
发明者林光信, 陈玄同, 刘淼 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1