iCloud backend 400'ing when uploading large file

What is the problem you are having with rclone?

When I try to upload a 21.5GB .zip file, it eventually fails with an error 400 and tries to reupload. Other smaller files, such as a ~980MB .zip I uploaded, worked fine.

Maybe this could be related to the iCloud website not allowing uploads above 10GB?

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

rclone v1.73.2
- os/version: arch (64 bit)
- os/kernel: 6.19.6-2-cachyos (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.26.1-X:nodwarf5
- go/linking: dynamic
- go/tags: none

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

iCloud

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

In /etc/fstab:

iclouddrive: /mnt/iclouddrive rclone rw,noauto,user,x-gvfs-show,x-gvfs-name=iCloud%20Drive,x-gvfs-icon=network-server,x-gvfs-symbolic-icon=network-server,stats-one-line,progress,log-file-compress,log-file-max-size=10M,log-file-max-backups=10,log-file=/home/he3als/.local/state/rclone/icloud.log,stats=10s,args2env,vfs-cache-mode=full,cache-dir=/home/he3als/.cache/rclone,vfs-cache-max-size=20G,vfs-cache-max-age=24h,vfs-write-back=10s,modify-window=2s,fast-list,vv,bwlimit=1M:4M,config=/home/he3als/.config/rclone/rclone.conf 0 0

The rclone config contents with secrets removed.

[iclouddrive]
type = iclouddrive
apple_id = ****
password = ****
cookies = ****
trust_token = ****

A log from the command with the -vv flag

2026/03/12 17:07:59 INFO  :    19.962 GiB / 20.001 GiB, 100%, 2.036 MiB/s, ETA 19s
2026/03/12 17:08:00 DEBUG : Statfs: 
2026/03/12 17:08:00 DEBUG : >Statfs: stat={Blocks:274877906944 Bfree:274877906944 Bavail:274877906944 Files:1000000000 Ffree:1000000000 Bsize:4096 Namelen:255 Frsize:4096}, err=<nil>
2026/03/12 17:08:00 DEBUG : Statfs: 
2026/03/12 17:08:00 DEBUG : >Statfs: stat={Blocks:274877906944 Bfree:274877906944 Bavail:274877906944 Files:1000000000 Ffree:1000000000 Bsize:4096 Namelen:255 Frsize:4096}, err=<nil>
2026/03/12 17:08:09 INFO  :    19.982 GiB / 20.001 GiB, 100%, 1.992 MiB/s, ETA 9s
2026/03/12 17:08:12 DEBUG : vfs cache RemoveNotInUse (maxAge=86400000000000, emptyOnly=false): item Backup/REDACTED/REDACTED.zip not removed, freed 0 bytes
2026/03/12 17:08:12 INFO  : vfs cache: cleaned: objects 1 (was 1) in use 1, to upload 0, uploading 1, total size 20.000Gi (was 20.000Gi)
2026/03/12 17:08:19 INFO  :    20.001 GiB / 20.001 GiB, 100%, 1.961 MiB/s, ETA 0s
2026/03/12 17:08:21 DEBUG : pacer: low level retry 2/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:21 DEBUG : pacer: Rate limited, increasing sleep to 20ms
2026/03/12 17:08:22 DEBUG : pacer: low level retry 3/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:22 DEBUG : pacer: Rate limited, increasing sleep to 40ms
2026/03/12 17:08:22 DEBUG : pacer: low level retry 4/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:22 DEBUG : pacer: Rate limited, increasing sleep to 80ms
2026/03/12 17:08:22 DEBUG : pacer: low level retry 5/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:22 DEBUG : pacer: Rate limited, increasing sleep to 160ms
2026/03/12 17:08:22 DEBUG : pacer: low level retry 6/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:22 DEBUG : pacer: Rate limited, increasing sleep to 320ms
2026/03/12 17:08:22 DEBUG : pacer: low level retry 7/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:22 DEBUG : pacer: Rate limited, increasing sleep to 640ms
2026/03/12 17:08:22 DEBUG : pacer: low level retry 8/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:22 DEBUG : pacer: Rate limited, increasing sleep to 1.28s
2026/03/12 17:08:23 DEBUG : pacer: low level retry 9/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:23 DEBUG : pacer: Rate limited, increasing sleep to 2s
2026/03/12 17:08:24 DEBUG : pacer: low level retry 10/10 (error HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n")
2026/03/12 17:08:24 DEBUG : Backup/REDACTED/REDACTED.zip: Received error: HTTP error 400 (400 Bad Request) returned body: "<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>AppleHttpServer/2caa77a6bc2e755fca0e0f63e4d67e53390f9184</center>\r\n</body>\r\n</html>\r\n" - low level retry 0/10
2026/03/12 17:08:28 DEBUG : pacer: Reducing sleep to 1.5s
2026/03/12 17:08:29 DEBUG : pacer: Reducing sleep to 1.125s
2026/03/12 17:08:29 INFO  :    20.001 GiB / 40.002 GiB, 50%, 1.074 MiB/s, ETA 5h17m42s

that is a hard limit set by apple, nothing rclone can do about it.
could try chunker remote but it is considered Experimental


fwiw, might be better to test using rclone copy, versus mount.
for a deeper look at the api calls, use --dump flags


can remove that, does nothing on rclone mount command.