7

I encountered a situation where an app server misconfig led to creation of around 5TB datasets where each dir contains huge number of small files. We are in the process of transferring the files and change the application but the rsync fails on transferring the data. It is fails even locally between the local drives. I managed to copy only 3.5G overnight! I tried to change the rsync switches and still no luck. Here is what currently running on the server without any progress indication: rsync -avhWc --no-compress --progress source destination Some suggested the gigasync but the github and the site is unavailable. Can anybody suggest a method to transfer the files? Appreciate anyhelp

h.safe
  • 131

4 Answers4

4

Try xargs+rsync:

 find . -type f -print0 | xargs -J % -0 rsync -aP % user@host:some/dir/

You can control how many files to pass as source to each call of rsync with -n E.g. to copy 200 files at every rsync:

 find . -type f -print0 | xargs -n 200 -J % -0 rsync -aP % user@host:some/dir/

If it's too slow you can run multiple copies of rsync in parallel with the -P option:

find . -type f -print0 | xargs -P 8 -n 200 -J % -0 rsync -aP % user@host:some/dir/

This will start 8 copies of rsync in parallel.

Luca Gibelli
  • 2,811
2

If this is a trusted/secure network, and you can open a port on the target host, a good way to reproduce a tree on another machine is the combination of tar and netcat. I'm not at a terminal so cant write a full demonstration but this page does a pretty good job:

http://toast.djw.org.uk/tarpipe.html

Definitely use compression. In the best case you can transfer the data at the throughput rate the slowest of the three potential bottlenecks- read on the source, network, write on the target- permits.

Jonah Benton
  • 1,252
0

not specifying server OS - have you considered robocopy ? Its Windows based though. Supports threading, and retries, and bandwidth limitation. UNC to UNC capable. RoboCopy docs

quick google of rsync shows unix / windows... maybe you are using windows.

Alocyte
  • 141
0

If you have ZFS, you can use ZFS-level replication to send the filesystem to a new destination.

If that is not an option, consider UDR+rsync, detailed here: Transfer large amount of small files

ewwhite
  • 201,205