亚马逊AWS S3云下载大文件断点续传及重下错误片段的方法

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

 目前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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值