Благодаря замечательному ответу Scott Pack (я раньше не знал, как это сделать с помощью ssh), я могу предложить это улучшение (если bash
это ваша оболочка). Это добавит параллельное сжатие, индикатор прогресса и проверку целостности по всей сетевой ссылке:
tar c file_list |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
tar xC /directory/to/extract/to
'
pv
является хорошей программой просмотра прогресса для вашего канала и pigz
представляет собой параллельную программу gzip, которая использует столько потоков, сколько ваш процессор по умолчанию (я думаю, до 8 максимум). Вы можете настроить уровень сжатия так, чтобы он лучше соответствовал соотношению процессоров и пропускной способности сети, и поменять его местами, pxz -9e
а также, pxz -d
если у вас гораздо больше процессоров, чем пропускная способность. Вам нужно только убедиться, что две суммы совпадают по завершении.
Эта опция полезна для очень больших объемов данных, а также для сетей с высокой задержкой, но не очень полезна, если связь нестабильна и обрывается. В этих случаях rsync, вероятно, является лучшим выбором, поскольку он может возобновиться.
Образец вывода:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
Для блочных устройств:
dd if=/dev/src_device bs=1024k |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
dd of=/dev/src_device bs=1024k
'
Очевидно, убедитесь, что они имеют одинаковый размер или ограничение с помощью count =, skip =, seek = и т. Д.
Когда я копирую файловые системы таким образом, я часто сначала dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
обнуляю большую часть неиспользуемого пространства, что ускоряет работу xfer.