介绍
Windows NT / 2000的(Win2K)C2兼容功能之一是它实现了对象重用保护。这意味着,当应用程序分配文件空间或虚拟内存时,它无法查看Windows NT / 2K为其分配的资源中先前存储的数据。Windows NT将内存呈现给应用程序之前,将内存零填充,并将文件放置在磁盘上的扇区归零。但是,对象重用并不意味着将文件在删除之前所占用的空间清零。这是因为Windows NT / 2K的设计假设是操作系统控制对系统资源的访问。但是,当操作系统处于非活动状态时,可以使用原始磁盘编辑器和恢复工具来查看和恢复操作系统已重新分配的数据。
确保已删除文件以及使用EFS加密的文件可以安全地进行恢复的唯一方法是使用安全的删除应用程序。安全删除应用程序使用已证明使磁盘数据无法恢复的技术来覆盖已删除文件的磁盘数据,即使使用可读取磁性介质中显示弱删除文件模式的恢复技术,安全删除应用程序也可以将其删除。SDelete(安全删除)就是这样的应用程序。您可以使用SDelete来安全地删除现有文件,以及安全地擦除磁盘未分配部分中存在的任何文件数据(包括已经删除或加密的文件)。SDelete实施国防部清除和消毒标准DOD 5220.22-M,使您确信,一旦用SDelete删除,文件数据将永远消失。请注意,SDelete安全删除文件数据,但不会删除可用磁盘空间中的文件名。
使用SDelete
SDelete是一个命令行实用程序,具有许多选项。在任何给定的用途中,它都允许您删除一个或多个文件和/或目录,或者清除逻辑磁盘上的可用空间。SDelete 接受通配符作为目录或文件说明符的一部分。
用法:sdelete [-p传递] [-r] [-s] [-q] <文件或目录> [...]
sdelete [-p传递] [-z | -c [空闲百分比]] <驱动器号[...] 删除[-p传递] [-z | -c]&lt;物理磁盘号>
范围 | 描述 |
---|---|
-C | 清理可用空间。指定一个可选的空间量,以使运行中的系统可以自由使用。 |
-p | 指定覆盖次数(默认为1)。 |
-r | 删除只读属性。 |
-s | 递归子目录。 |
-z | 零可用空间(适用于虚拟磁盘优化)。 |
-nobanner | 不要显示启动标语和版权信息。 |
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 执行安全覆盖,以确保安全地清除之前可用的所有磁盘空间。
在NTele驱动器上,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无法分配此可用空间,因此它可以安全地覆盖它。
下载SDelete (518 KB)
运行于:
- 客户端:Windows Vista及更高版本
- 服务器:Windows Server 2008及更高版本
- Nano Server:2016年及更高版本
用法:
对于文件与文件夹:
sdelete64.exe demo.txt
直接删除 demo.txt 文件
sdelete64.exe -p 5 demo.txt
直接删除 demo.txt 文件,并且进行 5 次覆盖
sdelete64.exe -s c:\folders
删除 c:\folders 以及子文件夹
对于剩余空间
sdelete64.exe -c c:
安全的清除 C 盘剩余空间,不影响已有文件。
sdelete64.exe -c -p 5 c:
安全的清除 5 次 C 盘剩余空间
sdelete64.exe -z c:
对 C 盘剩余空间写零,适合虚拟磁盘优化
注意上面的 sdelete64 也可能是 sdelete,请根据你的操作系统 32、64 位而定。