固态硬盘删除数据后真的很难恢复

发布时间 2023-06-29 23:55:24作者: NoId1

1 概述

某天在群里看到一位群友误删了很多文件,但他通过相关工具进行恢复把文件全部找回了!然后我想到,我之前有几次误删了很多文件后,都没能成功恢复文件!然后和他交流了一下,发现他用的是机械硬盘。他用机械硬盘就可以把文件全部成功恢复出来,而我用的固态硬盘就只能恢复出完整的文件名,恢复出来的文件全部是损坏打不开,然后用二进制查看了下,发现文件内容全部被 0 字符进行填充了。然后就产生了疑问,同是硬盘,为啥机械硬盘就能成功恢复文件,而固态硬盘就没法进行成功恢复呢?然后,查找了一些资料发现是因为固态硬盘的 Trim 功能造成的。然后就觉得,固态硬盘在很多方面都比机械硬盘有很多优势,但在文件误删进行恢复这方面,机械硬盘确实比固态硬盘有优势!

结论:很多系统【比如 win10 】为固态硬盘做了优化且默认开启 Trim 空间回收功能,删除文件时直接物理删除以便于下次写入更快,不然的话下次写到这块区域就必须先删除再写入,就会拖慢固态硬盘的速度,而且还会降低固态硬盘的使用寿命,所以,现如今很多固态硬盘就直接是默认开启的这个 Trim 功能的。固态硬盘开启 Trim 后无论是删除的、格式化的文件几乎都很难恢复,这也是固态硬盘目前最大的一个 bug 。所以,重要的数据还是放到机械硬盘中,以便误删除后还可以进行找回。正是因为固态硬盘有了 Trim 这个功能,所以固态硬盘一般并不需要刻意执行「粉碎文件」操作来进行彻底删除文件的。

2 详情

2.1 硬盘恢复文件原理

下面这一段话非常生动形象的描述了硬盘创建、删除、恢复文件的原理。

创建文件:
盖大楼(文件本体),同时制作一个指向楼的路标(指针)。用户通过路标就能找到楼。

「删除」文件(移动至回收站):
在路标上写一个“拆”字。

恢复文件(从回收站恢复):
将路标上的“拆”字抹掉。

「完全」删除文件(这里的「完全」删除指的是 Shift+Delete 直接删除,或从回收站删除):
把路标拆了,楼先留着。这样,只记路标位置的用户就无法找到这个楼的具体位置了,而且也不会消耗太多的时间(毕竟拆路标比拆楼容易多了)。
此时,虽然楼还在原地,但是这块地已经被系统认定为“空地”了——文件本体占据的空间被加入到硬盘可用空间中。

恢复文件(恢复「完全」删除的文件):
因为废弃的大楼还在原地,专业的搜救队(数据恢复工具)还是有可能找到它的。然而楼附近很可能都是废墟(被删除数据),它们可能会干扰搜救队的判断,造成抢救失败。一般来说,搜救队会尝试将楼1:1整体复制到其他场所,这样如果抢救失败了,用户还有机会请求其他搜救队的帮助;而如果原地抢救,万一失败,可能会对楼造成无法逆转的破坏。

恢复文件的原理:
从一片废墟中找到目标大楼的“招牌”。找到之后,以找到的楼为原型,在其他地方建造一模一样的新楼。
(招牌:绝大多数的文件都以特定内容开头和结尾,比如GIF格式图片一定是以GIF87a或者GIF89a开头、十六进制数字“3B”结尾。只要定位到特定文件头、文件尾,基本就能确定这部分数据属于同一个文件,以及判断出该文件的格式)

再创建文件:
施工队到达施工现场后,发现这里已经有大楼存在,但是这个大楼已经废弃,于是把它炸了,盖新的楼。这时候原来的楼就彻底找不到了,最多只能抢救出一部分残骸。

以上信息仅对普通硬盘有效;如果使用的是 SSD固态硬盘,且 SSD硬盘本身和操作系统都支持 Trim 指令 ,则在执行「完全」删除操作的同时,会立刻开始拆楼,因此删除的数据无法找回。

「粉碎」文件(使用第三方工具,在普通硬盘上彻底删除文件):
将原来的楼炸掉,然后在废墟上搭建违章建筑(全零、全一,或者随机无用数据)。搭建完成后,将违章建筑炸掉,再搭建新的违章建筑。如此反复一定次数后,原来的楼就连渣都找不到了。
该操作需要在炸楼后盖新楼(且可能会盖好几次),因此速度非常慢。
能够完成此工作的工程队(文件粉碎工具)有很多,请自行查找。

请不要在SSD固态硬盘上使用文件粉碎工具,因为:
1.SSD硬盘的寿命与写入数据的次数有关。文件粉碎工具会多次写入数据,严重影响硬盘寿命。
2.由于耗损平均技术( Wear leveling),在SSD硬盘上无法强行指定写入数据的位置,这一点与普通硬盘不同。也就是说,SSD硬盘上搭建的违章建筑很可能和原来的楼位置完全不同,无法达到破坏楼的效果。
3.由于上文中提到的 Trim指令,一般并不需要刻意执行“粉碎文件”操作。

2.2 查看是否开启 Trim 功能

# 在 cmd 命令提示符中输入以下命令查看
fsutil behavior query DisableDeleteNotify

image

显示的是 DisableDeleteNotify = 0 就是开了 Trim 功能,1 就是没开。

当为 0 的时候,文件可以恢复的可能性就很小了;当为 1 的时候就还有恢复的希望,且可能性很大。

2.3 开启或关闭 Trim 功能

# 在 cmd 命令提示符管理员身份下输入以下命令
# 以下命令是关闭 Trim 功能
fsutil behavior set DisableDeleteNotify 1
# 以下命令是开启 Trim 功能
fsutil behavior set DisableDeleteNotify 0

虽然说关闭固态硬盘的 Trim 功能会很大提高恢复文件的可能性,但这种代价是要牺牲固态硬盘的寿命的,所以,一般不建议关闭此功能!而且还不建议使用粉碎工具去进行文件粉碎!

2.4 日常使用中的注意点

1、备份!记得备份!重要文件一定不能就只有一份内容,可以备份在另一台电脑或移动硬盘中!当然,也可以备份到云上,存放在网络中。但我个人是不喜欢这种备份方式的,特别是关于自己的一些隐私数据,是不情愿上传到第三方服务器上面的!

2、在固态硬盘开启了 Trim 功能下,不要再使用粉碎工具去粉碎文件了,如果文件名称敏感的话,记得删除前把文件名称重命名一下。

3、在固态硬盘开启了 Trim 功能下,如果不小心误删了文件,几乎就直接放弃吧,不要再浪费时间浪费精力去恢复文件了,几乎是99%的不可能恢复的!

4、固态硬盘用户在清空回收站在清空数据前请再三思考,因为回收站是数据被删恢复的最后一次救命草!