我的问题很简单:操作系统(Linux 或 Windows)如何从我的硬盘中删除数据?
我可以想象两种方法:
“物理方式”:通过将数据的内存地址全部置零来真正删除数据。例如,如果我硬盘上的某个数据看起来是这样的,
1010...010
那么之后它将看起来像0000...000
保留数据但允许覆盖。
答案1
谈论“数据”太宽泛了,但很明显你实际上是在谈论文件。您需要知道文件通常存储在文件系统中。尽管存在差异,但这通常意味着存在路径的树结构,表示文件或目录,并且文件在存储其内容的硬盘上分配有空间。
诸如rm
简单地删除文件(即树中的条目)之类的命令:它们将父目录标记为少了一个子目录。在文件所在的地址以及文件内容所在的位置,没有任何变化。
但是,也有一些命令(例如shred
)实际上会覆盖文件的内容,因此(理想情况下)无法恢复。这实际上比前者更难,因为不能保证使用相同的扇区来存储覆盖数据,并且因为物理上,磁盘上的磁性数据不仅仅是二进制的。此外,此类工具不会简单地将数据清零,而是使用模式或随机数据多次覆盖数据,从而使其在物理上更难恢复。
因此,您提到的两个选项都有,但日常的删除只是删除指向实际数据的指针。
答案2
您几乎已经回答了自己的问题。当操作系统删除时,它会将文件使用的空间标记为“可重复使用”。更安全的“删除”将覆盖文件块。“快速”和“完整”磁盘格式也是如此
答案3
第二种方法。硬盘上的文件系统有一个主文件表,这基本上是一个索引,它告诉哪个扇区保存哪个文件。如果删除了某个文件,则该表的条目将被删除,扇区可用于新文件。旧数据仍然存在,除非被覆盖,否则可以恢复。