3

如何关闭, windows(永久)删除文件后, 对应存储区块被 0 覆写的特性?

 1 year ago
source link: https://www.v2ex.com/t/930990
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  问与答

如何关闭, windows(永久)删除文件后, 对应存储区块被 0 覆写的特性?

  chackchackGO · 3 小时 54 分钟前 · 401 次点击
在更改"windows 桌面"的存储路径时不慎用 del 按键删除了桌面文件.(而且,很奇怪的是, 文件并没有进入回收站).

于是尝试用 diskGenius 和 Recuva 恢复数据.

辛辛苦苦恢复了半天, 忽然发现恢复的文件在二进制浏览下都满是"0".

想起来有人说过 windows 有这个特性来保护数据安全.

但是我被这个害惨了, 而且我用硬盘比较多, 也担心这样加速消耗硬盘擦写寿命, 所以想关闭, 不知道搜索什么关键词.
8 条回复    2023-04-09 17:33:40 +08:00
iBugOne

iBugOne      3 小时 46 分钟前   ❤️ 4

Windows 没有自动写零的功能,你看到的“全部写零”实际上来源于两个功能组合起来的结果:

1. 在 SSD 上,Windows 会告知硬盘某个文件被删除(也就是 TRIM ),这样 SSD 固件可以自己在空闲时进行垃圾回收和磨损平衡等优化操作
2. 一些 SSD 固件的功能,对已经被 TRIM 过的块直接返回零

所以“加速消耗硬盘擦写寿命”也是完全不存在的事,反正删掉的文件是早晚都要擦除的

PS. Windows 的回收站是有容量限制的,可以设置,默认好像是 10%(我记不清了);超过容量或者过大的文件会直接从文件系统中删除,而不是移动进回收站
wyf001912hp

wyf001912hp      3 小时 45 分钟前 via Android   ❤️ 1

是固态硬盘吗?你说的这个情况,只是被 trim 了吧,就算系统不做,硬盘主控自己也会 trim 的
geelaw

geelaw      3 小时 36 分钟前 via iPhone   ❤️ 1

让我来 psychic debugging 一下,根据描述用 Delete 键删除桌面的文件后没有进入回收站,立刻恢复发现长度是 0 ,可以猜测楼主开了 OneDrive 同步桌面,而删除的文件是仅在线可用的文件(这种文件只有元数据,且删除的时候不会经过本地回收站),若果真如此,从本地删除 OneDrive 文件的效果是在 OneDrive 上移动到回收站,可以进入 OneDrive 网页版查看在线回收站还原之。
chackchackGO

chackchackGO      3 小时 35 分钟前

是固态硬盘, 好在删除的只是一些归档文件之类的, 不是很痛.
geelaw

geelaw      3 小时 34 分钟前 via iPhone

另外很难想象 Windows 会默认覆写删除的文件,只有当你要擦除系统或者使用那专门的工具才会这样做,而且通常也不是写零,而是写随机数。
chackchackGO

chackchackGO      3 小时 30 分钟前

@geelaw 没开 oneDrive 同步桌面.
我在打开"移动 windows 桌面存储路径"的对话框的过程中 del 桌面的.
del 之后打开任意地方的文件夹都会立刻报错"原桌面存储路径 is not available".
所以没进回收站可能是这个刁钻时刻 del 的 bug ... 或者我不慎误触 shift+del 了
geelaw

geelaw      3 小时 26 分钟前 via iPhone

Ugh 不是长度为 0 而是数据是 0 ,这就很奇妙了,学习了一下 #1 #2 的知识。但是现在默认情况是 Delete 无确认直接移动到回收站,Shift+Delete 是有确认的。
churchmice

churchmice      1 小时 51 分钟前 via Android

这个是 trim,删除文件只是改掉了 ssd 里面的映射表
展开说说,host 这侧看到的是 lba,需要将这个 lba 映射到具体的 flash 地址上吗,比如是哪个 channel,哪个 die,哪个 plane, page ,实际的 flash 地址我们叫做 pba(physical block address)
这个 lba 到 pba 的转换关系是由一个表来维护的,这个表存在 flash 里面并且由主控维护
那回到你这个问题,删除一个文件的时候 hpst 会发送 trim 这个命令(其实叫做 dataset management with deallocation hint )给主控,主控看到之后会把映射表里面 lba 对应的 pba 改成一个特殊值,并不会去更改真正 flash 里面的内容

你下次读的时候碰到这个 lba,主控一查表发现是个特殊值,它就直接给你返回全 0 的结果给 host

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK