Ответ
Для передачи больших данных по узкому каналу (100 Кбит/с) между разными сетями я использую комбинацию сжатия, докачки и контроля скорости. Основной инструмент — rsync.
Основная команда:
rsync -azP --bwlimit=100 --partial --progress /source/directory/ user@remote-server:/destination/path/
Ключи и их назначение:
-a(archive) — сохраняет права, временные метки и рекурсивно копирует.-z(compress) — сжимает данные во время передачи, что критично при низкой скорости.-P— объединяет--progress(показывает ход передачи) и--partial(сохраняет частично переданные файлы для докачки).--bwlimit=100— жестко ограничивает скорость использования полосы пропускания примерно до 100 Кбит/с, чтобы не загружать канал полностью.
Почему rsync, а не scp? rsync эффективнее при повторных передачах (пересылает только разницу) и надежнее при обрывах связи.
Дополнительные стратегии для очень больших объемов:
- Разбиение на части: Архивирую данные с помощью
tar, разбиваю на кускиsplitи передаю поочередно.tar czf - /source/data | split -b 100M - data_part.tar.gz. # Затем передаю каждый файл data_part.tar.gz.* отдельно - Проверка целостности: После передачи всегда проверяю контрольные суммы (
sha256sum) на исходном и целевом серверах. - Sneakernet как крайняя мера: Если данные измеряются терабайтами, а сроки жесткие, обсуждаю с командой физическую доставку дисков (HDD/SSD) — это может быть быстрее.