S3-to-S3 server-side multipart copy reports 0% progress until completion

What is the problem you are having with rclone?

When performing a server-side copy between two S3 paths using rclone copyto,
the progress display shows 0% / 0 B for the entire duration of a large transfer. It jumps directly from 0% to 100% only when CompleteMultipartUpload completes. There are no per-part progress updates during the transfer.

The transfer itself works correctly -- the object is copied and the final size and checksum verification pass. This is purely a progress reporting problem. 

To confirm the transfer was actually progressing, I used aws s3api list-parts during the transfer and observed parts completing at approximately 3 parts per
2 minutes throughout the 40-minute run:

t=~19 min:  49 parts completed
t=~21 min:  54 parts completed
t=~22 min:  58 parts completed
t=~24 min:  65 parts completed
t=~25 min:  67 parts completed
t=~26 min:  68 parts completed
t=~27 min:  75 parts completed
t=~28 min:  79 parts completed
t=~30 min:   0 parts (transfer complete -- CompleteMultipartUpload called)

85 total parts for a 394 GiB object. The transfer was genuinely progressing
the entire time; rclone simply reported nothing.

The consequence is that a healthy 40-minute transfer is completely indistinguishable from a stalled one. Users cannot determine whether rclone is working or hung without resorting to external AWS API calls.

Tested on both rclone v1.73.2 and v1.73.3 with identical results.
--s3-disable-checksum has no effect on this behavior.

Run the command 'rclone version' and share the full output of the command.

