某些东西损坏了我硬盘上的许多文件。损坏的文件:
- 有他们的内容被替换为 NULL 字节,
- 与畸形发生之前的大小完全相同,
- 修改时间未改变
我至少有 40 个这种格式错误的文件,正在寻找其他受害者。大多数文件都是 Netbeans php 项目的一部分。有些是文本文件,有些是图像。最近没有修改过它们。HDD Smart 没有显示任何令人担忧的内容,AV 软件也没有检测到任何病毒。我的操作系统是 Windows 7。
有什么想法可能导致这种奇怪的行为吗?
[编辑] 我扫描了磁盘以查找其他格式错误的文件,奇怪的是,除了我之前找到的 40 个文件外,没有其他“NULLed”文件。所有文件都属于同一个 Netbeans 项目。我以前从未见过类似的东西。
答案1
ASyncTrayzor github 上的讨论表明它可能与windows更新有关。
我曾经两次遇到过这种情况:config.xml
在 Windows 更新后,SyncTrayzor 被空字节填充,并且至少有一位其他用户也遇到了同样的问题。此外,一些 Firefox 缓存文件也几乎在同一时刻被空字节填充。
搜索只有空字节的文件似乎表明它们大多是“配置”文件或缓存文件之类的东西。我的假设是,当计算机作为 Windows 更新的一部分被迫重新启动时,这些文件保持打开状态,并且没有正确同步到驱动器。
- 几乎所有 100% 空字节文件都是在重启当天创建的。只有少数特定文件不是在重启当天创建的。
- 其中大多数是在“Windows 10 版本 1803 的累积更新”上或之后的第二天创建的。也许重启偶尔会推迟到安装后的第二天?
因此,很明显,空字节的创建是由重启触发的。大多数重启可能是由于更新引起的,因此不清楚这种情况是否会在任何重启时发生,或者更新重启在这方面是否特殊。
我还没有想出如何以机器可读的形式获取所有信息,所以到目前为止,这是一项低效的手动调查。大多数这些屏幕我甚至无法复制粘贴,所以这是非常低效的。如果有人知道如何将这些信息放入文件中,我将不胜感激:
- 所有字节均为空的文件的文件名和创建/修改日期。
- Windows 关闭/启动日期。编辑:
get-eventlog system | Where source -eq EventLog | Where InstanceID -like 214748965*
- Windows 更新日期(特别是需要重新启动的日期)。
编辑:重启假设得到证实https://stackoverflow.com/a/52751216/2097。不过,该答案仅涉及意外重启。
编辑:N++ 团队证实了重启假设:https://notepad-plus-plus.org/community/topic/13302/fix-corrupted-txt-file-null
使用 Recuva 的可能恢复机制:恢复因断电而损坏的文件
答案2
我刚刚遇到了与 VSCode 相同的问题。我打开但不活动的 GIT 存储库的很大一部分都像这样损坏了。没有崩溃,问题发生在工作过程中:
我提交并推送了一些文件,然后发现了一个拼写错误,想修改提交。就在那时,我收到了错误消息(关于不同的工作树)。工作时间和损坏时间之间没有重新启动。而且只过了几分钟。
git commit --amend
Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.
error: bad ref for pipelines/.git/worktrees/pipelines_worktree4/logs/HEAD
error: bad ref for pipelines/.git/logs/HEAD
error: bad ref for A:/_All/My.Work/2018.Google/pipelines/.git/worktrees/pipelines_worktree4/logs/HEAD
error: bad ref for pipelines/.git/logs/HEAD
error: bad signature 0x00000000
fatal: index file corrupt
fatal: failed to run repack
我在 VScode repo 中发现了一个关于此类损坏的线程: https://github.com/Microsoft/vscode/issues/9589
更新:或者这可能发生于几个月前,而 GIT 只是在尝试进行垃圾收集时才发现它。