我正在寻找一种有效的方法来部分检查慢速传输介质上“大”数据集的完整性。这似乎是一个常见问题,因为文件大小与传输速率不成比例。
例如,对于具体数字,通过USB2传输数TB的数据。通过将每个字节读入散列或校验和来检查此数据是否仍然有效需要一天,并增加了驱动器故障的风险。
相反,此代码需要验证随机数据,并根据可用时间提供有效概率。如果允许运行足够长,则将验证所有块(读取整个数据集的基本情况)。
用法“故事”:
- 存储在大型加密容器中的数据(大小1TB ... 1GB)
- 每个容器在不同位置的多组驱动器上冗余备份
- 必须在不知道基础数据或密钥的情况下进行验证检查。
该方法需要检测哪些故障模式:
- 存储传输故障(例如,控制器丢弃部分物理地址)
- 扇区错误(没有为特定块返回数据)
- 单比特错误(非ECC内存或高速缓存)
检测到错误时,将从冗余存储中恢复数据。验证数据可能必须单独存储。
由于目标是数据完整性,文件共享网络中的技术似乎不适用 - “哈希树”需要在每个节点上完全存储哈希值,这似乎比没有主动攻击者的场景。
答案 0 :(得分:2)
通过USB2进行转移,对吗?因此你应该知道:
你必须考虑这些信息来部署一个算法,增加一些保证,而不是CRC提供的保证,否则它将是徒劳的。如果我记得很清楚,16位CRC可以检测到不超过16位的任何单个错误突发,以及其中一小部分错误突发。
您可以从维基百科开始:http://en.wikipedia.org/wiki/USB2和http://en.wikipedia.org/wiki/Cyclic_redundancy_check。
答案 1 :(得分:1)
您可能希望尝试使用PAR2之类的内容来创建冗余数据。这将允许您检查和更正数据,并且可能可以转换为使用随机访问。
答案 2 :(得分:0)
如何为文件中的数据运行存储哈希值或校验和值?然后,您只需读入数据的受限部分即可对文件内容进行有限的验证。