rclone v1.73.3
- os/version: ubuntu 24.04 (64 bit)
- os/kernel: 6.8.0-106-generic (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.25.8
- go/linking: static
- go/tags: none

Which cloud storage system are you using? (eg Google Drive)

AWS S3 -- server-side copy between two keys within the same bucket.
Object size: 394.111 GiB (423,173,500,928 bytes).

The command you were trying to run (eg rclone copy /tmp remote:tmp)

rclone copyto \
    "s3remote:mybucket/neuron_backup/source.vbk" \
    "s3remote:mybucket/neuron_backup/destination.vbk" \
    --config /home/user/.config/rclone/rclone.conf \
    -P -vv \
    --log-file /tmp/rclone_ssc.log

The rclone config contents with secrets removed.

[s3remote]
type = s3
provider = AWS
access_key_id = <REDACTED>
secret_access_key = <REDACTED>
region = us-east-1
server_side_encryption = AES256

A log from the command with the -vv flag

2026/03/24 12:26:51 DEBUG : rclone: Version "v1.73.3" starting with parameters ["rclone" "copyto" "s3remote:mybucket/neuron_backup/source.vbk" "s3remote:mybucket/neuron_backup/destination.vbk" "--config" "/home/user/.config/rclone/rclone.conf" "-P" "-vv" "--log-file" "/tmp/rclone_ssc.log"]
2026/03/24 12:26:51 DEBUG : Creating backend with remote "s3remote:mybucket/neuron_backup/source.vbk"
2026/03/24 12:26:51 DEBUG : Using config file from "/home/user/.config/rclone/rclone.conf"
2026/03/24 12:26:51 DEBUG : source.vbk: Need to transfer - File not found at Destination
2026/03/24 12:26:51 DEBUG : source.vbk: Starting  multipart copy with 85 parts

[*** 40 minutes of silence -- no log output whatsoever ***]

2026/03/24 13:07:34 DEBUG : destination.vbk: size = 423173500928 OK
2026/03/24 13:07:34 DEBUG : source.vbk: md5 = a7b78d17256cb19f939896db58a577fe OK
2026/03/24 13:07:34 INFO  : source.vbk: Copied (server-side copy) to: destination.vbk
2026/03/24 13:07:34 INFO  : 
Transferred:     394.111 GiB / 394.111 GiB, 100%, 0 B/s, ETA -
Transferred:            1 / 1, 100%
Server Side Copies:     1 @ 394.111 GiB
Elapsed time:     40m42.7s

2026/03/24 13:07:34 DEBUG : 6 go routines active
Progress display as seen throughout the entire 40-minute transfer:

Transferred:             0 B / 394.111 GiB, 0%, 0 B/s, ETA -
Transferred:            0 / 1, 0%
Elapsed time:     16m16.4s
Transferring:
 *           source.vbk:  0% /394.111Gi, 0/s, -

The progress display is only updated at the very end to 100%.

welcome to the forum,

afiak, that is not a bug, that is how rclone works. this has been discussed in the forum.


use --dump=headers to see the api calls.
i beileve rclone gets enough real-time information to provide progress?


as compared to rclone, how does aws copy tool handle statistics for multi-part server-side copy?

Thank you for the suggestions -- I followed up on both and have additional data. I also want to acknowledge upfront: you are right that this is not a bug. rclone is working as designed. I am reframing this as a feature request for improved progress reporting during S3 server-side multipart copy.

On --dump=headers

I ran the transfer with --dump=headers and it was very informative. The headers confirm rclone is firing UploadPartCopy requests immediately at t=0 with no delay on its side. Every request has Content-Length: 0 -- rclone sends only the X-Amz-Copy-Source and X-Amz-Copy-Source-Range headers and AWS handles the copy internally. I understand now why rclone cannot report bytes transferred -- it genuinely sees zero bytes.

However, --dump=headers also confirms that rclone does receive a 200 OK response for each completed part, containing X-Amz-Copy-Source-Version-Id. So rclone knows exactly when each part completes. It receives this information in real time but does not log it or update the progress display.

On aws s3 copy tool comparison

You asked how aws s3 cp handles statistics for multipart server-side copy. I tested it on a 394 GiB object:

Completed 3.6 GiB/394.1 GiB (257.2 MiB/s) with 1 file(s) remaining

aws s3 cp shows bytes transferred, total size, and transfer rate -- updating continuously throughout the copy. It uses the same UploadPartCopy API. The difference is that aws s3 cp updates its progress display each time a part completes. rclone receives the same part completion responses but does not use them.

The feature request

rclone already logs "Starting multipart copy with 85 parts" -- so it knows the total part count upfront. It receives a 200 OK for each completed part. It has everything needed to show meaningful progress. The two specific asks are:

  1. Log each part completion at DEBUG level in the standard -vv log, e.g.:
    source.vbk: server-side copy part 4/85 complete

  2. Update the live progress display to show part completion counts rather than 0 B / 0 B, 0%, e.g.:

Transferred:        0 B / 394.111 GiB, 0%, 0 B/s, ETA -
Server-side copy:   4 / 85 parts, 5%
Elapsed time:       1m16s

The 0 B transferred and 0% are technically correct -- rclone transferred zero bytes itself. But displaying them for 40 minutes with no other indication of activity is deeply misleading. Part count is the natural unit of progress for server-side copy and rclone has it in real time.

Additional finding: incomplete multipart cleanup

When I killed the rclone transfer with Ctrl-C, the --dump=headers log showed rclone sent AbortMultipartUpload and received 204 No Content. However, rclone backend list-multipart-uploads still showed the upload present with 4 completed parts. rclone cleanup also failed silently (exit 0, no effect). The parts were only removed after running aws s3api abort-multipart-upload directly.

By contrast, killing aws s3 cp with Ctrl-C left zero incomplete multipart uploads immediately.

This may be a separate issue worth looking at -- rclone's AbortMultipartUpload on SIGINT receives a 204 but does not actually clean up the parts, and rclone cleanup does not compensate for this.

good


i changed your topic category from bug to feature.


no command or debug log was posted?

If you run rclone cleanup s3:bucket then it will remove all pending multipart uploads older than 24 hours.
If you want more control over the expiry date then run rclone backend cleanup s3:bucket -o max-age=1h