可完全存储在 NTFS 主文件表 (MFT) 中的文件的最大大小

可完全存储在 NTFS 主文件表 (MFT) 中的文件的最大大小

我使用的是 Windows 7 和 NTFS。我注意到 MFT 存在巨大的安全风险,因为它可以在用户不知情的情况下长时间存储敏感文档文件,然后才会被覆盖。

我进行的所有测试都表明,小于 640 字节的文件驻留在 MFT 中,无法安全删除。但是,任何大于或等于 640 字节的文件都可以立即安全删除 - 这对于我的 500GB 硬盘和 128GB 闪存驱动器(均为 NTFS)都是如此。

我通过创建一堆文本文件并在其中写入单词以创建不同大小的文件来测试了这一点。删除它们,清空回收站并运行 Recuva,然后安全删除突出显示的文件。它无法安全删除任何小于 640 字节的文件(将出现文件驻留在 MFT 消息)。

启用 Trim 的 SSD 也是如此吗?为什么是 640 字节?以为已擦除文件的 MFT 条目的最大值为 512 字节?

非常感谢您的任何意见。

答案1

任何文件都可以安全删除,只要你使用正确的工具。 例如Sysinternals 的SDelete有能力处理这个问题

在 NTFS 驱动器上,SDelete 的工作在分配并覆盖两个文件后不一定就完成了。SDelete 还必须使用适合 MFT 记录的文件填充 NTFS MFT(主文件表)中任何现有的空闲部分。MFT 记录通常为 1KB,磁盘上的每个文件或目录至少需要一个 MFT 记录。小文件完全存储在其 MFT 记录中,而无法容纳在记录中的文件则分配到 MFT 外部的簇中。SDelete 需要做的就是分配它能分配的最大文件来处理可用的 MFT 空间 - 当文件占用 MFT 记录中的所有可用空间时,NTFS 将阻止文件变大,因为磁盘上没有剩余的可用簇(它们被 SDelete 先前分配的两个文件占用)。然后 SDelete 重复该过程。当 SDelete 甚至无法再创建新文件时,它知道 MFT 中所有先前可用的记录都已完全被安全覆盖的文件填充。

你肯定选错了工具,因为如果你读过文档,你就会看到

Recuva 不能:

  • ...
  • 安全删除主文件表 (MFT) 中保存的某些非常小的文件和零字节长度的文件。

Recuva 简介——它能做什么和不能做什么


为什么是 640 字节?你以为被擦除文件的 MFT 条目的最大长度是 512 字节吗?

MFT 中可以存储的文件大小(称为常驻文件) 因每个文件、每个系统以及哪些信息存储在 MFT 中而异。MFT 中用于元数据的数据越多,文件剩余的数据就越少,因此没有明确的限制,但根据通常文件小于大约900 字节存储在 MFT 的目录条目中

图“带有驻留记录的 MFT 条目”显示了小文件或文件夹的 MFT 记录的内容。小文件和文件夹(通常为 900 字节或更小)完全包含在文件的 MFT 记录中。

NTFS 的工作原理

作为示例,我创建了一个示例1000 字节具有极少量元数据的文件可以完全存储在MFT中。但是,一旦我向文件添加更多元数据(硬链接、更长的名称、流、权限……),可容纳驻留文件的最大空间就会迅速减少

答案2

MFT 条目长度为 1024 字节(请参阅http://www.cse.scu.edu/~tschwarz/coen252_07Fall/Lectures/NTFS.html) 并存储的不仅仅是文件名 - 它还可以包括文件大小、读/写权限、创建/修改日期和其他元信息。这些项目都有分配的大小,这就是为什么在早期版本的 Windows 中,如果文件名太长,您可能会遇到错误。这也是为什么您无法将大于 640 字节的文件完全存储在表中的原因 - 剩余的 384 字节(1024-640=384)用于专用分配。

了解你的计算机是否具有相同的 MFT,而不是一个。主 MFT 位于 HDD 的外边缘,第二个 MFT 位于中间。第二个 MFT 是作为备份存在的,以防主 MFT 损坏,如果在写入或更改条目时关闭计算机,则可能发生这种情况。每个 MFT 清理程序都应该从两个表中删除(该过程由 BIOS 或驱动器的固件处理),但如果您想将数据安全性发挥到极致,这一点需要牢记。

此外,MFT 行大小可以根据驱动器(或分区)大小及其预期用途而变化。数据中心和服务器更有可能使用非标准大小,因为 MFT 分配可能超过 HDD 的 10%,因此额外的空间变得很有价值。但是,1024 字节是标准。

相关内容