生物信息学入门的人,十个里有七八个第一台电脑就是Windows。但打开NCBI的SRA数据库页面,看到一排排下载链接,再低头看一眼本地磁盘剩余空间,很多人会当场愣住——公开测序数据动辄几G、几十G,浏览器下载点几次就断掉,后面的FASTQ转换、比对分析更是无从下手。我自己最开始在Windows系统下折腾SRA数据时也吃足了苦头:要么是prefetch下载到一半报网络错误,要么是fasterq-dump转格式时C盘被临时文件塞满。后来把sratoolkit这套官方工具彻底用熟了才发现,它其实在Windows下相当可靠,问题往往出在前期规划和几个关键参数上。这篇文章就把我从头到尾的完整操作流程、踩过的坑和排查思路整理出来,给需要在Windows下下载SRA数据的朋友做个参考。无论你是刚进实验室的研究生,还是临时要拉一套公开数据集的分析人员,照着这条路走一遍,基本不会出大问题。
1. 动手之前,先把SRA数据下载这件事想清楚
1.1 SRA文件到底是什么,适合直接做分析吗
SRA(Sequence Read Archive)是NCBI维护的原始测序数据归档库,几乎所有公开发表的测序数据都会在这里存一份。SRA内部使用的是一种压缩归档格式,而不是分析工具直接认的FASTQ。SRA文件里除了reads序列本身,还带有测序仪元数据、质量编码体系等信息,所以体积比原始FASTQ小不少。很多人第一次拿到SRR编号时,误以为它就是FASTQ文件,直接丢给比对软件,结果当然是一堆报错。
这里需要先把SRA编号体系说清楚——SRR开头的是SRA里某次具体run的编号;SRX代表一个experiment;SRP代表整个project或study。平时论文里引用的通常是SRP或SRX,而实际下载数据用的是SRR。你在NCBI的SRA Run Selector页面搜索项目编号后,可以勾选需要的样本,再导出对应的SRR列表,这一步是批量下载的基础。
SRA本身是很好的存储格式,但绝大多数下游分析工具不认它。要做序列比对,首先得把它还原成FASTQ,也就是每条read包含四行信息:标识符、碱基序列、分隔符、质量值字符串。整个流程可以概括为“SRA -> FASTQ -> 比对 -> 定量/变异检测”,而SRA转FASTQ这一步,正是sratoolkit最核心的用途。
1.2 为什么不直接用浏览器下载,而要选sratoolkit
sratoolkit是NCBI官方发布的一组命令行工具集,里面包含prefetch、fasterq-dump、fastq-dump、sam-dump等程序。它存在的意义很直接:SRA数据量大,浏览器下载无法断点续传,也不方便批量操作和完整性校验。sratoolkit则是专门针对SRA的存储与传输做了优化,天然支持断点续传、批量清单下载、格式转换,并且在Windows下有原生win64版本,不需要安装Linux环境。
3.0版本之后的sratoolkit把下载和转换拆得很清楚:prefetch负责把SRA文件从NCBI拉到本地;fasterq-dump负责把SRA转成FASTQ。这种拆分有一个好处——下载和转换可以分开重试,不会因为一次网络波动就得整条链路重来。对于动辄几十G的数据集,这个设计能省下大量时间。
1.3 完整链路需要哪些阶段
先把整体流程摆出来,后面再逐步展开细节:
- 在SRA Run Selector或GEO页面上确认需要下载的SRR编号;
- 安装sratoolkit,配置环境变量并完成初始化;
- 用prefetch把SRA文件下载到本地;
- 用fasterq-dump把SRA转成FASTQ;
- 检查文件完整性,确认数据能用于后续比对。
这条链路在Windows和Linux下的逻辑几乎一致。但Windows没有类Unix环境,很多人在路径格式、环境变量、磁盘格式上会卡住,所以我在后面的内容里会重点展开Windows特有的坑。
2. Windows安装与配置sratoolkit:从解压到第一条命令
2.1 下载正确的发行包
sratoolkit的官方下载页面会提供多个平台版本,Windows下选择win64版本的zip包即可。这个工具的好处是不用安装,解压就能直接运行,连依赖库都省了。
下载后,我建议把zip解压到纯英文、无空格的目录,比如D:\bioinfo\sratoolkit.3.1.1-win64。之所以反复强调这一点,是因为后续命令行工具对中文路径、空格路径支持得不够完美,某些版本会莫名出现“file not found”之类的问题。路径纯净,干活省心。
2.2 配置环境变量
为了让prefetch、fasterq-dump这些命令在任意目录下都能直接使用,需要把bin目录加进系统Path:
- 右键“此电脑” -> 属性 -> 高级系统设置 -> 环境变量;
- 在“系统变量”里找到Path,点击编辑,新建一条,填入bin目录的完整路径;
- 保存后关闭当前命令行窗口,重新打开PowerShell或CMD。
验证是否配置成功,输入:
prefetch --version如果能看到版本信息,说明Path配置正常。如果提示“不是内部或外部命令”,大概率是Path没生效,或者bin路径写错了。一个小细节:Windows下修改环境变量后,已经开着的终端不会自动刷新,必须新开一个窗口。
2.3 初始化配置:vdb-config是很多人忽略的一步
新版本sratoolkit在第一次运行prefetch或fasterq-dump时,通常都会提示需要初始化配置。标准做法是运行:
vdb-config --interactive运行后进入一个文本配置界面,可以设置repository locations(默认下载/缓存目录)、本地缓存最大空间、是否启用云访问支持。界面操作不复杂:方向键切换选项,回车确认,最后按X退出,退出时会询问是否保存,选yes即可。
如果你不想进交互界面,也可以用命令行参数直接指定配置,比如:
vdb-config --set /repository/user/main/public/root=D:/sra_cache这条命令会把SRA默认缓存目录指定到D盘,避免后续下载把C盘塞满。很多人电脑的C盘剩余空间比D盘紧张得多,这个设置非常关键。
2.4 一个小坑:Windows下杀毒软件可能拦
Windows上运行sratoolkit时,部分杀毒软件或Windows Defender会对exe程序做实时扫描,影响下载速度,极端情况下还会把下载文件隔离掉。如果你发现下载速度异常慢,或者报权限相关错误,可以先把sratoolkit目录加入杀毒软件白名单。这个问题不是每台机器都出现,但我在自己的电脑上遇到过Defender把prefetch生成的临时文件误处理的情况,排查了很久才找到原因。
3. prefetch下载SRA:最常用命令的参数拆解
3.1 基础用法
prefetch是sratoolkit里负责下载的命令,最核心的用法是:
prefetch SRR12345678 -O D:\sra_data-O参数指定输出目录,执行后SRA文件会下载到D:\sra_data并保留.sra扩展名。如果不带-O,Windows下默认会存到C:\Users\用户名\ncbi\sra目录,路径对应vdb-config里的缓存配置。
一个容易误解的点:prefetch在下载过程中会先把数据写入临时缓存区,等下载完成后再落到目标目录。所以如果你一边下载一边去查-O目录,可能会发现目录是空的或者只有部分文件,这其实很正常。
3.2 关键参数逐个说明
| 参数 | 作用 | 示例 |
|---|---|---|
| -O | 指定输出目录 | prefetch SRR12345678 -O D:\sra_data |
| --max-size | 限制允许下载的最大文件大小(KB),防止误下载超大文件把磁盘写满;设置为0表示不限制 | prefetch SRR12345678 --max-size 50G |
| --transport | 指定传输协议,可选http和https | prefetch SRR12345678 --transport https |
| --type | 下载类型,日常一般不用改 | prefetch SRR12345678 --type sra |
| --progress | 显示下载进度 | prefetch SRR12345678 -O D:\sra_data --progress |
这里特别说一下--max-size。在部分版本里默认值并不大,如果你下载的是全基因组测序数据,很容易提示“文件超过限制”而跳过。我个人的习惯是下载大文件之前直接用--max-size 0彻底不限制,或者明确指定一个比预期文件更大的值,避免半路被拦。
3.3 断点续传:中断后不用从头再来
prefetch非常实用的一个特性是断点续传。下载过程中如果网络断开或者你手动中断,重新运行相同的命令,prefetch会检测本地已有的部分文件,从断点继续下载。在拉取几十G的大数据时,这个功能能救命,不至于一次断网就全部重来。
实测中如果遇到续传失效,多半是本地的临时文件损坏或者不完整,这时把缓存目录下对应的文件删除,再重新跑一次即可。删除时注意看清文件后缀,部分版本中临时文件以.tmp或.part结尾。
3.4 关于并发下载:不要盲目开太多
prefetch本身是单任务下载。如果有一批SRR要下,可以同时开几个终端窗口跑不同SRR来提速。但Windows下同时开太多prefetch容易把磁盘IO占满,而且NCBI对并发请求也有限制,触发限制后所有窗口都可能报错。
我在拉取一个包含20个SRR的RNA-seq数据集时试过,4个窗口并发跑,磁盘写入成了瓶颈;后来改成2个窗口,总时间反而更短。所以不要迷信并发数越多越好,2到4个进程是我实测下来比较平衡的数量。
4. fasterq-dump转换FASTQ:格式还原的关键一步
4.1 为什么一定要转换
prefetch下载下来的是.sra文件,不能直接给STAR、HISAT2、BWA这类比对软件使用。比对软件通常需要FASTQ格式的输入,也就是四行一条记录:序列标识符、碱基序列、分隔符、质量值字符串。SRA是二进制归档格式,分析工具读不了。所以下载完成后,下一步必须转换成FASTQ。
这个转换过程不是简单的解压,而是把SRA内部存储的reads和质量值重新组装成标准文本格式。fasterq-dump这个工具在速度和并发上比老版fastq-dump有大幅提升,是目前首选。
4.2 单端与双端数据该怎么处理
命令:
fasterq-dump SRR12345678 -O D:\fastq_output -e 8 -t D:\fastq_temp -p参数说明:
- -O:输出FASTQ文件的目录;
- -e:使用的线程数,一般给CPU核心数的一半即可,太多会造成磁盘压力;
- -t:临时文件目录,这个参数在Windows下非常重要;
- -p:显示转换进度;
- -m:限制最大内存,例如2GB;
- --split-3:遇到双端数据自动拆分成_1和_2两个文件,单端数据则不添加后缀。
双端测序数据,我推荐这样写:
fasterq-dump SRR12345678 --split-3 -O D:\fastq_output -e 8 -t D:\fastq_temp生成结果会是SRR12345678_1.fastq和SRR12345678_2.fastq两个文件,分别代表双端reads的两个方向。--split-3和-S(即--split-files)的差别在于:--split-3更智能,单端数据不会强行拆分出没用的空文件;-S则是无条件拆分。日常用--split-3就好。
4.3 为什么临时目录这么关键
fasterq-dump在转换过程中,会先把reads写入临时目录里的文件,最后再合并成最终FASTQ。默认情况下临时文件写到C盘用户临时目录。Windows的C盘通常空间不大,而一个SRA转成FASTQ后体积可能膨胀两三倍,C盘很容易被塞满,然后直接报“No space left on device”。
我自己遇到过一回:C盘是256G固态,剩余不到50G,当时转一个40G的SRA,想着输出目录在D盘就没在意临时目录,结果跑了一个小时,fasterq-dump突然报错退出。一查C盘可用空间变成了0,临时文件占了将近80G。所以不管输出目录在哪里,-t一定要指到空间充足的盘。
4.4 转换后会占多少空间,怎么规划
SRA是压缩归档格式,转出来的FASTQ体积通常远大于SRA文件。一个几十G的SRA,双端FASTQ可能达到上百G。转换前要确认输出盘剩余空间足够,并且要一次性预计双端两个文件的总大小。
转换完成后,如果确认FASTQ文件完整无误,就可以删除.sra文件释放空间。我的固定流程是:先转出FASTQ,再统计reads条数,确认和SRA Run Selector页面显示的spots数量一致,然后删除SRA。宁可多等一会儿,也尽量不要让磁盘同时放着SRA和FASTQ两份数据。
5. 实操中Windows环境的常见报错与排查链路
5.1 prefetch下载报错或卡住
最常见的报错是网络相关,比如下载走到一定百分比后提示连接错误。遇到这种问题,我的排查顺序是:
- 先确认网络稳定,下载一个小文件测试连通性;
- 看报错是连接超时还是服务器返回异常;
- 如果默认协议不行,尝试显式指定
--transport https; - 如果依然失败,删除本地缓存目录中对应的临时文件后重跑。
有时候是NCBI服务器端负载高导致下载缓慢或超时,这种属于对方服务端问题,往往换个时间段错峰下载就好了。之前下载某个数据集时,白天反复失败,晚上九点后再跑就顺利完成了。
5.2 prefetch跑完,目标目录里没有文件
这个问题在Windows用户中遇到得特别多。原因通常是下载文件被写入了vdb-config配置的默认缓存目录,也就是C:\Users\用户名\ncbi\sra,而不是-O指定的目录。
解决办法有两个:一是使用命令时带上-O并写绝对路径;二是直接去默认缓存目录找文件。如果你希望以后所有下载都统一放到一个地方,可在vdb-config里把repository root改成空间充足的盘符,这样不带-O也会存到指定目录。我个人更倾向于统一用vdb-config管缓存目录,这样prefetch和fasterq-dump的默认行为都在掌控之下。
5.3 磁盘格式不支持大文件
SRA文件单个经常超过4G。如果存放文件的磁盘还是FAT32格式,Windows会直接报“文件过大”。FAT32的文件大小上限是4G,解决办法是把存放数据的磁盘转成NTFS。现代Windows系统默认都是NTFS,但移动硬盘或老U盘偶尔还是FAT32。遇到这种报错别急着怪工具,先看一眼磁盘格式。
5.4 fasterq-dump报内存不足或进程退出
fasterq-dump在转换超大数据集时,如果电脑卡顿或者进程异常退出,可以从三方面优化:
- 增加
-m参数限制内存,例如-m 2GB; - 降低
-e线程数,从8降到4; - 确保
-t指定的临时目录有足够空间。
还要注意32位Windows系统处理超大文件会受限,建议sratoolkit在64位系统上运行。现在32位系统虽然不常见了,但老机器上有时还会碰到。
提示:如果你的Windows系统内存本身不大,比如只有8G,转换30G以上的SRA文件时会非常吃力。这时候可以考虑把fasterq-dump放到云服务器或者实验室的工作站上跑,本地只做下载和初步查看。
5.5 路径和文件名中的坑
Windows的路径分隔符是反斜杠,终端里配合引号使用更稳妥。我建议所有路径都写成不带空格的纯英文路径;如果目录确实带空格,必须用双引号包住整个路径,否则prefetch会认为参数被截断。例如:
prefetch SRR12345678 -O "D:\my data\sra"实测下来,带空格目录在部分版本下依然可能报错,所以能避免就尽量避免。中文路径也同理,SRA工具对这些场景的兼容性并不理想。
6. 提升整体效率的若干组合用法
6.1 批量下载:一份清单文件搞定几十个SRR
SRA Run Selector页面最下方通常可以导出一个包含所有SRR编号的txt文件。然后直接执行:
prefetch --option-file SRR_List.txt -O D:\sra_dataprefetch会逐条读取清单并下载。这个操作方式比写循环脚本简单得多,也稳定得多。
一个小提醒:从网页复制的编号可能带不可见字符或制表符,最好用记事本另存为UTF-8编码,不要带BOM。带BOM的编码会让第一行编号的前面多出一个不可见字符,prefetch很可能报错。
6.2 下载完成之后立刻转FASTQ
如果磁盘空间不够同时保存SRA和FASTQ,可以下载完一个就转换一个,转换成功后删除SRA。一条龙命令大概是这样的:
prefetch SRR12345678 -O D:\sra_data fasterq-dump D:\sra_data\SRR12345678.sra --split-3 -O D:\fastq_data -e 8 -t D:\fastq_temp Remove-Item D:\sra_data\SRR12345678.sra这样每个环节都能分开重试,又不必担心磁盘同时被两份数据占满。在PowerShell里直接执行这三行即可,CMD用户把最后一行换成del D:\sra_data\SRR12345678.sra。
6.3 完整性检查:别等比对才发现数据坏了
下载和转换都可能因为网络波动、磁盘坏道等原因导致文件损坏。最简单的检查方式是核对文件大小和条目数:prefetch下载完成后,看SRA文件大小是否和NCBI页面标注一致;fasterq-dump转换完成后,统计FASTQ文件的reads条数,和SRA Run Selector页面的spots数量对比。
统计条数在Windows下可以用PowerShell的Select-String:
(Select-String -Path "D:\fastq_data\SRR12345678_1.fastq" -Pattern "^@").Count如果数量一致,基本可以放心进入后续分析。这个步骤虽然花不了多少时间,但能避免比对跑了一半才发现FASTQ损坏的尴尬。
6.4 其他工具:fastq-dump和sam-dump
sratoolkit包里除了prefetch和fasterq-dump,还有老版fastq-dump、sam-dump、vdb-dump等工具。fastq-dump是上一代转换工具,速度慢但兼容性好,遇到fasterq-dump处理不了的旧格式数据时可以救急:
fastq-dump --split-3 SRR12345678 -O D:\fastq_outputsam-dump则可以把SRA转成SAM格式,适合少数需要直接在SAM层做处理的场景,日常使用频率不高。对绝大多数人来说,记住prefetch和fasterq-dump两个工具就足够覆盖整个SRA下载和转换流程了。
最后分享一点个人体会:Windows下用sratoolkit下载SRA数据,最大的问题从来不是命令记不住,而是环境细节。磁盘格式是不是NTFS、默认缓存目录会不会把C盘塞满、路径里有没有中文和空格、杀毒软件是不是在背后捣乱——这些才是真正决定你能不能顺利跑完流程的关键。我一开始也被各种报错折腾得焦头烂额,但把prefetch和fasterq-dump的常用参数吃透之后,整个流程几乎可以无脑重复执行。如果你要下载的数据量特别大,建议先拿一个小SRR把全流程走一遍,确认输出和预期一致再批量跑,踩坑成本能控制在最低。条理清晰之后,Windows下载SRA数据这件事,真的没有想象中那么难。