Для быстрого копирования файлов напрямую с одного сервера на другой существуют множество утилит. Рассмотрим самые популярные из них.
Rsync и scp.
Статья не для опытных администраторов. А для программистов и начинающих администраторов, которые сталкиваются с задачами по администрированию.
Сразу покажу финальную команду, которую я использую для быстрого копированя большого числа файлов:
nohup rsync -avz user@remote-server.ru:/dir/ /local/ &
Ну а ниже, ее модификации.
1) Простое копирование файлов с сервера на сервер
SCP
scp -r remote-server.ru:/dir/ /local/
Эта команда копирует файлы с одного сервера на другой, в ответ на эту команду вы получите предложение указать пароль для пользователя root
scp -r user@remote-server.ru:/dir/ /local/
В интерактивном режиме будет предложено ввести пароль для пользователя user
Rsync
1) На оба сервера устанавливаем rsync
apt-get install rsync
Копируем файлы
rsync -av remote-server.ru:/dir/ /local/
Эта команда копирует файлы с одного сервера на другой, в ответ на эту команду вы получите предложение указать пароль для пользователя root
rsync -av user@remote-server.ru:/dir/ /local/
В интерактивном режиме будет предложено ввести пароль для пользователя user
2) Ускоряем скорость копирования
Для обычных ситуаций эти команды вам подойдут. Но вот для ситуаций когда необходимо скопировать несколько сотен гигабайт данных, да еще возможно множества мелких файлов, этого может не хватить.
Сегодня утром я запустил копирование изображений с одного сервера на другой. Командой scp -r спустя 5 часов я подошел и увидел что скопировано 4Gb (а впереди еще 200 GB)
Эта ситуация совсем не подоходит.
Обе утилиты позволяют добавлять компрессию.
-z опция для rsync
-C опция для scp
По умолчанию в обеих утилитах компрессия выключена, потому как она несет в себе накладные расходы на процессорные ресурсы. А пропускная способность сети является ограничивающим фактором чаще всего.
Поэтому модифицируем команды:
SCP
scp -r -C -o 'CompressionLevel 9' user@remote-server.ru:/dir/ /local/
Для scp есть еще одна опция, которая ускоряет копирование файлов.
-c blowfish
scp -r -с blowfish -C -o 'CompressionLevel 9' user@remote-server.ru:/dir/ /local/
Rsync
rsync -avz user@remote-server.ru:/dir/ /local/
На данный момент я запустил rsync и за 10 минут работы скопировано уже 12Gb
3) Фоновый режим
Ну и последняя модицикация, а что если у вас оборвется интернет соединение с консолью в самый неподходящий момент?
В случае с rsync в принципе ничего страшного потому как он умеет копировать только различия между файлами. Но с scp — это провал.
Поэтому можно запустить скрипты в фоновом режиме, закрыть консоль, и пойти отдыхать.
nohup rsync -avz user@remote-server.ru:/dir/ /local/ &
Надо сделать так, но этого не достаточно, интерактивного режима от консоли при этом запущено не будет, а как же указать пароль?
Для начала нужно настроить авторизацию между серверами по ключам.
Генерируем ключ на машине на которую будем копировать файлы:
ssh-keygen -t rsa -b 4096
При этом ключ генерируем без пароля!
Отправляем на удаленный сервер.
ssh-copy-id user@remote-server.ru
в этот раз мы последний раз укажем пароль от сервера. remote-server.ru
Удачи! И быстрого бесперебойного копирования вам!