1. 前言
近日听说有个 PowerShadow 的软件挺流行的,于是我就去下了一个来试用看看。官方网站有注册码,注册之后就是正式版了。
其实 PowerShadow 这样的类似硬盘保护卡这样的软件在几年前我就用过,具体叫什么名字就忘了。当时还是在 Win98 下用的。传说 PowerShadow 的原理是先复制一份临时的 FAT 表,让系统读写文件的时候使用这个临时的 FAT 表来寻找文件。这样,即便是把某个文件删掉了(Windows 删除文件只是在 FAT 表中给某文件打个删除标记),但具体的数据还存在,而且真正的 FAT 表还在。这样就仍然可以通过原来的 FAT 表来读写原来的文件了。而且,FAT 也不大,复制等操作也快。
但是,这样好像又有些问题了。对删除、增加操作的恢复固然容易,但是如果是改写操作呢?临时的 FAT 表指向的数据如果被改动了,再怎么改动 FAT 也没有用吧。这样的话,为了使改写的操作也能恢复,可能 PowerShadow 在当系统要改写原有的文件内容的时候,先把请求存入的文件保存在空闲的地方,这样就不会改动到原始的数据。为了验证 PowerShadow 是否是这样做的,我做了以下实验。
2.实验环境
PowerShadow 2.6繁体中文版,WinXP,受PowerShadow保护的C盘容量2GB
3. 实验过程
C盘安装了 WinXP,占用了大约 1GB 的空间。目前硬盘中还剩下 1GB 左右的空闲空间。
为了验证是否当系统修改了某个文件然后请求保存回去的时候,PowerShadow 会另外把整个文件保存到其他空闲的磁盘位置,然后把临时的 FAT 表中的相关内容修改指向他。在未用 PowerShadow 保护的模式中,我将两个 450MB 的文件保存到 C 盘(此时剩余 100MB)。然后再拿 4 个 20MB 和一个 10MB 的文件放到 C 盘(此时剩余 10MB)。
此时,C 盘剩余 10MB 的空闲空间。转入 PowerShadow 保护。
这时,把一个 450MB 的文件删除,就空闲出 450MB 以上的空间。在平时的正常情况下,空闲出的空间可以保存其他的数据。但是,在 PowerShadow 的保护中,他必须保护刚刚删除的那个 450MB 的文件的数据不被修改。
现在,复制一个小于 450MB 的文件到 C 盘。系统给出“磁盘已满”的提示,但是又显示 C 盘确实剩余足够的空闲空间。
重新启动回到剩余 10MB 的状态。使用 UltraEditor 打开一个 20MB 的文件来编辑,然后保存。如果在非保护状态下,保存的数据将覆盖原始的数据。这样,编辑过的这个文件覆盖原来的那个 20MB 的空间,不会引起任何错误。但是在 PowerShadow 的保护中,他要保护原来的数据不被覆盖,只能将编辑过的这 20MB 的数据保存在其他空闲的空间里。但是此时剩余的空闲空间已经不足 20MB,因此系统也给出“磁盘已满”、“不能写入”之类的提示。
4. 实验结论
根据以上的实验,我猜想,当在有 PowerShadow 保护的分区中修改某个文件时,PowerShadow 把修改好的将保存的文件保存到空闲空间中,然后把临时的 FAT 中相关内容指向新的位置。同时还需要标记原来的数据的位置,将他保护起来不允许写入。
这样的话,在如果 C 盘被保护的情况下。如果程序经常更新(读出来,更改些数据再写回去)一些大体积的文件的话,这样就相当于要反复的把这些大文件复制多以个备份。比如(在 PowerShadow 保护中),如果在 C 盘有一个 500MB 的 pagefile.sys 文件,系统总是要反复读写 pagefile.sys 的。那么 PowerShadow 就会额外复制一个 500MB 的 pagefile.sys 文件,同时又要保证原来那个 pagefile.sys 的数据不受改动。这样势必就浪费了 500MB 的空间。
因此,在 PowerShadow 保护的分区中就不应该放置那些经常被修改的文件,比如 pagefile.sys 等。