目前NCBI上许多测序数据都提供亚马逊云或谷歌云的下载方式,甚至有的原始数据只能通过这两种方式下载。而国内下载aws上的文件速度不快,而且连接还不稳定,测序数据动辄几十g,无论用aws cli还是迅雷等普通下载方法,连接一断只能重下,欲哭无泪。
好在github中已经有了专门断点续传的软件,甚至给windows提供了解压即用的打包版本。
该软件通过将大文件划分成若干的小块(默认为5 m),既能多线程下载,又能断点续传。但当某个小块下载的时候连接超时失败了,该软件会保存一个损坏的5 m小块进文件里,而该软件也只会检测文件名和大小是否一致,导致最后下出来的文件大小和云上的完全一致,但里面包含损坏的小块。
万幸aws cli本身也提供了按字节截取大文件一部分下载的功能,只需重下错误的小块再用linux自带的dd命令替换即可。
首先可以在该软件目录的s3_download/log文件夹里找到下载的log,下面这部分就是超时下错的小块。
2023-02-14 13:59:19,601 WARNING - Fail to download subreads.bam - 5342/6815. Read timeout on endpoint URL: "None"
可以看到源文件被分成了6815个5 m小块,其中第5342个5 m小块下载错误。我的源文件大小为35729354014 bytes,即需要重下第28002222081 bytes - 28007464960 bytes的部分。
aws s3api get-object --bucket sample --key subreads.bam --range bytes=28002222080-28007464959 5342.bam
--range 以bytes location定位,第1个字节位置为0,要下第 28002222081 - 28007464960 的部分,参数中的范围前后就都要减一
接着再将下好的大文件的损坏部分替换成重下的小块。
dd if=5342.bam of=subreads.bam bs

文章介绍了如何处理通过AWS下载大型文件时遇到的速度慢和连接不稳定的问题。通过使用GitHub上的断点续传软件和AWSCLI的字节范围下载功能,配合Linux的dd命令,可以实现错误块的重新下载和替换,确保文件完整。此外,还提供了一个检查文件etag值的脚本来验证文件一致性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



