Каков наилучший способ дублировать файлы на сервере через 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
-z
опцию для локального копирования, так как это добавляет ненужные накладные расходы. IMHO, вы должны использовать только-z
при использовании rsync через медленное сетевое соединение. Если вы копируете большие объемы данных на 100Base-T, у вас все будет в порядке без-z
. Благодаря быстрому сетевому соединению сжатие может привязать ваш ЦП и заморозить другие процессы.-z
для копирования или копирования по локальной сети в пределах одного аппарата; Тестирование с-z
копированием через Интернет и без него (одно или другое может быть быстрее, в зависимости от многих вещей).-e ssh
теперь это значение по умолчанию для удаленных хостов, поэтому нет необходимости передавать эту опцию явно.Другим словом:
scp
Для сделок с одним выстрелом удобен scp. Если файлов много, то rsync - хорошая идея. Если соединение разорвано, rsync может определить, где оно было прервано.
Я знал, что rsync имеет сжатие (
-z
), и только что узнал, что scp также работает (-C
).источник
В вашей настройке, вероятно, достаточно rsync ... но, например, если есть много маленьких файлов, может быть быстрее сначала заархивировать файлы, чем передавать, а затем через rsync. Это связано с тем, что передача владельца, временных меток и разрешений иногда тяжелее, чем сам файл, если файл маленький. Tar объединит всю эту информацию в одном файле, а rsync скопирует большие блоки.
Или даже лучше, если безопасность не требуется, используйте tar и nc:
В пункте назначения подготовьте получающего демона, распакуйте его и распакуйте:
В источнике tar все, параллельное сжатие и отправка его по назначению:
источник