Как? Или 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
сравнению со cat
статистически незначимы, поэтому я всегда использую tar
(или zfs -send
там, где могу), если это не tarball . Ни один из них не гарантирует вам метаданные (и, в частности cat
, не даст). Если вы хотите метаданные, я оставлю это в качестве упражнения для вас.
Наконец, использование ssh
для транспортного механизма является безопасным и несет очень мало накладных расходов. Опять же, накладные расходы по ssh
сравнению nc
статистически незначимы.