当代固态硬盘都支持Trim指令,熟悉它工作原理的朋友一定会认为,固态硬盘删除文件就没有后悔药了。事实上还真的有一些例外存在,譬如小体积的日志文件在被Trim之后依然能够被恢复。
不同固态硬盘对于接受Trim指令后的处理策略不同,以SandForce为代表的主控倾向于懒惰的垃圾回收(GC)以最大限度降低写入放大率,而以浦科特TrueSpeed为代表的固件在收到Trim指令后会立刻进行垃圾回收,擦除文件原本占据的闪存页。一般来说只要闪存被擦除,文件内容就不可能被恢复了。
PCEVA(微信公众号:PCEVA)选择浦科特M6Pro 128G进行测试,首先建立一个反复以TEST字符填充的测试文件,文件长度为160字节。将其复制到M6Pro内,并用WinHEX软件记录文件所处的逻辑地址,本例中文件头偏移是03221268480:
在Trim正常的情况下,删除TEST.txt文件并让固态硬盘静置30秒、1分钟、5分钟,分别检查后发现,文件内容并没有被清空:
出现这种情况并非Trim失效了,而是因为NTFS文件系统会将长度小于900字节的文件直接存储在MFT主文件表中,删除它改变的是MFT的内容,这不会触发Trim指令。
当然,这个小漏洞只针对较小体积的文件,超过900字节的文件将不会被直接存储在MFT主文件表中。另外Trim正常工作后即便闪存还没有被擦除,通过外部直接读写也无法获取到其中的文件内容,除非你拥有能直接访问闪存的底层工具:非专业人士通常是做不到这一点的。