V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
chackchackGO
V2EX  ›  问与答

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

  •  
  •   chackchackGO · 354 天前 · 1043 次点击
    这是一个创建于 354 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在更改"windows 桌面"的存储路径时不慎用 del 按键删除了桌面文件.(而且,很奇怪的是, 文件并没有进入回收站).

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

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

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

    但是我被这个害惨了, 而且我用硬盘比较多, 也担心这样加速消耗硬盘擦写寿命, 所以想关闭, 不知道搜索什么关键词.
    8 条回复    2023-04-09 17:33:40 +08:00
    iBugOne
        1
    iBugOne  
       354 天前   ❤️ 6
    Windows 没有自动写零的功能,你看到的“全部写零”实际上来源于两个功能组合起来的结果:

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

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

    PS. Windows 的回收站是有容量限制的,可以设置,默认好像是 10%(我记不清了);超过容量或者过大的文件会直接从文件系统中删除,而不是移动进回收站
    AkaGhost
        2
    AkaGhost  
       354 天前 via Android   ❤️ 1
    是固态硬盘吗?你说的这个情况,只是被 trim 了吧,就算系统不做,硬盘主控自己也会 trim 的
    geelaw
        3
    geelaw  
       354 天前 via iPhone   ❤️ 1
    让我来 psychic debugging 一下,根据描述用 Delete 键删除桌面的文件后没有进入回收站,立刻恢复发现长度是 0 ,可以猜测楼主开了 OneDrive 同步桌面,而删除的文件是仅在线可用的文件(这种文件只有元数据,且删除的时候不会经过本地回收站),若果真如此,从本地删除 OneDrive 文件的效果是在 OneDrive 上移动到回收站,可以进入 OneDrive 网页版查看在线回收站还原之。
    chackchackGO
        4
    chackchackGO  
    OP
       354 天前
    是固态硬盘, 好在删除的只是一些归档文件之类的, 不是很痛.
    geelaw
        5
    geelaw  
       354 天前 via iPhone
    另外很难想象 Windows 会默认覆写删除的文件,只有当你要擦除系统或者使用那专门的工具才会这样做,而且通常也不是写零,而是写随机数。
    chackchackGO
        6
    chackchackGO  
    OP
       354 天前
    @geelaw 没开 oneDrive 同步桌面.
    我在打开"移动 windows 桌面存储路径"的对话框的过程中 del 桌面的.
    del 之后打开任意地方的文件夹都会立刻报错"原桌面存储路径 is not available".
    所以没进回收站可能是这个刁钻时刻 del 的 bug ... 或者我不慎误触 shift+del 了
    geelaw
        7
    geelaw  
       354 天前 via iPhone
    Ugh 不是长度为 0 而是数据是 0 ,这就很奇妙了,学习了一下 #1 #2 的知识。但是现在默认情况是 Delete 无确认直接移动到回收站,Shift+Delete 是有确认的。
    churchmice
        8
    churchmice  
       354 天前 via Android   ❤️ 1
    这个是 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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4787 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:58 · PVG 17:58 · LAX 02:58 · JFK 05:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.