Copy millions of tiny files through a network

romy4 аватар

romy4 - Posted on 17 Октябрь 2015

I had to copy millions and millions of tiny small image files, about 5KB each, total size more than a terabyte, over a network fast.

SCP, NFS, FTPFS and SSHFS where all too slow to work with. All these methods copy every single file piece by piece, causing lots of overhead, I never reached more than 1MB/s over a gigabit line.

The fastest solution I came up with after lots and lots of testing was this:

Receiving server:

ttcp -r -p 10112 | cpio -i -d -m

Sending server:

find /home/files -print | cpio -o | ttcp -t -p 10112

CPIO is slightly faster than TAR, and does not have any problems with long filenames.

  1. Other solution 1 - A little compression
    This solution saves a little bandwidth by gzipping the files. This will only save you bandwidth if you transfer text/html/sql files, images, mp3 and other already compressed formats will only cost more time and overhead.

    Receiving server:

    ttcp -r -p 10112 | gunzip | cpio -i -d -m

    Sending server:

    find /home/files -print | cpio -o | gzip | ttcp -t -p 10112
  2. Other solution 2 - Secure

    Receiving server:

    ssh user@host "find /home/files/ -depth -print | cpio -oaV" | cpio -imVd
  3. Other solution 3 - TAR over TTCP

    Receiving server:

    ttcp -r -p 10208 | tar xf -

    Sending server:

    tar -cf - /home/files -| ttcp -t -p 10208
  4. Other solution 4 - TAR over SSH

    Sending server (pushing seems slightly faster than pulling):

    tar -cf - /home/files | ssh -p 22 'tar -xf - -C /home/files/'
  5. Other solution 5 - DD
    No example. But it is the fastest way.


Ваша оценка: Ничего

я использую обычно четвёртый метод. f - можно не ставить так как он подразумевается по умолчанию. ну и -p 22 тут тоже вроде лишнее.

А вместо ttcp использовал netcat когда то. Есть старый совет на эту тему.

Насчет того что cpio быстре, это интересно. Откуда инфа?
И проблем с длинными именами файлов в tar не сталкивался там автор объясняет почему

Отправить комментарий

Google Friend Connect (leave a quick comment)
Содержание этого поля является приватным и не предназначено к показу.