我确实知道文件系统实现会在文件被删除时向驱动器发出 TRIM 命令(无论是否排队)。但是,我不知道是否可以与其他文件共享数据块,以便数据不会被 TRIM/删除。
我之所以问这个问题,是因为我想知道如何才能安全地从 SSD 中删除文件,但这个问题应该独立存在;这只是问题的背景。
那么:在删除文件时,所有数据是否都会被 TRIM 处理?如果是,什么时候?请注意,我并不担心元数据,只担心文件的实际内容。如果它是操作系统或文件系统特定的,那么我当然也想知道这一点(假设两者都支持 TRIM)。
答案1
我不知道数据块是否可以被其他文件共享,以便数据不会被TRIM/删除。
如果我的理解正确,SSD 块比文件系统块大,因此删除单个文件可能无法释放整个 SSD 块。在这种情况下无法发出 TRIM。(需要引用)
我问这个问题是因为我想弄清楚如何才能安全地从 SSD 中删除文件 […]
无法(可靠地)逐个文件地做到这一点。SSD 使用磨损均衡。它们的逻辑地址不固定在闪存中的特定位置。事实上,情况恰恰相反,控制器将尝试在驱动器上均匀分布写入,因为 SSD 会在写入时磨损,而对特定地址的大量写入可能会杀死相应的块。这意味着您不知道在多少个位置写入了文件的各个版本的副本,包括可能因磨损而停用的位置。
擦除 SSD 的唯一可靠方法是重置其自加密密钥(假设您的驱动器使用内部加密)。然而,这会“擦除”整个驱动器,但不会浪费写入周期 - 旧数据仍然存在,但如果没有正确的加密密钥,它就只是胡言乱语。
那么:删除文件时是否总是对所有数据进行 TRIM?如果是,那么什么时候?
不一定。长期以来,Linux 在删除时立即执行 TRIM 存在性能问题,因此改为每周一次左右对整个文件系统进行定期 TRIM。
如果您想确保已删除的数据不可读,请使用加密。