Назад | Перейти на главную страницу

Самый быстрый способ скопировать папку, содержащую много файлов, через SSH

Как лучше всего дублировать файлы на сервере через 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