Как лучше всего дублировать файлы на сервере через ssh?
В моем случае: я говорю о дублировании магазина Magento. (15000 файлов ~ 50 МБ)
cp -a source destination
Занимает часы ... (в моем случае сервер - 2.4 Xeon, 2 ГБ ОЗУ)
Одно слово: rsync
.
Обратите внимание, что если вы используете медленное соединение или сервер сильно загружен, инструмент, используемый для копирования, не будет узким местом, и любой способ копирования в любом случае будет медленным.
Это должно дать вам базовое использование для копирования между локальным компьютером и удаленным сервером: http://oreilly.com/pub/h/38
Чтобы скопировать с локального компьютера на удаленный сервер (вам, конечно же, нужно заменить пути, имя пользователя и адрес хоста):
rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
-a
архив-v
подробный-z
компресс-e ssh
"использовать туннель SSH"Чтобы копировать в другом направлении, переключите пути (сначала из, второй к):
rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer
Но rsync полезен даже для копирования вещей на одном сервере:
rsync -av /path-to/copy/from /path_to/copy/to
Другим словом: scp
scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
Для одноразовых сделок удобно использовать scp. Если файлов много, тогда rsync - хорошая идея. Если соединение разорвано, rsync может продолжить с того места, где оно было прервано.
Я знал, что у rsync есть сжатие (-z
), и только что узнал, что scp тоже (-C
).
В вашей настройке, вероятно, будет достаточно rsync ... но, например, если есть много небольших файлов, может быть быстрее сначала использовать tar, чем передавать затем через rsync. Это связано с тем, что передача владельца, временных меток и разрешений иногда тяжелее, чем сам файл, если файл небольшой. Tar объединит всю эту информацию в один файл, а rsync скопирует большие блоки.
Или даже лучше, если безопасность не нужна, используйте tar и nc:
По месту назначения подготовьте принимающий демон, распакуйте и распакуйте:
nc -l -p 12345 | pigz -d | tar xvf -
В источнике заархивируйте все, выполните параллельное сжатие и отправьте в пункт назначения:
tar cvf - ./ | pigz | nc host 12345