我有一种非常奇怪的行为,从CD读取数据文件:如果我从CD中复制几个相同的文件,数据是不一致的。我不知道原因(没有读取错误通知,其他CD可以在同一单元上正常工作)。
每次都会在不同的地方发生错误,所以我的猜测是,如果我对文件做了几次拷贝,每个字节的值都与大多数副本一致,那么这些错误就可以修复。
我试着使用dd救援,但它没有检测到任何错误(它得到错误的数据,但没有检测到错误)。然而,如果dd救援检查了它读取的数据,那么它显然会发现不一致。
因此,我是否可以通过验证复制的数据来修复此CD中的文件,并根据需要重复复制一次,以猜测每个字节的正确值?
谢谢!
发布于 2016-12-03 13:57:43
我没有很好的解决方案,但通常情况下,如果每次读取数据与CD-ROM不同,对我来说,这听起来更像是硬件问题,而不是关于有缺陷的CD的实际问题,因为CD涉及ECC,这意味着,要么可以读取扇区,要么可以读取,如果可以读取,它将显示稳定的数据。
还可能使用ddrescue选项-d访问源,因为某些操作系统可能会在readahead上发生读取错误后(在后台完成)发送随机数据。
试着让我们换台不同的计算机,不要共享其他计算机的任何硬件,看看你是否还能得到这个令人费解的结果。
但是请注意:执行2次ddrescue运行可能会创建两个不同的映像,因为如果存在读取错误,则可能会恢复源的不同部分。(你写,没有错误。也许选项-d的情况有所不同。)
ddrescue图像如果您可以排除错误的硬件,并且希望再次将图像与源进行比较,而不需要再提取另一个映像,那么您也许可以尝试使用my ddrescue-verify来诊断这些差异。
ddrescue-verify仅限于源代码(可能仅限于Linux ),因此您需要知道如何使用开发/编译系统。
如今,ddrescue-verify并不是一个易于使用的诊断工具。它的创建是为了能够快速验证,如果图像是通过慢速网络链路正确拍摄的,所以在这样的情况下,您肯定不能等待完整的图像在慢速线路上传输不止一次。
如果ddrescue和ddrescue-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快得多),再加上比较和拉出差异的方法,您也许可以找出哪些是正确的,哪些是不正确的。
https://unix.stackexchange.com/questions/270232
复制相似问题