我很早就知道,在windows下删除文件,其实不是真的删除,只是把那个文件的某个属性从0标识成1,你看不见而已。这也是为什么被删除的数据,可以恢复的道理。
上次给我解析这个删除原理的老师,说起他的经历,他的论文,当时在硬盘里,给同学误删除了,结果他同学很紧张,马上又创建了一个同样名字的文档,这样就彻底导致他怎么都无法把论文恢复回来了。
关于这个软件的使用,
我也没有搞明白别的参数,下面的资料,我也没有看明白
########################
简介
Windows NT/2000 (Win2K) 的 C2 遵从性的一个功能是实施对象重用保护。这意味着当应用程序分配文件空间或虚拟内存时,它将无法查看以前存储在 Windows NT/2K 为其分配的资源中的数据。Windows NT 会首先用零填充内存或将存放文件的磁盘扇区置零,然后再将这两种类型资源中的任意一种提供给应用程序。但是,对象重用不要求将文件在删除前占用的空间置零。这是因为 Windows NT/2K 在设计时假定由操作系统控制对系统资源的访问。不过,当操作系统处于非活动状态时,可以使用原始磁盘编辑程序和恢复工具查看和恢复操作系统已取消分配的数据。即使使用 Win2K 的加密文件系统 (EFS) 加密文件,文件的原始未加密文件数据在创建该文件的新的加密版本后仍然保留在磁盘上。
要确保使用 EFS 加密的文件以及已删除的文件无法恢复,唯一的方法是使用安全删除应用程序。安全删除应用程序使用能够使磁盘数据无法恢复的技术,甚至使用可以读取磁性媒体中揭示弱删除文件的模式的恢复技术来覆盖已删除文件的磁盘数据。SDelete(安全删除)就是这样一个应用程序。您既可以使 SDelete 安全地删除现有文件,也可以安全地擦除存在于磁盘的未分配部分中的任意文件数据(包括您已经删除或加密的文件)。SDelete 实施了美国国防部资料摧毁标准 (Clearing and Sanitizing Standard) DOD 5220.22-M,以使您确信在使用 SDelete 删除文件数据后,这些数据将彻底消失。请注意,SDelete 可以安全地删除文件数据,而不是位于可用磁盘空间中的文件名。
SDelete 可在 Windows 95、98、NT 4.0 和 Win2K 上运行。
SDelete 的用法
SDelete 是一个带有许多选项的命令行实用工具。按照任何给定用法,都可以使用它删除一个或多个文件和/或目录,或者清理逻辑磁盘上的可用空间。SDelete 将通配符接受为目录或文件说明符的一部分。
用法:sdelete [-p passes] [-s] [-q] <file or directory>
sdelete [-p passes] -z [drive letter]
-p passes
指定覆盖操作的执行遍数
-s
对子目录执行递归操作
-q
不显示错误(静默模式)
-z
清理可用空间
SDelete 的工作原理
安全地删除没有任何特殊属性的文件相对而言简单而直接:安全删除程序使用安全删除模式简单地覆盖文件。较为复杂的是安全地删除 Windows NT/2K 压缩、加密和稀疏文件,以及安全地清理磁盘可用空间。
压缩、加密和稀疏文件由 NTFS 以 16 群集块方式管理。如果某个程序向此类文件的现有部分写入数据,则 NTFS 会分配磁盘上的新空间来存储新数据,并在写入新数据后取消分配该文件先前占用的群集。NTFS 采取此保守方法的原因与数据完整性有关,而且对于压缩和稀疏文件,这样可以在出现新分配大于现有分配(新的压缩数据大于旧的压缩数据)的情况下正确应对。因此,覆盖此类文件时将不能成功地从磁盘中删除文件的内容。
为了处理上述类型的文件,SDelete 依赖碎片整理 API。利用碎片整理 API,SDelete 可以精确地判断磁盘中哪些群集由属于压缩、稀疏和加密文件的数据占用。SDelete 在了解哪些群集包含该文件的数据后,就可以打开磁盘进行原始访问并覆盖这些群集。
可用空间的清理问题提出了另一项挑战。由于 FAT 和 NTFS 没有为应用程序提供直接寻址可用空间的方法,因此 SDelete 具有以下两个选择之一。第一个选择是它可以像处理压缩、稀疏和加密文件那样,打开磁盘以进行原始访问并覆盖可用空间。此方法面临一个很大的问题:即使 SDelete 被编码为完全能够计算 NTFS 和 FAT 驱动器的可用空间部分(这并非微不足道),它也会遭遇与系统上发生的活动文件操作发生冲突的风险。例如,假设 SDelete 确定某个群集可用,而就在此时文件系统驱动程序(FAT、NTFS)决定为另一应用程序正在修改的文件分配该群集。文件系统驱动程序会将新数据写入该群集,然后 SDelete 跟随而来并覆盖了刚刚写入的数据:该文件的新数据丢失了。如果为文件系统元数据分配该群集,则问题会更糟,因为 SDelete 会破坏文件系统的磁盘结构。
第二种方法即 SDelete 所采用的方法是间接覆盖可用空间。首先,SDelete 分配它所能分配的最大文件。SDelete 使用非缓存文件 I/O 完成此任务,这样就不会将 NT 文件系统缓存的内容扔掉,也不会用与 SDelete 的占用大量空间的文件相关联的无用数据替代这些内容。因为非缓存文件 I/O 必须是扇区(512 字节)对齐的,所以可能存在一些不能为 SDelete 文件分配的剩余空间(即使 SDelete 无法进一步扩大该文件)。为了获取任何剩余空间,SDelete 接下来会分配它能够分配的最大缓存文件。对于这两个文件,SDelete 都执行安全覆盖,并且确保所有以前可用的磁盘空间都被安全地清理。
在 NTFS 驱动器上,分配和覆盖这两个文件并非 SDelete 的全部工作。SDelete 还必须用适合 MFT 记录的文件填充 NTFS MFT(主文件表)的任何现有可用部分。一个 MFT 记录的大小通常为 1KB,而磁盘上的每个文件或目录都至少需要一个 MFT 记录。小文件都整个存储在各自的 MFT 记录中,而对于不适合一个记录的文件,则会为其分配 MFT 外部的群集。SDelete 为处理可用 MFT 空间而必须完成的全部工作就是分配它能够分配的最大文件 - 当该文件占用 MFT 记录中的所有可用空间时,NTFS 将防止该文件增大,因为磁盘中没有剩余的可用群集(它们正被 SDelete 先前分配的两个文件占用)。然后,SDelete 将重复此过程。当 SDelete 甚至无法再创建新文件时,它会知道 MFT 中所有先前可用的记录都已完全被安全覆盖文件填充。
为了覆盖您删除的文件的文件名,SDelete 会将该文件重命名 26 次,每次都用连续的字母字符替换文件名中的每个字符。例如,“foo.txt”经过第一次重命名后将变为“AAA.AAA”。
SDelete 在清理磁盘可用空间时不能安全删除文件名的原因是,删除文件名需要直接操作目录结构。目录结构可能具有包含已删除文件名的可用空间,但可用目录空间不能分配给其他文件。因此,SDelete 无法分配此可用空间以便安全地覆盖它。