我可以通过这种方式安全地删除文件吗?

时间:2014-10-21 21:56:11

标签: file-io hard-drive

我们说我有一个10 MB的文件并完成以下步骤:

  1. 用我最喜欢的编程语言打开它进行读/写
  2. 删除流中的所有内容
  3. 将10 MB的随机内容写回同一个流
  4. 将更改保存到磁盘
  5. 通过正常方式删除文件
  6. 我可以确定新的10 MB成功覆盖了硬盘中扇区级别的旧10 MB吗?或者"擦除流中的所有内容"步骤删除旧文件并可能将新的10 MB写入新位置?

3 个答案:

答案 0 :(得分:3)

知道他们正在做什么的专业人员仍然可以访问数据,并且可以访问磁盘上的原始数据(即无需通过文件系统)。

您的程序基本上等同于Linux shred命令,该命令包含以下警告:

  

注意:请注意,Shred依赖于一个非常重要的假设:   文件系统将数据覆盖到位。这是传统的   做事的方式,但许多现代文件系统设计不满足这一点   假设。以下是Shred所在的文件系统示例   无效或不保证在所有文件系统模式下都有效:

     
      
  • 日志结构或日志文件系统,例如随附的文件系统   AIX和Solaris(以及JFS,ReiserFS,XFS,Ext3等)

  •   
  • 写入冗余数据的文件系统,即使有些写入也会继续执行   失败,例如基于RAID的文件系统

  •   
  • 制作快照的文件系统,例如Network Appliance的NFS服务器

  •   
  • 缓存在临时位置的文件系统,例如NFS   版本3客户

  •   
  • 压缩文件系统

  •   

还有其他情况,例如带磨损均衡的SSD。

答案 1 :(得分:2)

不,因为在任何现代文件系统提交都是原子的,你可以几乎100%肯定10Mb没有覆盖旧的10Mb,而且在我们考虑实际保证这一点的日志文件系统之前。

答案 2 :(得分:0)

简短回答:不。

这可能取决于您的语言和操作系统。我有一种感觉,流调用传递给操作系统,然后操作系统决定做什么,所以我倾向于你的第二个问题是正确的,只是为了安全起见。此外,在删除之后将存在磁性伪像,其仍可用于恢复所述数据。即使用全零覆盖相同的扇区,也可能使数据处于衰落状态。通常建议多次删除。有关解释,请参阅here;有关开源C#文件粉碎机,请参阅here

对于Windows,您可以使用SDelete命令行实用程序来实现国防部清除和清理标准:

  

安全删除应用程序会覆盖已删除文件的磁盘数据   使用显示的磁盘数据甚至可以使磁盘数据无法恢复   使用可以读取磁介质模式的恢复技术   揭示弱删除的文件。

特别值得注意的是:

  

压缩,加密和稀疏由16位集群中的NTFS管理   块。如果程序写入这样的文件NTFS的现有部分   在磁盘上分配新空间以存储新数据   已编写新数据,先前已取消分配集群   被文件占用。