I'm struggling with this problem too.
I've discovered something interesting though. I'm not sure how useful it might be but I thought I'd post it anyway.
Yesterday I was able to s3sync just over 10Gb of files with no problem into an EU bucket.
Overnight some additional data was added to this fileset so I went to s3sync to get the differences onto S3 and lo and behold I was hit by the EOF/broken pipe issue.
If I use a different prefix I don't get the errors.
e.g. this is what I used yesterday:
s3sync.rb -r --progress /home/faris/totalbackup/ s3eu:totalbackup
The same command today results in the EOF/broken pipe issue
But if I do this instead, with tb as the prefix instead of totalbackup:
s3sync.rb -n -r --progress /home/faris/totalbackup/ s3eu:tb
It works fine. But I'm only mentioning this as an aside. What I really think is interesting comes later in my post...
All of the above is without the code modification mentioned earlier in the thread.
With the code modification the problem is resolved but not quite in the way I expected.
Forgive me if I'm giving too much detail, but I'm hoping that it might help find the actual cause of the issue.
Essentially I have a 7 day backup cycle, with a full backup on day 1, and incremental backups on subsequent days.
I'm backing up a directory structure similar to this:
/totalbackup/bak1
file1
file2
file3
(... and a few more files)
/totalbackup/bak2
file1
file2
/totalbackup/bak3
(same as bak2)
No file is larger than 1GB in size, but most of them are 1GB exactly.
Now to explain why I'm wasting your time explaining the file structure...
Basically, if I use
s3sync.rb -d -r --progress /home/faris/totalbackup/ s3eu:totalbackup
(s2eu:totalbackup already contains yesterday's synch. s3try modified as mentioned in this thread)
then I see that S3sync examines all the files in /bak1 with no issues and only spits out the EOF error when it starts looking at bak2
With the code modification mentioned here, instead of also giving a broken pipe error and then going round in circles going nowhere, it then continues correctly:
(.....)
local node object init. Name:bak2/file1 Path:/totalbackup/bak2/file1 Size:206469120 Tag:[redacted]
prefix found: /bak2/
s3TreeRecurse s3eu totalbackup /bak2/
Trying command list_bucket s3eu max-keys 200 prefix totalbackup/bak2/ delimiter / with 100 retries left
EOF error: end of file reached
No result available
99 retries left
Creating new connection
Trying command list_bucket s3eu max-keys 200 prefix totalbackup/bak2/ delimiter / with 99 retries left
Response code: 200
S3 item totalbackup/bak2/file1
(.....)
So whatever is going wrong seems to be happening when the second list_bucket command is sent to S3?
Or am I misinterpreting what -d is telling me?