使用“scp”进行传输后的数据失真

时间:2011-12-09 00:33:31

标签: scp corruption hpcc

最近我将一组数据从一台服务器转移到hpcc(高性能计算) 命令就像:

scp /folder1/*.fastq.gz xxx@hpcc:/home/
scp /folder2/*.fastq.gz xxx@hpcc:/home/
scp /folder3/*.fastq.gz xxx@hpcc:/home/

我打开几个终端同时传输数据。 总共我有大约50个这样的fastq.gz文件,每个大约10GB。 我只是想知道,当以上述方式传输时,数据(特别是如此大的数据)是否有可能被扭曲?

因为服务器上的数据状况良好;而复制到hpcc后的一些数据是扭曲的。

THX THX

2 个答案:

答案 0 :(得分:3)

我强烈怀疑您的数据在scp(1)传输过程中已损坏。

TCP提供(弱)16 bit CRC checksum of traffic streams。因为它只有16位长,依靠TCP来保证数据完整性意味着损坏的数据包仍将大约每隔2 ^ 16个被破坏的数据包验证一次。我早就失去了链接(和数学),但是模糊地回想一下,这意味着在公共互联网上每两到四千兆字节就会验证一次损坏的数据是正确的 - 尽管这些数字依赖于特定的当我读到该统计数据时的错误引入率。

SSH Version 2 introduced Message Authentication Checks进入协议。这些是在对等体之间协商的,但我希望最弱的允许是MD5,它提供数据的128位加密散列。密码散列比循环冗余校验更先进,循环冗余校验在二十年前检测数据传输错误更常见,128位是校验和大小的显着扩展。我们可能不会相信MD5足以依赖它来抵抗专门的攻击者,但它应该足以发现在最令人难以置信的情况下错误发生的错误。

我会在其他地方寻找您的贪污 - 首先,目的地驱动您存储数据的位置。

答案 1 :(得分:1)

我知道这是一个古老的问题,但我认为scp也不负责任;我的猜测是文件名冲突。

你说你有几个scp副本同时运行。上面粘贴的命令会将/folder1/folder2/folder3的内容复制到/home。如果你有两个文件名相同的文件,例如

/folder1/argle.fastq.gz
/folder1/bargle.fastq.gz    
/folder2/argle.fastq.gz

然后你会在/home上发生文件名冲突。由于scp会愉快地覆盖dest上的文件,并且我认为它在文件工作时不会锁定文件,因此将同名的两个不同文件复制到同一个地方很容易导致文件损坏。