最近我将一组数据从一台服务器传输到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
我强烈怀疑你的数据是在运输过程中被scp(1)
破坏的。
TCP提供流量流的(弱)16位CRC校验和。因为它只有16位长,依靠TCP来保证数据完整性意味着损坏的数据包仍然会大约每(2^16)个损坏的数据包验证一个。我早就失去了链接(和数学),但模糊地记得,这意味着在公共互联网上,每隔2到4gb就会验证一次损坏的数据是正确的——尽管这些数字依赖于我阅读该统计数据时特定的错误引入率。
SSH Version 2在协议中引入了消息身份验证检查。这些是对等体之间协商的,但我认为允许的最弱的是MD5,它提供数据的128位加密散列。加密哈希比循环冗余检查先进得多,循环冗余检查在20年前用于检测数据传输错误时更为常见,128位是校验和大小的显着扩展。如今,我们可能还不够信任MD5,无法完全依赖它来抵御专门的攻击者,但它应该足以发现除最不可思议的情况外所有情况下因错误而发生的错误。
我会在其他地方寻找你的损坏——首先,你存储数据的目标驱动器。
我知道这是一个古老的问题,但我不认为scp可能负责任;我猜是文件名冲突。
你说你有几个scp副本同时运行。上面粘贴的命令将/folder1
, /folder2
和/folder3
的内容复制到/home
中。如果你有两个文件名相同的文件,例如
/folder1/argle.fastq.gz
/folder1/bargle.fastq.gz
/folder2/argle.fastq.gz
,那么你将在/home
上有一个文件名冲突。由于scp会很高兴地覆盖dest
上的文件,我不认为它在工作时对文件产生锁,因此将两个具有相同名称的不同文件复制到同一位置很容易导致文件损坏。