3

我必须从 CD 和 DVD 上归档大量数据,我认为这是一个有趣的问题,人们可能会对此提出有用的意见。这是设置:

  • 该脚本将在多个平台上的多个盒子上运行,所以我认为 python 将是最好的语言。如果逻辑造成瓶颈,则任何其他语言都可以。
  • 我们需要存档约 1000 张 CD 和约 500 张 DVD,因此速度是一个关键问题
  • 数据非常有价值,因此验证将很有用
  • 光盘很旧,所以很多光盘很难或无法阅读

现在,我正计划使用 shutil.copytree 将文件转储到目录中,并比较文件树和大小。也许可以快速散列一下,尽管这可能会使事情变得太慢。

所以我的具体问题是:

  • 从 CD/DVD 等慢速介质上复制文件的最快方法是什么?(或者该方法是否重要)
  • 关于如何处理可能出现故障的光盘的任何建议?您如何检测有问题的光盘?
4

2 回答 2

1

当您逐个文件读取文件时,您是在磁盘周围随机搜索,这比连续数据的批量传输要慢得多。而且,由于最快的 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 美元的二手......)

于 2013-11-04T19:14:41.243 回答
0

编写自己的备份系统并不好玩。您是否考虑过寻找即用型备份解决方案?有很多很多免费的...

如果您仍然必须编写自己的... 回答您的具体问题:

  • 对于 CD/DVD,您通常首先必须掌握映像(使用类似的工具mkisofs),然后将映像写入介质。有一些工具可以为您包装这两种操作(genisofs我相信),但这通常是过程。

  • 要验证备份质量,您必须读回所有写入的文件(通过安装新写入的 CD)并将它们的校验和与原始文件的校验和进行比较。为了进行增量备份,您必须为您保存的每个文件保留校验和存档(包括备份日期等)。

于 2013-10-31T22:18:31.727 回答