Какой самый быстрый и надежный способ передачи большого количества файлов?

Какой самый быстрый и надежный способ передачи большого количества файлов?

Я пытаюсь передать около 100 тыс. файлов общим объемом 90 ГБ. Сейчас я использую rsync daemon, но он медленный — 3,4 Мбит/с, и мне нужно сделать это несколько раз. Мне интересно, какие у меня есть варианты, которые бы максимально использовали 100 Мбит/с соединение через интернет и были бы очень надежными.

решение1

Вы рассматривалиSneakernet? При больших объемах данных ночная доставка часто оказывается быстрее и дешевле, чем передача через Интернет.

решение2

Как? Или TL;DR

Самый быстрый метод, который я нашел, — это комбинация tar, mbufferи ssh.

Например:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

Используя это, я добился устойчивой передачи данных по локальной сети со скоростью более 950 Мбит/с на 1Gb-линках. Замените пути в каждой команде tar на соответствующие тому, что вы передаете.

Почему? мбаффер!

Самым большим узким местом при передаче больших файлов по сети, безусловно, является дисковый ввод-вывод. Ответ на этот вопрос — mbufferили buffer. Они во многом похожи, но mbufferимеют некоторые преимущества. Размер буфера по умолчанию составляет 2 МБ для mbufferи 1 МБ для buffer. Более крупные буферы, скорее всего, никогда не будут пустыми. Выбор размера блока, который является наименьшим общим кратным собственного размера блока как в целевой, так и в целевой файловой системе, даст лучшую производительность.

Буферизация — это то, что делаетвсеразница!Используйте его, если он у вас есть! Если у вас его нет, купите его! Использование (m}?bufferплюса чего-либо лучше, чем чего-либо по отдельности. Это буквально панацея от медленной передачи файлов по сети.

Если вы передаете несколько файлов, используйте tar"объединение" их в один поток данных. Если это один файл, вы можете использовать catили перенаправление ввода-вывода. Накладные расходы tarvs. catстатистически незначительны, поэтому я всегда использую tar(или zfs -sendгде могу), если только это уже нетарболл. Ни один из них не гарантирует, что вы получите метаданные (и в частности catне получит). Если вам нужны метаданные, я оставлю это вам в качестве упражнения.

Наконец, использование sshдля транспортного механизма является как безопасным, так и несет очень мало накладных расходов. Опять же, накладные расходы sshvs. ncстатистически незначимы.

решение3

Вы упомянули «rsync», поэтому я предполагаю, что вы используете Linux:

Почему бы вам не создать файл tar или tar.gz? Время передачи по сети одного большого файла быстрее, чем многих маленьких. Вы даже можете сжать его, если захотите...

Тар без сжатия:

На исходном сервере:

tar -cf file.tar /path/to/files/

Затем на принимающей стороне:

cd /path/to/files/
tar -xf /path/to/file.tar

Тар с компрессией:

На исходном сервере:

tar -czf file.tar.gz /path/to/files/

Затем на принимающей стороне:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

Вам просто нужно использовать rsync для фактической передачи файлов (tar|tar.gz).

решение4

Вы можете использовать различные параметры сжатия rsync.

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

Степень сжатия двоичных файлов очень низкая, поэтому вы можете пропустить эти файлы, используя --skip-compress, например iso, уже заархивированные и сжатые tar-файлы и т. д.

Связанный контент