Archive for August, 2006

磁盘的逻辑结构

2006.08.18

  前几天有人问我一些和文件系统有关的问题,我干脆把相关的东西整理一下写在这里吧。如果你也有些类似的问题(文件误删了怎么办啊,为什么有时候移动文件很快有时候很慢啊),不妨看看,但是要是你曾经稍微研究过这个问题,就没有必要看了。为了尽量地写得简单易懂,可能会有点罗嗦,大家多多包涵。如果有错误,也请大家指正。

  第一个问题,我的文件被删除了,还可以找回来吗?

  有一次有人问这个问题,很多人出了很多注意,FinalData这些专业的软件都用上了,还是没有找到,最后一看在回收站里面……

  来说一下回收站。回收站是windows里一个特殊的系统文件夹,默认情况下,你删除的文件都会被移动到这个文件夹里面,方便以后恢复。稍微严格地来说,在资源管理器里面选中一个文件按删除键的这个动作不能叫删除,因为这个过程中没有删除任何东西,只是文件被放到回收站这个文件夹里去了。顺便说到,回收站有个小bug,默认情况下,回收站占用的最大磁盘空间是每个分区的10%(当然你也可以改),如果你的D盘有10GB,你把一个4GB(>10GB*10%)的文件(典型的如一张DVD的ISO镜像)移动到回收站,系统会询问,这个文件太大,回收站放不下,是否直接删除?这没有问题。但是在同样的这个10GB*10%的回收站的情况下,先把一个700MB(<10GB*10%)的文件(典型的如一个DVD Rip的AVI或者一张CD的ISO镜像)放到回收站,没有问题。当你在删除另一个同样大小的文件时(700MB*2>10GB*10%),因为回收站不够大了,前一个文件就自动被系统逻辑删除了,而这个删除动作系统没有通知过你。这不能不说是一个bug,但是好像没有听到有人抱怨过。

  如果你清空了回收站或者直接对一个文件Shift + Delete了呢?那么这个文件就被逻辑删除了。我们可以把一个磁盘分区想象成一个图书馆,磁盘里的文件就像图书馆里的书。任何一个图书馆都会有一个图书列表标明每本书的逻辑位置(比如属于物理学的书还是社会学的书)和相应的物理位置(书放在哪个架上),磁盘里也有一个文件列表,标明了每个文件的逻辑位置(属于哪个文件夹)和对应的物理位置(在磁盘的哪个或者哪些扇区上),这样你要找一个文件的时候只用看列表,就会比较快。当你把一个文件放到回收站的时候,相当于在图书列表的相应图书名字旁边做了个记号,表示这本书我不想要了,准备烧掉。如果你又反悔了,觉得这本书有用,那么只要把这个记号擦掉就可以了。清空回收站的动作相当于把图书列表上的图书名字擦掉了,这个动作又叫逻辑删除,这样一个人要来这个图书馆找书,图书列表上就找不到了,不过书还在书架上,没有动过。但是如果这个时候有新书进来情况就不一样了,管理员会去看图书列表,随便找个列表上看上去是空的书架,把新书搬过去。如果那个书架确实是空的当然就没事,如果里面有书,管理员会认为既然列表上已经删掉了,那么这些书就是垃圾,于是把这些旧书烧掉,把新书放到架子上。烧书的动作就是一般说的物理删除,在磁盘里是用新的数据覆盖了旧的。

  在一部分书被从列表上删除但是还没有新书进来的这段时间里,你要去找一本书,会很慢,但是还是找得到的。有很多软件来执行这个任务,最有名的就是FinalData了。它无视图书列表,亲自跑到书架上一本一本地翻,只要这本书还没有烧掉,它就能把书找出来。如果有新书进来了,原来的书能不能找到就要看人品了,因为管理员烧掉哪本不要的书在读者看来完全是随机的。

  所以,如果你刚刚清空了回收站,请不要在那个磁盘分区写入文件,赶快到别的分区装个数据恢复软件,找回文件的机会还是很大的。一个小经验就是不要在C盘放重要文件,因为很多临时文件都在C盘,读写操作十分频繁,文件一旦误删,恢复的概率比别的盘小得多。另外,如果windows出了问题无法启动,通常的办法是格式化C盘然后重新安装系统,这样C盘里的文件都难以找回了。

  第二个问题,我不小心覆盖了一个文件,还有机会找回来吗?

  一般的答案是节哀吧。还是用上面那个比方,覆盖的动作相当于告诉管理员,我买了一本新的新华字典,老版本的不要了。管理员就会把老版本的烧掉,换上新版本的(哪怕旁边就有空位,管理员也不会把老版本的暂时放到旁边去)。所以另一个小经验就是,重要文件一定要记得备份。如果是word文档,可以使用它的“版本”功能,这样就不会保存了错误的文件版本了。Windows 2003里面有一个叫做“卷影复制”的功能能保留被覆盖的文件,当然这应该是以磁盘空间的消耗为代价的。

  说远一点,被烧掉的书还有残渣,从这些烧成的灰里面恢复原来的书也不是完全不可能。听说美国国家安全局的技术能把覆盖了七次的文件恢复出来,这就相当于说把一本书烧了七次还能读。太神奇了。但是这个价钱……除了国家安全理由,恐怕没有人出得起。并且,这是硬盘的物理构造的问题,和今天讲的逻辑结构已经没有什么关系了。

  第三个问题,为什么有时候移动文件很快,有时候很慢?

  通常一台电脑有几个磁盘分区,比如C盘、D盘。不管它们是不是在一块硬盘上,逻辑上是没有区别的。这就相当于你有好几个图书馆,C馆、D馆等等。在同一个分区内移动文件的过程实际上仅仅是修改了图书列表,而书还是在它原来的位置没有动过,这个过程当然快。要把书从C馆搬到D馆就比较麻烦了,过程是这样的:管理员从C馆把要搬的书抄一份拿到D馆去(复制),然后把这些书从C馆的图书列表里面删掉(逻辑删除,但是还没有烧掉)。要抄一份当然慢了。要知道,任何人都是懒的,windows也不例外。所以你用鼠标把一个文件从C盘拖动到D盘,windows理解为复制(节省了删除这个动作);而在同一个盘里面拖动文件,windows理解为移动。

  第四个问题,为什么一张普通CD里面可以装下2GB的文件?

  有些windows或者office的安装光盘是普通的CD-ROM,把里面的文件复制(注意是直接复制,并没有解压缩)到硬盘里去一看,一共有一到两个GB。一般的CD容量只有700MB啊,即使超刻也决不会超过1GB。这是怎么回事呢?知道了文件列表这个概念以后,这个问题就很好理解了。这些安装光盘包含windows的很多版本,比如WINXP的home、pro、mce等等,可以想象,它们的大部分文件是一样的,差别相对较小。假如一个文件在三个文件夹里面都出现过,我们只需要在图书列表里面把这本书登记三次就可以了,比如一本名为《生物物理化学》的书可以同时归在生物、物理、化学三个种类里(这种分法显然是不科学的,我只是举个例子。但是这本书是我真的看到过的)。那么在不需要购进一本书的情况下,你的图书馆藏书量在读者看来可以瞬间增加几倍。

