Site icon GalaxyData Community

dd ssh показывать прогресс и ускорить процесс копирования

Передача крупных файлов между серверами или локальной машиной через протокол SSH является распространенной задачей администратора Linux. Однако стандартная передача через SSH может оказаться довольно медленной и лишённой визуализации прогресса, что неудобно при переносе больших объёмов данных. Эта статья расскажет вам, как настроить быстрое копирование и отслеживание прогресса передачи данных через SSH.

Почему передача по SSH бывает медленной?

Передача данных через SSH подразумевает шифрование каждого пакета данных, что повышает безопасность соединения, но требует значительных вычислительных ресурсов. По умолчанию используются сравнительно тяжёлые алгоритмы шифрования, такие как AES-CTR, RSA или даже Curve25519, что существенно увеличивает задержку при обработке большого объёма данных.

Кроме того, отсутствие механизма отображения хода копирования затрудняет понимание скорости передачи и оставшегося времени. Стандартные инструменты типа dd или scp показывают только общее состояние после окончания передачи, что тоже создаёт дискомфорт.

Основные способы оптимизации и улучшения мониторинга передачи

Давайте рассмотрим несколько простых способов, позволяющих заметно ускорить передачу файлов через SSH и обеспечить возможность наблюдать за ходом процесса.


Оптимизация протокола SSH

Выбор более производительного алгоритма шифрования

Одним из ключевых факторов, влияющих на производительность SSH-копирования, является выбор подходящего алгоритма шифрования. Современные версии OpenSSH поддерживают широкий спектр методов шифрования, среди которых есть более лёгкие варианты.

Например, алгоритм AES-GCM, использующий интегрированную аутентификацию и шифрование, позволяет снизить затраты на вычисления и улучшает общую производительность.

Чтобы установить этот алгоритм шифрования, добавьте параметр -c к команде SSH:

ssh -c aes128-gcm@openssh.com ...

Этот способ применим как при использовании прямого подключения через SSH, так и при выполнении копирования через dd.

Отключение сжатия данных

Хотя SSH предлагает компрессию передаваемых данных по умолчанию, зачастую это ухудшает производительность, особенно если сеть стабильна и обладает высокой пропускной способностью. Лучше отключить сжатие данных командой:

-o Compression=no

Это позволит избежать дополнительной нагрузки на ЦПУ серверов и повысит скорость передачи данных.


Инструменты для отображения прогресса передачи

Использование стандартных инструментов вроде dd даёт возможность мониторить ход процесса, хотя изначально эта возможность ограниченная. Чтобы получить удобный интерфейс и подробную статистику, рекомендуем применить один из следующих подходов:

Команда dd

Команда dd сама по себе не показывает статус сразу, но её можно расширить добавлением параметра status=progress. Например:

dd if=input-file of=output-file status=progress

Этот метод удобен для локальных передач и небольшого числа удалённых копий.

Но лучше всего совместить эту технику с SSH, выполнив передачу следующим образом:

dd if=/home/vm/vm17088 bs=100M status=progress | \
ssh -c aes128-gcm@openssh.com -o Compression=no root@server.galaxydata.ru "dd of=/dev/vg-storage/vm17088 bs=100M status=progress"

Теперь вы будете видеть детальную информацию о ходе копирования, включая общий объем переданного файла и оставшееся время.

Альтернативные решения: Rsync и PV

Помимо dd, существуют альтернативные средства, позволяющие получать точную информацию о процессе передачи и повышать эффективность копирования:


Примеры копирования, которые используют инженеры в GalaxyData

Upload the disk image you have saved remotely over SSH to the new GalaxyData. Replace server.galaxydata.ru with the GalaxyData’s IP address and /home/vm/vm17088 with the disk images’s path.

dd if=/home/vm/vm17088 | ssh root@server.galaxydata.ru "dd of=/dev/vg-storage/vm17088 bs=100M status=progress"

Данные передаем в сжатом виде. Все просто добавить status=progress

dd if=/dev/vg-storage/vm69045 | gzip | ssh root@server-kvm.galaxydata.ru 'gzip -d | dd of=/var/lib/libvirt/images/chia-win.img status=progress'

где

if=/dev/vg-storage/vm69045 — размещение диска или устройства, откуда будут копироваться данные

of=/var/lib/libvirt/images/chia-win.img — назначение диска или устройства, куда будут копироваться данные

Данные в обычном виде по SSH:

dd if=/dev/vg-hydra-lun/pypi_repo | ssh root@194.150.100.13 "dd of=/mnt/pve/hdd-files/images/111/vm-111-disk-0.raw bs=100M status=progress"

Заключение

Используя приведённые выше рекомендации, вы сможете быстро организовать быструю и удобную передачу больших файлов через SSH. Простые модификации позволяют сократить время ожидания и своевременно контролировать процесс передачи данных, делая вашу работу эффективнее и удобнее.

Exit mobile version