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

13

Каков наилучший способ дублировать файлы на сервере через SSH?

В моем случае: я говорю о дублировании магазина magento. (15000 файлов ~ 50 МБ)

cp -a source destination

Занимает часы ... (в моем случае сервер 2,4 Xeon, 2 ГБ оперативной памяти)

enloz
источник

Ответы:

18

Одно слово: 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
Писквор покинул здание
источник
2
Обратите внимание, что @Piskvor оставил -zопцию для локального копирования, так как это добавляет ненужные накладные расходы. IMHO, вы должны использовать только -zпри использовании rsync через медленное сетевое соединение. Если вы копируете большие объемы данных на 100Base-T, у вас все будет в порядке без -z. Благодаря быстрому сетевому соединению сжатие может привязать ваш ЦП и заморозить другие процессы.
Tomlogic
@tomlogic: Хороший вопрос - другими словами, не используйте -zдля копирования или копирования по локальной сети в пределах одного аппарата; Тестирование с -zкопированием через Интернет и без него (одно или другое может быть быстрее, в зависимости от многих вещей).
Писквор покинул здание
1
Я бы также пропустил сжатие, если вы знаете, что ваши файлы уже сжаты, например, синхронизируете дерево папок, полное JPEG, так как нечего получить.
разрыв строки
Примечание: -e sshтеперь это значение по умолчанию для удаленных хостов, поэтому нет необходимости передавать эту опцию явно.
Писквор покинул здание
3

Другим словом: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

Для сделок с одним выстрелом удобен scp. Если файлов много, то rsync - хорошая идея. Если соединение разорвано, rsync может определить, где оно было прервано.

Я знал, что rsync имеет сжатие ( -z), и только что узнал, что scp также работает ( -C).

tomlogic
источник
Ну, IIRC они оба используют алгоритмы сжатия SSH, по крайней мере для сетевых операций.
Писквор покинул здание
0

В вашей настройке, вероятно, достаточно rsync ... но, например, если есть много маленьких файлов, может быть быстрее сначала заархивировать файлы, чем передавать, а затем через rsync. Это связано с тем, что передача владельца, временных меток и разрешений иногда тяжелее, чем сам файл, если файл маленький. Tar объединит всю эту информацию в одном файле, а rsync скопирует большие блоки.

Или даже лучше, если безопасность не требуется, используйте tar и nc:

В пункте назначения подготовьте получающего демона, распакуйте его и распакуйте:

nc -l -p 12345 | pigz -d | tar xvf - 

В источнике tar все, параллельное сжатие и отправка его по назначению:

tar cvf - ./ | pigz | nc host 12345
Игиты
источник