Перенос файлового сервера на другой сервер
Как организовать перенос файлов между серверами, когда объемы данных очень велики и нет возможности архивации и промежуточного сохранения?
На работе появилась такая задача: миграция на другой сервер. Мы меняли хостинг-провайдера, т.к. заканчивалось свободное дисковое пространство аккаутов, да и условия сотрудничества уже разонравились.
На момент миграции у нас было 2 аккаунта, каждый по 20Гб дискового пространства, в итоге мы должны были все перенести на 1 аккаунт с объемом дискового пространства равным 60Гб.
По-старинке это выглядело бы примитивно и примерно так: заархивировать небольшой объем информации в ZIP-архив, сохранить с сервера на локальный компьютер, затем с локального компьютера перенести на удаленный сервер по FTP или SFTP. Но не в этот раз. Ведь у нас было достаточно большое количество интернет-проектов, перенос которых изначально становился кропотливым делом, а беря в расчет, что свободного места на каждом из аккаунтов оставалось чуть менее 2Гб, вариант архивации на сервере был невозможен.
Поэтому, недолго думая, я полез в гугл с запросом "ssh copy files from one server to another directly". В итоге решение оказалось довольно простым, единственное условие - наличие SHH на серверах, между которыми будет осуществляться обмен данными.
Итак, для этого понадобится команда
Что она означает:
- scp - мы сообщаем серверу название утилиты, через которую будут обрабатываться эти команды;
- -r - параметр, говорящий о том, что копируемая папка (если это папка) должна копироваться рекурсивно, т.е. со всеми вложенными подпапками. Если копируется не папка, можно удалить этот параметр из команды;
- /path/to/local/file - путь к локальному файлу, в мое случае к файлу сервера, с которого будет осуществлен перенос данных;
- remote_user@remote_host - данные для подключения к удаленному серверу, которые имеют вид [имя_пользователя]@[адрес_сервера];
- /path/to/remote/file - путь к конечной папке сервера, куда будут загружены файлы.
Предостерегая вас от двойной работы и вопросов:
Если файлы нужно скопировать с удаленного сервера на локальный, тогда исползуем эту же команду, поменяв местами конечный и начальны пути копирования: scp -r remote_user@remote_host:/path/to/remote/file /path/to/local/file . Если копируется не папка, можно удалить параметр -r из команды.
Обновление от 26.06.2019
Одним из способов передать в SCP пароль является использование утилиты sshpass. В зависимости от направления копирования используйте команды, описанные в этой статье ранее. Ниже, в качестве примера, приведена команда для копирования информации с локального сервера (к которому сейчас подключен пользователь) на удаленный сервер, где для удаленного сервера необходимо ввести регистрационные данные.
- -p - параметр для передачи пароля
- "password" - само значение пароля
Если не хотите "светить" пароль в истории bash-запросов, тогда используйте код ниже.
- -f - параметр для указания пути к файлу, который содержит в себе пароль. После выполнения команды файл необходимо удалить из соображений безопасности.
Как установить SSHPASS
Ниже перечислены способы установки SSHPASS для различных ОС:
Читайте также: