我在 Debian 服务器上使用 Transmission WebUI 时注意到,当下载开始时,Transmission 会下载大约 5MB,然后停顿几分钟才继续。仔细检查后,我意识到在这段停顿时间内,下载目录中的下载文件会“增大”。一旦此文件达到下载的大小,Transmission 就会从停止的地方继续下载。
我只是想知道为什么会这样?为什么在下载开始时将文件扩展为全尺寸,而不是在下载过程中扩展?我曾以为它可能与可用空间有关,但它肯定使用某种du
东西在下载开始前检查下载目录中的可用空间。
答案1
为整个文件预先分配空间可确保 torrent 客户端不会出现下载了部分文件后因可用空间不足而不得不停止的情况。毕竟,下载开始时可能有足够的可用空间,但如果不保留这些空间,如何保证在下载完成之前这些空间仍然可用呢?
根据客户端的不同,这可能是一个可配置的选项。客户端甚至可能允许使用稀疏文件在支持它们的文件系统上。
答案2
这是由于 torrent 传输的方式和 的实现所致Transmission
。您可能知道,它利用 p2p 通信从许多对等点获取文件片段。该协议试图在对等点之间平衡上传带宽。为实现此目的,对等点会定期交换已下载的 torrent 片段、当前带宽以及允许(或测量)的最大上传带宽的信息,因此理想情况下,您的客户端会选择当前负载最低且尚未加载片段的对等点。这会导致片段加载无序。因此,客户端可能会首先加载不在特定文件开头的片段。Transmission
如果尚未完成,客户端会在要接收的片段之前预先分配所有必要的空间。这需要一些时间,因为Transmisson
还需要更新新分配的片段的所有校验和。