检查你的硬件

检查你的硬件

我从 CD 读取数据文件时遇到一种非常奇怪的行为:如果我从 CD 上复制同一文件的多个副本,则数据会不一致。我不知道原因(没有读取错误通知,并且其他 CD 在同一设备上工作正常)。

错误每次都发生在不同的地方,所以我的猜测是,如果我对文件进行多个副本,并采用大多数副本都同意的值,则可以修复这些错误。

我尝试使用 ddrescue,但它没有检测到错误(它获取了错误的数据,但没有检测到错误)。然而,如果ddrescue检查它读取的数据,那么它显然会发现不一致的地方。

那么,我可以使用 ddrescue (或其他工具)通过验证复制的数据来修复此 CD 上的文件,并根据需要多次重复复制以猜测每个字节的正确值是多少?

谢谢!

答案1

检查你的硬件

我没有一个好的解决方案,但通常情况下,如果每次从 CD-ROM 读取的数据都不同,对我来说,这听起来更像是硬件问题,而不是有缺陷的 CD 上的实际问题,因为 CD 涉及 ECC,这意味着,该扇区可以读取也可以不读取,如果可以读取则显示稳定的数据。

也可以使用该ddrescue选项-d来访问源,因为某些操作系统可能会在预读(在后台完成)发生读取错误后分发随机数据。

尝试使用另一台不共享另一台计算机的任何硬件的计算机,看看是否仍然得到这个令人费解的结果。

但请注意:运行 2 次ddrescue可能会创建两个不同的映像,因为如果存在读取错误,可能会恢复源的不同部分。 (你写的,没有错误。也许选项的情况有所不同-d。)

比较ddrescue图像的工具

如果您可以排除有故障的硬件并希望再次将图像与源进行比较而不需要提取另一个图像,您也许可以尝试我的工具ddrescue-verify来诊断差异。

ddrescue-verify仅包含源代码(可能仅适用于 Linux),因此您需要了解如何使用开发/编译系统

今天,ddrescue-verify它并不是被设计为易于使用的诊断工具。它的创建是为了能够快速验证图像是否是通过慢速网络链接正确获取的,因此在您绝对不能等待完整图像通过慢速线路多次传输的情况下。

如果 和 的现有文档对您来说ddrescueddrescue-verify不够,恐怕我无法为您提供进一步的帮助(没有时间,抱歉)。我唯一能提供的是摘录自维基百科希望能适应您的需求:

从源创建图像的原始命令如下所示,在当前工作目录中运行:

ddrescue -d /dev/source image.img image.log

现在创建验证数据:

ddrescue-verify image.img image.log > image.verify

现在运行验证/比较过程:

ddrescue-verify -udis0 /dev/source image.verify > image.diff

这很快,因为ddrescue-verify尝试会跳过在(因此选项)source中标记为不可读的部分。image.log-d

输出会告诉你差异。

您还可以查看image.diff差异。该文件与日志文件格式相同ddrescue,差异标记为“未读”,因此您可以使用ddrescuelog.

可能:将差异拉入图像中

要消除差异,您还可以执行以下操作:

# The next 2 commands take a snapshot of your original image
# Probably use lvm or ZFS snapshot to not duplicate all data:
cp image.img image.orig.img
cp image.log image.orig.log
# Now pull in the differences
cp -f image.diff image.log
ddrescue /dev/source image.img image.log

现在您已将image.img和更新image.log为发现的更改。这很快,因为它只尝试读取更改的部分(在每个 1MB 默认值上检测到差异,因此它会复制更多一点)。

注意:最后一步的设计使得您可以根据需要多次重复整个过程。

这不是一个完整的解决方案

很抱歉我无法向您提供完整的解决方案。但在不明确的情况下通过猜测来恢复数据没什么,开箱即用。

然而,使用快照(我推荐 ZFS 或 BTRFS,因为它们比 LVM 快得多)结合比较和提取差异的方法,您也许可以找出正确的内容和错误的内容。

相关内容