SFTP Resume: How to Continue an Interrupted Download (Every Client)
On this page ▾
Yes, an SFTP download can be resumed: the protocol lets a client read a file from any byte offset, so nothing has to start again from zero. Whether it actually happens depends on the client and on whether the file on the server is still the same file. This page explains how resume works and gives the exact steps for evoftp, lftp, FileZilla, WinSCP and Cyberduck.
How resume works in SFTP
Every SFTP read request names an offset and a length, so a client that stopped at byte 3,000,000,000 simply asks for the bytes after it. There is no “resume” command; a client looks at what it already has on disk and reads from the end of it. Two consequences follow.
- The partial file must be the same file. The client knows how many bytes it has, not whether they are correct. If the server file was replaced or is still being written by a torrent client, appending produces a corrupt file. Good clients compare size (sometimes checksums) first.
- Segmented clients need their own bookkeeping. A single-stream client writes start to end, so progress is the local file size. A segmented client such as lftp pget or evoftp downloads several byte ranges at once, so the file has holes and its size means nothing; these clients keep a status file next to the download recording which ranges are done. Delete it and the download starts over.
evoftp
evoftp resumes automatically; there is no setting. It keeps a small sidecar named filename.evoftp-part next to the partial file, recording each segment’s progress. If the transfer is cancelled, the connection drops, or the app is closed:
- Reconnect and browse to the same remote file.
- Download it into the same local folder (double-click, Ctrl/⌘+D, or Download).
- evoftp reads the sidecar and continues each segment from where it stopped. Bytes already on disk count as done immediately and are not fetched again.
Failed or cancelled rows also show a Retry arrow that does the same. The sidecar is deleted when the file completes. evoftp starts from scratch in two cases: the sidecar is missing, or the file’s size or remote path no longer matches what the sidecar recorded, which is deliberate, because appending to a changed file would corrupt it. evoftp has no Overwrite/Resume dialog yet; re-downloading a completed file overwrites it.
lftp
lftp is installed on every EvoSeedbox server. The -c flag means continue:
get -c bigfile.mkv pget -c -n 8 bigfile.mkv mirror -c --use-pget-n=8 /downloads/Series ./Series
Per the lftp manual, get -c is “continue, reget”; pget -c “continue transfer. Requires lfile.lftp-pget-status file” (lftp’s equivalent of the evoftp sidecar); mirror -c “continue a mirror job if possible”, with –use-pget-n setting connections per file. pget without -c starts over.
FileZilla
FileZilla resumes single-stream downloads; it never splits one file across connections, as its developers state on the FileZilla forums (threads 24720 and 35292). When the target exists you get a file-exists prompt with the actions Ask for action, Overwrite, Overwrite if source newer, Overwrite if size differs, Overwrite if size differs or source newer, Resume, Rename and Skip.
- Queue the same file into the same local folder again.
- In the prompt, choose Resume.
- To make it the default, open Edit → Settings → Transfers → File exists action and set the download action to Resume. Transfer → Default file exists action does the same for the current session only. Downloads and uploads are set separately.
If your default is Overwrite, FileZilla silently re-downloads from zero, the most common reason people think resume “does not work”.
WinSCP
WinSCP’s docs state it “supports resuming file transfers with SFTP and FTP protocols. SCP and WebDAV protocols do not allow it.” It downloads to a temporary name: “If your transfer is interrupted, a partial file (with .filepart extension) remains in the target folder.” Then: “After you try to transfer the file a second time, WinSCP looks for the partial file. If it finds a partial file, it offers you chance to resume the transfer.”
- Leave the .filepart file where it is.
- Download the same file to the same folder and accept the resume prompt.
- The setting is on Preferences → Endurance; transfer to temporary filename is on by default above a threshold that “is initially 100 KB”. Disabled means no partial file and nothing to resume.
Cyberduck
Cyberduck offers Resume in its existing-file prompt: “Append to existing files and skip files that match the file size and checksum if available.” The Transfers window has a Resume button that “will try to finish a transfer previously interrupted”, and the list “is retained when the application is closed”. Cyberduck can also download in segments (Preferences → Transfers → General → Downloads); its known-issues page notes the segment merge fails if any part is missing, so if a segmented download breaks badly, delete the parts and start again. Its docs add a caveat that applies to every client: “Some servers may not support resumable transfers and the file will be reloaded instead.”
When resume fails
- The file changed on the server. Segmented clients refuse to resume; single-stream clients append and produce a corrupt file. Delete the local copy and start over.
- Different folder or name. Every client looks for the partial file at the exact local path it used the first time.
- The torrent is still downloading. A file rTorrent is still writing keeps changing. Wait until it shows 100% in ruTorrent, then resume. This is the usual cause of a download that “stops at 99%”.
- The overwrite default won. FileZilla set to Overwrite, or WinSCP with temporary filenames disabled, re-downloads from zero without telling you. Check the setting, not the connection.
- The status file is gone. .evoftp-part, .lftp-pget-status or .filepart deleted by a cleanup tool means a fresh start.
- Repeated disconnects. Resume fixes interruptions, not their cause. If every transfer drops, see the SFTP setup guide.
Comparison
| Client | Resumes? | Segmented? | Needs a setting? |
|---|---|---|---|
| evoftp | Yes, via .evoftp-part sidecar | Yes (default 4 segments) | No; re-download into the same folder |
| lftp | Yes: get -c, pget -c, mirror -c | Yes, pget -n | Yes, the -c flag |
| FileZilla | Yes, single stream | No | Choose Resume in the prompt, or set the file-exists default |
| WinSCP | Yes, via .filepart (SFTP/FTP only) | No | On by default above 100 KB (Preferences → Endurance) |
| Cyberduck | Yes, Resume in prompt or Transfers window | Optional | Choose Resume in the prompt |
FAQ
Does resuming re-verify the data already downloaded?
No. SFTP resume trusts the bytes on disk. evoftp checks the size and Cyberduck compares a checksum “if available”, but none of these clients re-read the finished part. If the server file changed, delete the local copy.
Can I resume a download started with a different client?
Only single-stream partial files, and only if the new client will append to an existing file (FileZilla’s Resume action does). Segmented status files are client-specific: evoftp cannot read .lftp-pget-status and vice versa.
Why does my resumed file fail to play?
Almost always because the file was still being written during the first attempt, so its first bytes belong to an older version. Confirm the torrent is complete, delete the local file, and download again.
evoftp is free and open source, resumes without a dialog, and pulls each file over several connections: get it from the download folder and read the evoftp guide. For other ways to move files off a seedbox, see transferring files from your seedbox.
Related articles
Put this into practice
EvoSeedbox ships with one-click app installs and up to 10 Gbps per box.