当您逐个文件读取文件时,您是在磁盘周围随机搜索,这比连续数据的批量传输要慢得多。而且,由于最快的 CD 驱动器比最慢的硬盘驱动器慢几十倍(这甚至还没有计算在每个坏扇区上进行多次读取以进行纠错所造成的速度损失),因此您希望尽快从 CD 上获取数据尽可能。
此外,当然,将存档作为 .iso 文件或类似文件意味着,如果您稍后改进软件,您可以重新扫描文件系统,而无需再次挖掘 CD(这可能会进一步降低存储性能)。
同时,尝试恢复损坏的 CD 和损坏的文件系统比您想象的要复杂得多。
所以,这就是我要做的:
将光盘直接块复制到 .iso 文件(无论是在 Python 中还是使用 .iso 文件dd
),并记录所有失败的文件。
散列 .iso 文件,而不是文件系统。如果你真的需要散列文件系统,请记住,在散列之前压缩数据的常见优化(也就是说,tar czf - | shasum
而不是仅仅tar cf - | shasum
)通常会减慢速度,即使对于易于压缩的数据也是如此——但你不妨同时测试一下在几张光盘上的方式。如果您需要验证在法律上有用,则可能必须使用在线服务提供的带时间戳的签名,在这种情况下,压缩可能是值得的。
对于每个成功的 .iso 文件,挂载它并使用基本的文件复制操作(无论是在 Python 中,还是使用标准 Unix 工具),并再次记录所有失败的文件。
获取免费或商业 CD 恢复工具,如 IsoBuster(不是认可,只是搜索中出现的第一个,虽然我之前成功使用过它)并使用它手动恢复所有损坏的光盘。
您可以并行完成许多此类工作——当每个块复制完成时,在您对下一个驱动器进行块复制时,在后台启动文件系统转储。
最后,如果您有 1500 张光盘要恢复,您可能需要购买 DVD 点唱机或自动加载器。我猜新的仍然很贵,但肯定有人以便宜的价格出售旧的。(通过在线快速搜索,首先出现的是 2500 美元的新品和 240 美元的二手......)