为什么人们说没有任何东西被真正删除?
假设我的硬盘中有一个字节包含字节 0x00。如果我用字节 0x01 覆盖它,别人怎么会知道它曾经包含字节 0x00?
答案1
我认为他们无法做到这一点,如果你真的用对应于 0x01 的磁场值覆盖硬盘的那个区域足够多次的话。然而,操作系统的工作方式并非如此。操作系统存储一系列文件指针,这些指针映射到物理磁盘上文件的位置。当你删除一个文件时,你会删除这个文件指针,但你不会在此时覆盖磁盘。
有些程序可以绕过这一点,将值写入硬盘的物理块,从而改变该块的场强。这会消除先前的值。
我可能错了,但也许有统计方法可以检索出大概该块的值,但正如我所说,我不确定。
答案2
还有人(彼得·古特曼) 认为,理论上可以使用某些磁性技术恢复之前被覆盖的数据。虽然这似乎不太实际,但有几家法医数据恢复服务声称至少在一定程度上能够提取被覆盖的数据。
关于他的更多信息请点击这里:http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html和http://www.cypherpunks.to/~peter/usenix01.pdf
答案3
因为您的文件系统只是一个包含文件 ID 和物理地址的表,这些表指向这些条目的数据。如果您删除一个文件,您只是删除了您的条目,但您的数据仍保留在原来的位置。
答案4
除了其他人所说的之外,SSD 使这变得更有趣。
当您写入 SSD 上的特定位置时,您不一定总是写入同一个位置。这样做是为了避免在特定位置被多次写入时出现内存单元磨损的问题。通过复制旧扇区并修改写入新位置的时间,写入分布在整个磁盘上。副作用是会留下旧数据副本。用户、程序员甚至操作系统都知道这一点,但无法控制它。这一切都在 SSD 上的控制器芯片中完成。
一些现代文件系统做类似的事情(写时复制或 CoW),但操作系统知道哪些旧数据可能可用。