Як? Або 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статистично незначними.