用CHKDSK/F捡回丢失的磁盘空间

Author: 北京 叶文彪 何樱樱 Date: 1996-05-03

        为什么会可能发生磁盘空间的丢失呢?这还得从文件分配表FAT说起。
        当DOS向磁盘写文件时,它将文件内容复制到文件区的未用簇中。这就需要了解相应簇的使用状况。在文件分配表FAT中,每个登记项对应了文件区中的一个族。如果FAT某一项为0,则指示相应簇是未用的,否则,DOS认为该簇被某文件使用或由于某种原因不能用于文件的存储。
        磁盘上存储的每一个文件都有相应的目录项,记录文件名、文件长等信息。为了解定文件在磁盘上的位置,DOS将文件的起始簇号记录在目录项的特定区域,然后把分配给本文件的每一个簇号记在前一个簇号的FAT登记项中,这样就建立了簇链,即文件分配链。分配链的最后标记一个特殊值,以示链的结束。
        从磁盘删除文件时,DOS在磁盘文件区不做任何动作,只是把文件目录项标识为未用,并在FAT相应位置标识为0。这样,磁盘空间就可被以后的文件使用了。如果簇没有在任何文件分配链中出现,但在相应文件分配表FAT中又作了非0的标记。这时该簇既没有被任何文件使用,又不能被新文件所征用。这就发生了簇的“丢失”。簇的“丢失”导致磁盘空间的丢失。
        丢失簇通常发生在程序运行中非正常终止、死机、非正常关机,如断电、热启动等,也可能是由于程序的错误或出现故障的盘控制器造成的。
        用CHKDSK/F命令可以捡回“丢失”的簇。执行该命令,CHKDSK在搜索所有文件的分配链时,为所有被引用的簇建立一个列表,这些簇是实际被征用的。然后把这个列表与FAT表中的定位簇表作比较,如果有的簇在FAT表中被标记为非0,却又不属于任何文件,CHKDSK就把它们作为丢失的簇加以报告。
        具体操作过程如下:
        在DOS下执行CHKDSK/F。经过对磁盘的分析,如果发现有簇丢失,程序向你报告有若干簇丢失,并询问是否把它们转化为文件:
        112 lost allocation units found in 6 chains.
        Convert lost chains to files(Y/N)?
        如果回答“N”,CHKDSK只把这些丢失的簇在FAT表中标识为未用。如果回答“Y”,CHKDSK则把丢失的簇链转化为磁盘根目录下的文件,并依次命名为FILE0000.CHK,FILE00001.CHK,......。可以用TYPE命令或编辑器打开这些文件来看。或许您还会有意外的发现呢。如果生成的文件太多,程序提示您:
        Insufficient room in root directory
        Erase file in root and repeat CHKDSK
        意思是根目录已经饱和,删除根目录下的(没用)文件,再次执行CHKDSK(注意还要带上参数/F)。
        在确定这些生成的文件没有价值后,就可以把它们删除,丢掉的磁盘空间就找回来了。