如何查找和删除损坏的文件以避免备份它们

如何查找和删除损坏的文件以避免备份它们

问题

我的 Windows Server 软件 RAID-5 阵列已损坏,我想备份它,但又不想备份所有损坏的文件。

我真的很希望有某种脚本或程序可以通过 HDD 扫描损坏的文件并直接删除它们。

我的 Google-Fu 返回了如何恢复或修复这些文件的结果——我只是想删除它们。

我如何破解它:

我将软件 RAID 5 从 Windows Server 2008 R2 迁移到新硬件和 Windows Server 2012 R2。迁移过程或多或少是成功的;我只需要进行一些重新同步。我忘记了它正在重新同步,因此将其关闭以移动它的物理位置。

哎呀。

经过数周的 CHKDSK 和 SeaTools 以及其他随机尝试恢复驱动器后,我决定放弃恢复并重建整个系统,同时尽可能地挽救。

编辑

解决方法

使用 ffmeg 有点效果,但是我在 Windows Server 2012 中没有一个干净的自动化解决方案。我的 PowerShell 尝试花费的时间太长,并产生了一个无法读取的日志文件。

相反,我安装了 FileZilla Server,并且我只是将所有要复制到备份设备的文件排队,任何坏文件都会出现在 FileZilla Client 的“传输失败”选项卡中。

答案1

好消息是我们对有效的 MKV 和 AVI 文件进行了相当快速的测试。

如何检查视频文件(avi、mpeg、mp4……)的完整性?

您可以使用 ffmpeg 视频转换器中的一项功能:如果您指定它将视频重新编码为无内容,它将只读取输入文件并报告将出现的任何错误。这是一个非常快的过程,因为视频帧只是被读取、检查并默默丢弃。

循环遍历所有 avi 和 mkv 文件:

ffmpeg.exe -v error -i file.avi -f null - >error.log 2>&1

对一个目录中的所有文件进行循环的示例:(添加 /R 以使用递归

FOR %%c IN (*.mkv) DO ffmpeg.exe -v error -i %%c -f null - >error.log 2>&1

Windows For 循环信息

编辑以下是我测试过的 Linux bash 版本:

for c in *.mp4; do ffmpeg -v error -i $c -f null - >error.log 2>&1; done

现在 grep 错误日志,找出哪些文件是坏的,然后删除它们。我不知道输出是什么样子的,所以你可能想发布示例输出来帮助完成最后一步,或者分成另一个问题。

带有损坏文件(文件末尾被切断)的示例输出,错误可能会有很大差异:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x161a180] moov atom not found
video-head.mp4: Invalid data found when processing input

相关内容