@ pdo відповідь хороша, але можна збільшити швидкість за допомогою буфера та хорошого стиснення та додати смугу прогресу.
Часто мережа є вузьким місцем, і швидкість змінюється з часом. Тому він допомагає зберігати дані перед тим, як надсилати їх по мережі. Це можна зробити за допомогою pv
.
Крім того, зазвичай можна збільшувати швидкість за допомогою відповідного алгоритму стиснення. Gzip (як і раніше) - це алгоритм швидкого стиснення, але загалом zstandard ( zstd
) (і для високих коефіцієнтів стиснення LZMA / LZMA2 ( xz
) буде стискатися краще і бути швидшим за той самий час. Нові xz та zstd мають вже вбудовану багатоядерну підтримку Для використання gzip з декількома ядрами може використовуватися pigz.
Ось приклад для надсилання даних з панеллю прогресу, буферизацією та стисканням zstandard по мережі:
tar cf - . | pv -perabs $(du -sk . | cut -f 1)K | zstd -14 --long=31 -T0 | pv -qCB 512M | ssh user@host "cd /wherever && pv -qCB 512M | zstd -cd -T0 --long=31 | tar xf -"
Перший pv
- показати прогрес ( p ), орієнтовний час ( e ), швидкість передачі ( r ), середню швидкість ( a ), загальну кількість переданих байтів ( b ). Загальний розмір оцінюється з du
і додається до опції (розмір и ). Прогрес вимірюється до стиснення та буферизації, тому це не дуже точно, але все ж корисно.
zstd
використовується з налаштуванням стиснення 14 . Це число можна зменшити або збільшити залежно від мережі та швидкості процесора, тому zstd трохи швидше, ніж швидкість мережі. З чотирма ядрами на процесорі Haswell 3,2 ГГц процесор 14 забезпечує швидкість близько 120 Мб / с. У прикладі використовується довгий режим 31 (використовує вікно 2 Гб, потребує великої кількості оперативної пам’яті, але дуже добре, наприклад для стиснення відвалів баз даних). Параметри T0 встановлюють кількість потоків на кількість ядер. Слід пам’ятати, що разом із тривалим режимом ці налаштування використовують багато пам’яті.
Проблема zstd полягає в тому, що більшість операційних систем не постачається з версією> = 1.3.4. Ця версія необхідна для належної багатоядерної та тривалої підтримки. Якщо він недоступний, його можна скласти та встановити з https://github.com/facebook/zstd просто make -j4 && sudo make install
. Замість zstd можна також використовувати xz або pigz. xz повільний, але стискає дуже добре (добре при повільних з'єднаннях), pigz / gzip швидкий, але стискає не так добре.
pv
потім використовується знову, але для буферизації ( q
для тихого, C
для режиму без сплайсингу (завжди потрібен для буферизації) та B
для встановлення розміру буфера).
У прикладі буфер також використовується на стороні приймача. Це часто є непотрібним (оскільки швидкість декомпресії та запису на жорсткий диск у більшості разів перевищує швидкість мережі), але, як правило, теж не шкодить.