其实不只是光盘,你的硬盘也可以这样。如果你的硬盘分区是NTFS格式,那么你可以用一种叫做“硬连接”的东西。这种东西不是很实用,windows至今也没有给它做一个图形界面。只有在同一个分区里的几个文件夹都需要同一个文件的时候才有一点小用处,比如有几个程序都使用的IP地址数据库。你只需要在一个文件夹里面放一个这个文件,然后在其他文件夹里面做硬连接,这样程序就都能使用这个文件了。与直接复制粘贴的区别是,如果这个文件很大,这个操作会显得比较快,因为只是改动了文件列表;如果需要n个相同的文件,你就节省了n-1倍文件大小的磁盘空间;你只需要改动里面任意一个文件,其他的文件会同步更新。和快捷方式不同,如果快捷方式指向的文件被删除了,那么这个快捷方式也就没有用了。但是各个硬连接是没有区别的,只有你删除了一个文件的所有硬连接,这个文件占用的磁盘空间才会被系统标记为空,也就是逻辑删除。实际上,NTFS最多支持同一个文件有1024个硬连接,也就是说你的图书馆不能无限制地膨胀。

奠20,000,000,000

2006.08.18

  20,000,000,000是个什么数字?如果是人口,它是现在全世界人口的3倍,中国人口的15倍;如果是秒,这个数字是600多年;如果是人民币,我敢说,绝大部分看这篇文章的人1,000辈子也赚不到这么多钱。

  还好,它的单位是字节。

  6月26号上午,我出门的时候照例按下了电脑上的休眠键,但是“休眠中”的滚动条在半路停住了,十几分钟过去了纹丝不动。我没有耐心了,按住了电源按钮,直到它断电。三年了,这台电脑也算经历过大大小小各种各样的磨难,都被我化险为夷,最后变成虚惊一场。我没有想到这次会成为例外。晚上开机的时候显示器上硕大而丑陋的英文字母告诉我:BIOS找不到硬盘了。第二天,维修的人告诉我,这块硬盘的磁头坏了,不能用了,数据恢复也会很贵,可能要七八千,而且也不见得能恢复成功。我只好新买了一块硬盘装上,那20GB的数据就暂时地——也可能是永远地与我告别了。

  虽然我没什么钱,但是我也要说,相对于那些数据,一块硬盘的价钱实在是微不足道的。好在原来那块硬盘只是磁头坏了,数据都还在盘片上,只是很难读出来而已。哪一天有钱了,觉得七八千算不得什么的时候,去把它都恢复出来。

  还好最重要的数据我在外接的USB硬盘上做了备份,损失就减小了许多。

  其实说起来,那20GB的数据是些什么呢?很多是程序文件,到处都可以弄到,没关系。那些自己写的文章什么的大部分备份过了。只是有些不知道从哪里弄来的小文件要用的时候会有点麻烦。还有很多东西,可能放在那里我一辈子也不会去看,但是我知道它们在那里,我就安心,而如果我不知道他们到哪里去了,就会有一种很失落的感觉。于是我安慰自己,那些数据不是还好好地躺在那块硬盘的盘片上吗?于是心情就好多了。

  一台电脑,最重要的部件是什么?就是硬盘。因为硬盘是唯一能区别你的电脑和别人的电脑的部分,就像一个人最重要的部分是思想一样。你可以缺胳膊断腿,甚至就像霍金那样,但是只要有思想,你就还活着,而且一样可以活得很好。我的电脑已经死了,现在我手里的,是另外一台电脑。

  吸取教训,我要是有了一个可以放台式机的地方,一定会去买一台台式电脑。配制不要很高,但是硬盘一定要可靠,买三块320GB或者160GB的硬盘组一个RAID5,再加一块80GB或者40GB的硬盘专门放临时文件。另外买一台舒服的显示器就可以了,其他的配置能用就行。为什么要配这样的硬盘?就像人可以住在很穷的地方,但是一定要住在安全的地方,为了两个字:安心。

  最后来祭奠一下我逝去的那块硬盘:东芝2.5”,20GB,4200rpm,0MB缓存。

我回来了

2006.08.18

  我回来了,这是一片属于我的地方,我可能会暂时离开,但是不可能太久。
  似乎是一转眼,已经有80天没有写东西了。这80天里发生了很多事情,我不想再去思考这些事情到底是对还是错,既然已经发生了,就让它继续吧。但是请相信我,我会努力地让事情向好的方向变化。
  比如现在,比如将来。
  我回来了,亲爱的。

3B.24.17.A6