Назад | Перейти на главную страницу

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

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

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

Как? Или TL; DR

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

Например.:

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

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

Зачем? mbuffer!

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

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

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

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

Вы упомянули "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).

Вы можете попробовать tar и ssh описанный трюк Вот:

tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"

этот должен быть перезаписанным на следующий:

tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"

Вы потеряете --partial особенности rsync в процессе, однако. Если файлы меняются не очень часто, живя с медленным начальным rsync может быть очень полезным, так как это будет много быстрее в будущем.

Вы можете использовать различные параметры сжатия 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, уже заархивированные и сжатые архивы и т. д.

Я большой поклонник SFTP. Я использую SFTP для передачи мультимедиа с основного компьютера на сервер. Я получаю хорошие скорости по локальной сети.

SFTP надежен, я бы попробовал, так как его легко настроить, а в некоторых случаях он может быть быстрее.