在python中存档数据CD / DVD的最佳方法是什么?

时间:2013-10-31 21:56:17

标签: python backup archive cd dvd

我必须存档大量的CD和DVD数据,我认为这是一个有趣的问题,人们可能会有一些有用的输入。这是设置:

  • 该脚本将在多个平台上的多个框上运行,所以我认为python是最好的语言。如果逻辑会产生瓶颈,那么任何其他语言都会起作用。
  • 我们需要存档~1000张CD和~500张DVD,因此速度是一个关键问题
  • 数据非常有价值,因此验证很有用
  • 光盘相当陈旧,因此很多光盘很难或无法读取

现在,我计划使用shutil.copytree将文件转储到目录中,并比较文件树和大小。也许扔掉一个快速哈希,虽然这可能会减慢太多东西。

所以我的具体问题是:

  • 从CD / DVD等慢速媒体上复制文件的最快方法是什么? (或方法甚至重要)
  • 有关如何处理可能出现故障的光盘的任何建议?你如何检测有问题的光盘?

2 个答案:

答案 0 :(得分:1)

当您逐个文件阅读时,您会在光盘周围随机搜索,这比连续数据的批量传输慢很多。并且,由于最快的CD驱动器比最慢的硬盘驱动器慢几十倍(并且甚至不计算在每个坏扇区上进行多次读取以进行纠错的速度),您希望尽快从CD中获取数据尽可能。

当然,将存档作为.iso文件或类似文件意味着,如果您以后改进软件,则可以重新扫描文件系统,而无需再次挖掘CD(可能会进一步降级)存储)。

与此同时,试图恢复损坏的CD和损坏的文件系统要比你期望的复杂得多。

所以,这就是我要做的事情:

将光盘直接复制到.iso文件(无论是使用Python还是使用dd),并记录所有失败的文件。

散列.iso文件,而不是文件系统。如果您确实需要对文件系统进行哈希处理,请记住,在散列之前压缩数据的常见优化(即tar czf - | shasum而不仅仅是tar cf - | shasum)通常会减慢速度,即使对于易于压缩的情况也是如此数据 - 但你也可以在几张光盘上测试它。如果您需要验证在法律上有用,则可能必须使用在线服务提供的带时间戳签名,在这种情况下,压缩可能 值得。

对于每个成功的.iso文件,安装它并使用基本的文件复制操作(无论是在Python中,还是使用标准的Unix工具),并再次记录所有失败的文件。

获得像IsoBuster这样的免费或商业CD恢复工具(不是认可,只是在搜索中出现的第一个,虽然我之前已经成功使用过它)并使用它来手动恢复所有损坏的光盘。 / p>

您可以并行完成大量此项工作 - 当每个块复制完成后,在您对下一个驱动器进行块复制时,在后台启动文件系统转储。

最后,如果您要恢复1500张光盘,您可能需要投资DVD点唱机或自动加载器。我猜测新的仍然相当昂贵,但必须有人出售旧的便宜很多。 (从网上快速搜索,首先出现的是新款2500美元和240美元......)

答案 1 :(得分:0)

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

如果你仍然要写自己的...回答你的具体问题:

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

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