长文件名使数据恢复变得复杂

2010-08-28 10:49:01来源:西部e网作者:

    在这个系列教程中的的前一篇,我论述了硬盘如何使用簇(cluster)来存储文件。希望大家现在能清楚地明白如何计算一个文件要占用多少个簇,因为当我们实际上要开始讨论数据恢复之前,来计算这个文件所用簇的数目是非常必要的。

  在我们开始进行数据恢复之前,我需要来讨论一下另外一个概念:长文件名。在之前的文章我解释过,当你删除一个文件时,操作系统用sigma字符来替换文件名的第一个字符(在非常老的系统,)。如果我们仍然使用老的八点三(eight dot three)的命名习惯,那么你真的需要知道一些文件名方面的知识。然而,长文件名使事情变得复杂,而理解长文件名如何存放到磁盘里面非常重要。

  为什么长文件名是这么大一个问题呢?因为FAT和FAT32文件系统并不是原本支持长文件名。FAT文件系统从1982年开始应用,在那之前,仅仅是支持八点三(eight dot three)命名规则。当在1995年Windows 95发布之后,FAT文件系统仍然是Windows系统唯一可用的文件系统。(NTFS文件系统存在,但是并不支持Windows 95)。

  微软想让Windows 95支持长文件名,所以提出一项技术来更新FAT文件系统,这样多目录能够用来相互联合用来存储长文件名。微软Win95 OSR2,引进了FAT32文件系统,尽管FAT32解决了FAT格式的好多局限,但是这仅仅是在原来文件系统上的增补,而不是一个全新的文件系统。

  为了明白这个问题,让我们研究一下文件名如何存放到磁盘中。当Windows存储一个长文件名到FAT或者FAT32分区,必须允许在Windows之外仍然认可这个文件系统。这听起来似乎有点奇怪。但是记住,不管从事软件销售的人怎么告诉你,所有版本的Windows(除了基于NT核心的)都运行在DOS之上。这意味着在这些Windows操作系统(3.x, 95, 98 and ME),实际的操作系统是DOS。技术上说,Windows只是一个平台。因此,文件写到磁盘内必须能够被DOS认出,尽管一些版本的DOS并不是支持长文件名。

  要继续向下兼容性,使用长文件名的文件要用DOS别名(DOS alias)——一个改变的、完全遵从DOS命名规范的文件名。这样做很有必要,不仅因为文件名的长度,还因为长文件名通常并不被FAT或者FAT32文件系统允许。

  因为这些局限性。直接把长文件名存到FAT或者FAT32文件系统内不可能了。当你存放一个长文件名文件到这些种类的文件系统内,这个文件事实上被存放到DOS别名(DOS alias)下了。例如我存放一个名为“Briens File.txt”的文件到FAT文件系统中。这个文件事实上被做为BRIENS~1.TXT存放。

  让我们进一步了解DOS别名是如何工作的。你可能在举例中注意到了“~”被插入到经常出现空格的位置。这仅仅是一个偶然,“~”并不是用来替换空格的。事实上,DOS别名是创建来表达文件名的前六个字符,然后添加“~”,再接着是数字。

  采用数字的原因是因为理论上多个文件可能被分割成同一个DOS别名。例如,名为"Brien's File"和"Brien's Document"的文件可能同时被设置成同一DOS别名,因为头六个字母都是一样的。为了避免这种情况的发生,DOS别名采用数字来区分。如果两个文件文件都在磁盘上,那么DOS别名将为BRIEN~1 和 BRIEN~2。

好了,长文件名的文件存放在磁盘上使用的是他们的DOS别名,而不是他们自己的长名字,那么剩下的文件名部分哪儿去了呢?如我之前提及,Windows能够通过使用多目录形式保存长文件名到磁盘内。任何时候一个长文件名文件存放到磁盘中,文件本身使用DOS别名做为文件名被保存。然而,同时Windows写入另外一个文件到磁盘内,用来保存文件的长文件名。

  如果你通过磁盘编辑器(Disk Editor)来查看长文件名,你能看到它事实上是一个文件。如果你通过磁盘编辑器查看一个磁盘的文件分配表,你能看到标识栏(ID column)中的条目和目录表项( directory entry)中的对象类型(Object Type)一样。通常,对象类型(Object Type)被置入到文件或者清除。但是在这个长文件的例子中。标识栏被设置到LFN(长文件名),标志着这个条目是长文件名的一部分,而不是真实的文件。

  长文件名目录表项(directory entry)本身能够包含13个字符。一个标准的DOS文件名能够包含12个字符。这里是3个字符,一个小数点还有一个3字符的文件扩展名。长文件名使用所有12个位置。加上一个额外用来表明它们自己特色的字符。我不知道究竟这个13字符从何而来,如果你知道,可以给我发Email。

  最后一个关于长文件名的问题是有时候两个目录表项(directory entry)有时候并不能充分存放长文件名。例如,我现在使用的文件名是“Data Recovery and Long File Names.doc”,如果我把这个文件存放到FAT或者FAT32卷内,文件的DOS别名将是DATA R~1.DOC(这种格式在Windows内显得很简洁)。然而,这个长文件名的长度比这种文件系统的13字符的限制要长。所以多目录表项(directory entry)将被创建。下面的列表包含事实上将被写入磁盘的文件分配表内的表项。

  DATA R~1.DOC

      Data Recovery

  and Long Fil

  e Names.doc

  当你通过此磁盘编辑器来浏览磁盘的文件分配表时,你能看到这些目录表项。如果你通过DOS来查看磁盘目录,你也能看到长文件名,或者你可能看到文件别名,取决于你使用的DOS的版本。如果你通过Windows浏览这些目录。你可能看到长文件名。但是如果你使用磁盘编辑器,你可能看到像我例子中的那样,就是目录表项实际上在磁盘中的样子。

  在上面的例子里面,我以这种方式来设计这个长文件名目录来使其容易阅读。在实际的工作中,长文件名目录并不需要按照这种方式,事实上,它们经常按照相反的顺序列出。它们看起来像下面的一样。

  e Names.doc

  and Long Fil

  Data Recovery

  DATA R~1.DOC

  现在你知道如何在一个文件分配表中读出目录了。现在是时候进行基于磁盘编辑器的文件备份了。下一篇中我们将介绍给大家。

关键词:数据

赞助商链接: