BT 下载卡在 0% 或 99%:元数据和分片是两层

用 qBittorrent EE增强版 这类 BT 客户端下载的时候,有两种“卡住”最让人难受:
一种是卡在开头——进度一直 0%,或者显示"正在获取元数据",看着有速度但就是不动。
另一种是卡在末尾——都到 99% 了,最后那一点怎么等都不下来。
这两处的成因完全不同,但都指向同一件事:BT 的传输其实分两层,而我们平时把它们混着看了。
一、先分清两层:元数据,然后是数据
BT 下载不是"一开始就在搬文件内容"。它前面还有一个阶段:
第一层,拿到"元数据"——也就是这份种子到底包含哪些文件、每个文件多大、数据是怎么切分和校验的。
第二层,才是搬数据本身。
为什么这个区分重要? 因为"卡在 0%"和"卡在 99%"分别落在两层上:
- 卡在 0% → 大概率卡在第一层,元数据还没拿到
- 卡在 99% → 在第二层,缺的是某些具体的数据块
把它们混着看,就会出现"明明是同一个软件,怎么两种卡法原因完全不一样"的困惑。
二、第一层:种子文件和磁力链接的区别就在这里
这两种东西看着是"下载入口的二选一",实际上它们携带的信息量完全不同。
种子文件里自带元数据。 文件清单、分片校验信息、tracker 地址——打开就有。所以用种子文件时,第一层是跳过的,直接进入搬数据。
磁力链接里只有一个标识(哈希值)。
它的意思接近:"去找这个哈希对应的那一份东西"。但那一份东西长什么样、包含什么,它自己并不携带。
所以磁力链接必须先去别人那里把元数据要回来。
这就是"磁力链接刚开始慢"的正常原因——不是网络慢,而是它还在找人、还在取元数据。
而且这个阶段的特点很鲜明:
- 一旦连上哪怕一个 peer,元数据通常很快就到手(这点信息量相对于文件本体可以忽略)
- 所以正常节奏是"先卡一下、然后突然开始",而不是"慢慢涨"
- 如果它一直停在 0%,说明一个 peer 都没连上——问题不在"数据没来",而在"人都没找到"
一个很实用的判断:卡在 0% 的时候,去看"连上了几个 peer",而不是去看下载速度。
因为速度在这里是没有意义的:一个 peer 都没有的时候,管道再宽也没用。
还有一种情况值得一提:有时种子文件能下、换成磁力链接就不动。这往往不是链接坏了,而是负责"找人"的那几套机制被关掉了(比如分布式查询被禁用),而种子文件因为自带 tracker 地址,绕过了这个问题。
三、第二层:数据是按"分片"搬的
进入搬数据阶段之后,文件并不是一个字节一个字节顺序流过来的。
它被切成了固定大小的分片,一片一片地传、一片一片地校验。
这个粒度决定了三件可以直接观察到的现象:
现象一:进度是"跳着涨"的。
因为进度的单位是分片,不是字节。 一片下载完并通过校验,进度才会往前跳一格。所以进度条看起来一格一格地走,是正常的。
现象二:校验不过的分片会被丢掉重下。
这时进度会"倒退"。 看到进度回退不用紧张——它不代表下载坏了,而是这一片数据对不上,客户端把它作废了。
现象三:越接近完成,越可能变慢。
这一条就是"卡在 99%"的来源,下面单独说。
四、为什么"最后那一点"特别难下来
原因很具体:最后剩下的那几个分片,持有的人可能非常少。
大部分 peer 是普通下载者,他们手里只有"自己已经下到的那部分"。越靠后的分片,被大家普遍持有的概率越低。 到最后,可能只剩做种者(完整持有全部数据的人)手里才有。
于是出现这个链条:
- 需要的那几片,只有少数人在
- 那几个人刚好不在线(或者上传被占满)
- 进度就停在那儿,而且可能停很久
更要紧的是:只要你缺的那一片没人给你,你就一片也拿不到。 这不是"速度慢",而是"缺的那一块源头不在网上"。
解决方向只有一个,而且不取决于 qBittorrent EE增强版 里的任何设置:需要那份数据的人回来。 一个健康的种子之所以下得快,是因为做种的人多——这也是"老种子的最后一点很难下"的根本原因。
顺带解释一个设计细节:客户端通常会用"优先补最稀有的那一片"的策略,这是为了让整张网更健康(免得大家都卡在同一个缺口上)。但策略只能优化顺序,变不出源头来。
五、由此推出的几条判断
第一条,看清"卡"在哪一层。
- 显示"正在获取元数据",或者长时间 0% → 第一层,去查 peer 数量
- 已经下了一部分,卡在高位 → 第二层,缺的是稀有分片
第二条,别用速度去诊断 0%。
一个 peer 都没有时,速度必然是 0,而这时候该看的是连接情况,不是带宽。
第三条,进度回退不是故障。
它是分片校验失败的正常表现。回退之后会重新下载那一片。
第四条,进度跳着走、有时快有时停,都属于正常。
粒度是分片,而分片的来源分布是不均匀的。
第五条,卡在高位时,别在设置上耗时间。
这不是参数问题。 该确认的是:还有人做种吗?——这个问题只能靠时间或者换种子来解决。
六、按现象定位
| 现象 | 在哪一层 | 原因方向 | 处理方向 |
|---|---|---|---|
| 一直 0%,显示获取元数据 | 第一层 | 一个 peer 都没连上 | 查连接情况,而非速度 |
| 磁力链接不动、种子文件能下 | 第一层 | 找人机制被关掉 | 启用相关机制,或改用种子文件 |
| 卡在 0% 且显示有速度 | 第一层 | 速度是假象,实际无数据源 | 看 peer 数量 |
| 进度一格一格跳 | 第二层 | 正常,粒度是分片 | 无需处理 |
| 进度偶尔回退 | 第二层 | 分片校验失败,作废重下 | 属正常 |
| 卡在 99% 很久 | 第二层 | 缺稀有分片,源头离线 | 等做种者回来,或换种子 |
| 越接近完成越慢 | 第二层 | 后面分片的持有者更少 | 同上 |
| 种子文件里没写 tracker 也能下 | — | 还有其它找人方式 | 属正常 |
七、小结
关于 qBittorrent EE增强版 这类 BT 客户端的使用,记住四条:
- BT 传输分两层:先取元数据,再搬数据——"卡在 0%"和"卡在 99%"分别落在这两层
- 种子文件自带元数据,磁力链接只有一个标识,所以磁力链接必须先找人、再取元数据;它一直 0% 是"没找到人",不是"数据没来"
- 数据按分片传输与校验,所以进度跳着涨、偶尔回退都是正常的
- "卡在最后一点"是源头问题:缺的那几片只有少数人手里才有——这不是参数能解决的,只能等做种者或者换一个种子
这里的经验可以推广:一个传输过程"卡住了",先别急着加大带宽或调参数,而要先问一句——它现在停在哪一个阶段?
同一个“卡住”,落在不同阶段就有完全不同的原因。 把阶段分开看,你会发现其中有一些根本不是“慢”,而是“前面那一步还没完成”——这两种情况的处理方式,差了十万八千里。

浙公网安备 33010602011771号