Як? Або TL; DR
Найшвидший метод , який я знайшов це поєднання tar
, mbuffer
і ssh
.
Наприклад:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Використовуючи це, я домігся стійких передач локальної мережі понад 950 Мбіт / с на 1Gb посиланнях. Замініть шляхи в кожній команді tar, щоб вони відповідали тому, що ви передаєте.
Чому? mbuffer!
Найбільшим вузьким місцем у передачі великих файлів по мережі є, безумовно, дисковий введення / вивід. Відповідь на це - mbuffer
або buffer
. Вони багато в чому схожі, але mbuffer
мають деякі переваги. Типовий розмір буфера - 2 Мб для mbuffer
та 1 МБ для buffer
. Більші буфери швидше ніколи не будуть порожніми. Вибір розміру блоку, який є найменшим загальним кратним нативного розміру блоку як у цільовій, так і в цільовій файловій системі, дасть найкращі показники.
Буферизація - це річ, яка має все значення! Використовуйте його, якщо у вас є! Якщо у вас її немає, дістаньте її! Використовувати (m}?buffer
плюс що-небудь краще, ніж щось саме по собі. це майже буквально панацея від повільної передачі мережевих файлів.
Якщо ви переносите кілька файлів, використовуйте їх tar
для "згуртування" разом в один потік даних. Якщо це один файл, ви можете використовувати cat
або переадресацію вводу / виводу. Накладні витрати tar
порівняно з cat
статистично незначними, тому я завжди використовую tar
(або zfs -send
там, де можу), якщо це вже не тарбол . Жодне з них не гарантовано дає метадані (і, зокрема cat
, не буде). Якщо ви хочете метаданих, я залишу це як вправу для вас.
Нарешті, використання ssh
транспортного механізму є безпечним і несе в собі дуже невеликі витрати. Знову ж таки, накладні витрати ssh
порівняно з nc
статистично незначними.