620 words
3 minutes
SRA数据下载与FASTQ转换
2026-07-15
2026-07-17

1. 安装软件#

推荐创建独立环境:

Terminal window
conda create -n sra \
-c conda-forge \
-c bioconda \
sra-tools pigz seqkit
conda activate sra

检查安装:

Terminal window
prefetch --version
fasterq-dump --version
pigz --version
seqkit version

2. 设置 accession 和工作目录#

Terminal window
ACC="SRRXXXXXXXX"
WORKDIR="/path/to/sra_data"
mkdir -p "$WORKDIR"
cd "$WORKDIR"

将:

SRRXXXXXXXX

替换为实际的 SRA run accession,例如 SRR、ERR 或 DRR 开头的编号。


3. 下载 SRA 数据#

Terminal window
prefetch \
--max-size 100G \
--progress \
"$ACC"

下载过程中如果出现:

transfer incomplete
connection failed
retrying
reopened, retrying

通常表示网络中断后程序正在自动重试。

如果下载最终失败,不要删除已经生成的 accession 目录,直接重新执行相同命令:

Terminal window
prefetch \
--max-size 100G \
--progress \
"$ACC"

检查下载进程:

Terminal window
pgrep -af "prefetch.*${ACC}"

检查已下载的数据大小:

Terminal window
du -sh "$ACC"

4. 检查下载目录#

下载完成后通常会生成:

SRRXXXXXXXX/
├── SRRXXXXXXXX.sra
├── SRRXXXXXXXX.sra.vdbcache
└── 其他依赖文件

部分 accession 可能包含额外的参考序列依赖文件。

这些文件属于同一个 SRA 数据包,不要单独移动或删除。


5. 验证下载完整性#

Terminal window
vdb-validate "$ACC"

也可以直接验证 .sra 文件:

Terminal window
vdb-validate "$ACC/$ACC.sra"

验证通过后再进行 FASTQ 转换。


6. 创建输出和临时目录#

Terminal window
mkdir -p fastq tmp

检查磁盘空间:

Terminal window
df -h .
df -h ./tmp

fasterq-dump 转换时可能产生大量未压缩 FASTQ 和临时文件,应预留足够空间。


7. 转换为双端 FASTQ#

Terminal window
fasterq-dump "$ACC" \
--split-files \
-e 16 \
-t ./tmp \
-O ./fastq \
-p

参数含义:

--split-files 将双端 reads 分为 R1 和 R2
-e 16 使用 16 个线程
-t ./tmp 指定临时目录
-O ./fastq 指定输出目录
-p 显示转换进度

双端数据通常生成:

fastq/SRRXXXXXXXX_1.fastq
fastq/SRRXXXXXXXX_2.fastq

单端数据通常只生成:

fastq/SRRXXXXXXXX.fastq

8. 压缩 FASTQ#

双端数据:

Terminal window
pigz -p 16 \
"fastq/${ACC}_1.fastq" \
"fastq/${ACC}_2.fastq"

单端数据:

Terminal window
pigz -p 16 "fastq/${ACC}.fastq"

压缩后得到:

fastq/SRRXXXXXXXX_1.fastq.gz
fastq/SRRXXXXXXXX_2.fastq.gz

或者:

fastq/SRRXXXXXXXX.fastq.gz

9. 检查 FASTQ 文件#

检查 gzip 完整性:

Terminal window
gzip -t fastq/*.fastq.gz

查看 FASTQ 统计:

Terminal window
seqkit stats fastq/*.fastq.gz

对于双端数据,应重点确认 R1 和 R2 的 reads 数量一致。


10. 泛用完整脚本#

#!/usr/bin/env bash
set -euo pipefail
ACC="${1:?Usage: $0 <SRA_ACCESSION> [WORKDIR]}"
WORKDIR="${2:-$PWD}"
THREADS="${THREADS:-16}"
MAX_SIZE="${MAX_SIZE:-100G}"
mkdir -p "$WORKDIR"
cd "$WORKDIR"
prefetch \
--max-size "$MAX_SIZE" \
--progress \
"$ACC"
vdb-validate "$ACC"
mkdir -p fastq tmp
fasterq-dump "$ACC" \
--split-files \
-e "$THREADS" \
-t ./tmp \
-O ./fastq \
-p
shopt -s nullglob
fastq_files=(fastq/"${ACC}"*.fastq)
if (( ${#fastq_files[@]} == 0 )); then
echo "Error: no FASTQ files were generated for $ACC" >&2
exit 1
fi
pigz -p "$THREADS" "${fastq_files[@]}"
gzip -t fastq/"${ACC}"*.fastq.gz
seqkit stats fastq/"${ACC}"*.fastq.gz

保存为:

download_sra.sh

添加执行权限:

Terminal window
chmod +x download_sra.sh

运行:

Terminal window
./download_sra.sh SRRXXXXXXXX /path/to/sra_data

也可以只指定 accession,默认下载到当前目录:

Terminal window
./download_sra.sh SRRXXXXXXXX
SRA数据下载与FASTQ转换
https://blog.lihuax.online/posts/work/dev/sra/
Author
Lihuax
Published at
2026-07-15
License
CC BY-NC-SA 4.0