从硬盘驱动器中永久删除文件

Posted

技术标签:

【中文标题】从硬盘驱动器中永久删除文件【英文标题】:Permanently removing files from hard drive 【发布时间】:2011-08-17 04:29:15 【问题描述】:

我想知道如何编写一个程序来从我的硬盘驱动器中永久删除文件。我知道在删除系统与数据的链接方面,我的程序至少需要具有与“rm”相同的功能,但我也对如何消除(完全)磁盘上的数据感兴趣。

我很确定 C 和程序集将提供这种低级功能,但我什至不确定如何开始尝试访问磁盘的某些部分,或追踪磁盘上文件的不同片段。

我知道由于我缺乏文件系统知识,这可能看起来像是一个大项目,但我只是在努力学习。我知道我需要更多地了解硬盘驱动器以及我特别尝试使用的驱动器类型。但是您可以提供的任何帮助/链接将不胜感激。

【问题讨论】:

我不认为您可以直接执行此操作,而无需编写内核空间代码。操作系统负责对硬盘的低级访问。 不确定这是否能回答您的问题,但要永久删除一个文件,我认为您的意思是它不会被恢复,所以如果您用垃圾数据重写文件的每个字节,然后将其删除之后应该这样做。 @AtoMerZ:可能会这样做,但例如在 Windows Vista 上,如果该驱动器有影子存储,它就不会这样做,并且您的文件已被系统还原点捕获。从某种意义上说,如果覆盖文件永久删除旧内容,系统还原根本不起作用,这是显而易见的,但如果要粉碎文件,则必须了解哪些文件具有卷影副本,这并不明显. @Steve Jessop,是的,但我认为没有任何程序可以跟踪它,不是吗? @AtoMerZ:可移植程序无法执行任何操作,但在 Windows 上,至少可以识别何时存在卷影副本。我不知道执行此操作的 Windows API 的详细信息,但可以管理诸如“Shadow Explorer”之类的东西。 【参考方案1】:

如果打开文件,获取文件大小,然后将 n 个空字节写入要删除的文件(其中 n 是字节数),就可以了。

然后删除文件。所有数据都会丢失,如果有人恢复文件节点,他只能看到一堆零。

也就是说:我相信这里的某些人会告诉您,您必须用零(或其他模式)擦除文件至少 10 到 15 次才能真正删除内容的所有痕迹。永远删除文件一次。

这是一个都市传说。不要相信他们。没有人,即使是 CSI 电视剧的人也无法恢复曾经被擦除过的文件。

【讨论】:

CSI 人员可以“增强”显示受害者眼睛的安全摄像头帧的 1x1 像素部分,将其放大到数百万像素的图像,从中您可以看到杀手在角膜,所以我很确定他们甚至可以从被扔进太阳的硬盘中检索数据。 :) 好的太棒了,这就是我认为会做的事情,但我不确定是否会将碎片文件保存回磁盘上完全相同的位置。谢谢。 @Nils:仍然,正如@yan 回答的评论中所说,事情并不那么容易,因为某些文件系统和硬件并不总是就地覆盖,日志会留下痕迹,并且驱动器并不总是真正立即刷新更改。 问题,一些文件系统确实在写入时复制,例如 ZFS 和 BTRFS 都这样做,用 0 覆盖文件可能只会用 0 填充其他一些以前未使用的块,而不是具有文件的块其中的数据,显然这不是您想要的安全删除。 此答案仅对特定文件系统有效。现代文件系统很可能不会将新数据放在同一位置。【参考方案2】:

我想你想要的是使用像scrub 这样的程序。唯一的问题是,对于许多文件系统它不起作用。

想出一个通用的解决方案可能是不可能的。

【讨论】:

以上是关于从硬盘驱动器中永久删除文件的主要内容,如果未能解决你的问题,请参考以下文章

自动从 Google 共享驱动器中删除超过 X 天的文件?

使用 osx 终端从外部硬盘驱动器中提取具有特定名称的子文件夹。

scp从硬盘驱动器通过服务器复制

如何将 MySQL 数据库从一个硬盘驱动器移动到另一个硬盘驱动器?

从 firefox (file:///) 打开硬盘驱动器上的直接文件

从 firefox (file:///) 打开硬盘驱动器上的直接文件