什么标记数据为已删除——硬盘还是文件系统?

什么标记数据为已删除——硬盘还是文件系统?

任何对硬盘数据恢复和清理有粗略了解的人都知道,从操作系统内部“永久”删除的数据并没有被删除,而只是在 MFT 中进行了标记,并且数据会一直存在于驱动器上,直到它在硬盘上占据的扇区被新数据覆盖。

但是,我最近意识到,我不清楚这个过程是硬盘本身的功能,还是硬盘上的文件系统(很可能是 NTFS,因为我们谈论的是 MFT)的功能。如果是前者,机械硬盘和固态硬盘中的这个过程有何不同?如果是后者,其他文件系统(NTFS 除外)处理数据删除的方式是否截然不同?

答案1

HDD 作为抽象层不需要删除数据的概念。它是一个块设备。您可以读取或写入其块,即您选择的扇区。无论您向扇区写入什么,您都可以在以后多次读取它。如果您覆盖扇区,则连续读取尝试将返回新数据。没有表示“无数据”的特殊状态。如果扇区大小为 512 字节且磁盘健康,则每次读取时您都会从中获得 512 字节。一些更高的抽象层需要知道这些字节是否有意义。

通常文件系统就是这样的一层。从同一扇区返回的相同字节序列可能是某个文件的一部分或空白空间,具体取决于其他扇区的内容(在您的示例中:存储 MFT 的位置)。此处的“空白空间”一词具有误导性;“可消耗字节”会更好。

由于任何扇区在查询时都必须返回一些数据,因此在删除文件时保留数据不变并仅修改跟踪有意义且可消耗扇区的元数据(例如 MFT)是一种明智且常见的方法。常见的文件系统以这种方式处理删除。

这种层分离对于硬盘来说非常有效。

对于 SSD(一般为闪存),至少有两个原因让您希望让设备本身(即其固件控制器)知道哪些扇区是可消耗的。

一是你不能直接覆盖闪存单元中存储的数据(坦白说,我不确定这是否适用于所有技术,但至少适用于其中一些技术,而且它们很常见)。你需要擦除单元,然后在单独的操作中将新数据写入其中。

这意味着内部存在指示“已删除”或“无数据”的状态。如果设备知道哪些扇区是可消耗的,它可以预先擦除它们,当需要写入某些内容时,就不会有延迟。(嗯,这甚至​​更复杂。您可以擦除不少于一大堆单元,远远超过一个 512 字节扇区。有关更多信息,请研究“闪存块和页面”、“闪存垃圾收集”)。

另一个原因是磨损均衡。闪存单元在每次写入(或者说每次擦除)时都会磨损一点。如果您不断覆盖相同的逻辑扇区,您的现代 SSD 会将其重新映射到不同的物理单元,以便它们均匀使用。即使已知没有逻辑扇区是可消耗的,设备也可能有大量的“备用”单元可以使用,但如果控制器知道哪些扇区包含不再需要的数据,那么整个技巧会更好地发挥作用,因此它可以自由地重用映射到它们的单元。

当你的操作系统(了解文件系统)通知你的 SSD 哪些扇区是可消耗的时,我们称之为修剪(看我的这个答案了解详细信息)。

请注意,即使整个 SSD 内部被擦除,任何扇区在读取时都会返回一些二进制数据(我猜固件可能会返回全零,但我没有测试过);您无法仅通过从设备读取来区分已擦除的单元和实际包含此特定数据的单元。从外部来看,这模仿了传统 HDD 行为,其中根本没有已擦除(删除)数据的概念。

答案2

文件系统(硬盘提供物理存储)会将文件标记为已删除。驱动器本身(传统驱动器或 SSD)不了解文件、文件夹、文件系统、分区等。这些都是文件系统和其他系统软件实现的高级概念。驱动器只理解数据块,不了解数据的用途。

相关内容