- Как скопировать диск через SSH
- Скачать диск через SSH
- Загрузитесь в Rescue Mode
- Скопируйте и загрузите диск
- Проверка диска
- Загрузить диск через SSH
- Разверните Filesystem
- Записки программиста
- Резервное копирование базы данных и файлов по SSH
- 1. Доступ к серверу без пароля
- 2. Скрипт резервного копирования
- 3. Запуск скрипта по крону
- 4. Заключение
- Копирование файлов и запуск команд через SSH
- Работаем на ОС семейства Linux
- Работаем на ОС семейства Windows
- Запуск команд на удаленном сервере через SSH-подключение
- Работаем на ОС семейства Linux
- Работаем на ОС семейства Windows
Как скопировать диск через SSH
ЗаметкаЕсли объем данных на вашем диске намного меньше размера диска, тогда загрузка копии с помощью dd может занять больше времени, чем просто загрузка ваших файлов. Если вы заинтересованы в загрузке отдельных файлов или каталогов, просмотрите варианты, перечисленные в наших руководствах « и « .
Скачать диск через SSH
Загрузитесь в Rescue Mode
- Подготовьте компьютер-получатель, проверив, установлен ли SSH. Большинство Linux / Unix-подобных систем по умолчанию включают OpenSSH в свои пакеты. Если принимающей системой является Microsoft Windows, доступно несколько решений SSH, таких как .
- Перезагрузите свой Линод в и подключитесь к нему, используя .
- Установите пароль администратора для системы восстановления и запустите сервер SSH:
Скопируйте и загрузите диск
- Скопируйте диск по SSH из VPS на принимающую машину. Замените 192.0.2.9 на IP-адрес VPS и /home/archive/VPS.img путь, по которому вы хотите сохранить диск.
ЗаметкаУстройство /dev/sda используется для Линод, работающих на KVM. Если ваш VPS все еще использует XEN, используйте его /dev/xvda в этом руководстве.
Принимающая машина подключится к Линоде. Проверьте отпечатки пальцев ключа SSH. Если допустимо, введите yes и нажмите Enter, чтобы продолжить:
Введите пароль root, который вы создали выше для спасательной системы:
Когда передача завершится, вы увидите итоговый вывод, подобный приведенному ниже:
Копирование вашего диска может занять некоторое время. Если у вас медленное интернет-соединение, добавьте -C опцию в команду SSH, чтобы включить сжатие gzip образа диска. Если вы получили Write failed: Broken pipe ошибку, повторите этот процесс.
Проверка диска
После завершения копирования проверьте его, смонтировав изображение на принимающем устройстве.
- Переключить пользователей root на принимающую машину:
Создайте каталог для монтирования диска как:
Смонтируйте диск. Замените VPS.img на название диска вашего Линода.
Перечислите каталоги на диске, чтобы указать, все ли перенесено. Ваш вывод ls похож на ниже:
Загрузить диск через SSH
Вы можете загрузить образ диска на новый сервер. Например, если вы ранее загрузили свой диск VPS и удалили VPS, чтобы остановить выставление счетов на нем, вы можете позднее создать новый VPS и загрузить диск для возобновления своих услуг.
- Подготовьте новый VPS, сначала создав новый диск подкачки. Выполнение этого в первую очередь означает, что вы можете просто использовать оставшееся пространство VPS для системного диска без каких-либо вычитаний. Размер диска подкачки обычно начинается с 256 МБ или 512 МБ, но может быть больше или меньше в зависимости от ваших потребностей.
- Получите доступ к своей Линоде через Менеджер Линод. Выберите « Создать новый диск» и выберите swap из выпадающего меню « Тип» .
- Теперь используйте оставшееся место на диске, чтобы создать системный диск, на который вы будете копировать образ диска. Введите описательное имя в поле « Метка» и убедитесь, что размер достаточно велик, чтобы вместить содержимое загружаемого диска. Нажмите Сохранить изменения .
- Перезагрузите свой линод в и запустите сервер SSH, как описано выше.
- Загрузите диск по SSH в VPS. Замените 192.0.2.9 на IP-адрес VPS и путь к образу /home/archive/VPS.img диска.
Когда передача завершится, вы увидите итоговый вывод, подобный приведенному ниже:
Копирование вашего диска может занять некоторое время. Если вы получили Write failed: Broken pipe ошибку, повторите этот процесс.
Разверните Filesystem
Если диск, созданный вами на новом сервере, больше, чем исходный диск (например, вы переносите диск с меньшего VPS на больший VPS), вам придется изменить размер файловой системы, чтобы использовать новое пространство.
Вы можете проверить, нужно ли это, сравнив пространство файловой системы с пространством нового диска:
В приведенном выше примере значения в столбце Размер не совпадают. Хотя диск имеет 30 ГБ, файловая система может видеть только 24 ГБ.
Чтобы использовать все доступное пространство на новом диске, выполните следующие действия в режиме восстановления. Замените /dev/sdx его на идентификатор устройства вашего системного диска (/ dev / sda, / dev / sdb и т. Д.).
Записки программиста
Резервное копирование базы данных и файлов по SSH
Единственный 100% способ восстановить утерянные по той или иной причине данные — это иметь резервную копию. Репликация не спасет вас от случайного удаления таблицы, а RAID — от пожара в дата-центре . В этом посте я опишу, как настроить резервное копирование с помощью ssh и crond.
Как нетрудно догадаться, нам понадобятся две машины. На одной хранятся важные данные и поднят sshd (сервер), на второй имеется crond и место под хранение резервных копий (клиент).
1. Доступ к серверу без пароля
Поскольку делать backup мы будем по крону, придется настроить доступ к серверу по identity file. Заходим на сервер, и проверяем, что /etc/ssh/sshd_config не содержит строчки:
По умолчанию ее там и не должно быть. Затем переходим в домашний каталог пользователя, от чьего имени будем делать резервные копии и проверяем, что права доступа к каталогу .ssh установлены в 700.
На стороне клиента выполняем следующую последовательность команд от имени пользователя, который будет производить резервное копирование по крону:
/ .ssh / id_rsa.pub | ssh user @ server «cat >> .ssh/authorized_keys»
Здесь мы создали пару ключей для входа на сервер по ssh и скопировали наш public-key на сервер. Делаем проверку:
Если нам удалось зайти без пароля, значит все сделано правильно. В противном случае внимательно перечитываем эту часть и ищем ошибку.
2. Скрипт резервного копирования
На машине, с моей легкой руки названной клиентом, создаем каталог, где будет хранится скрипт, запускаемый по крону, и каталог для резервных копий. Для определенности, у меня это будут
/cron-backup/backups/ соответственно. Важно убедится, что последний каталог находится в разделе, где достаточно место для хранения резервных копий.
Вот так может выглядеть скрипт резервного копирования:
#!/bin/sh
# daily-backup.sh script
# (c) Alexandr A Alexeev 2009 | http://eax.me/
# переходим в каталог, где находится скрипт
cd / home / client-user / cron-backup
# делаем резервную копию каталога на сервере
ssh user @ server \
«tar cvzf — path/to/data/abc» > \
. / backups / data-abc- ` date «+%Y-%m-%d» ` .tgz
# делаем резервную копию базы данных MySQL на сервере
ssh user @ server \
«mysqldump —defaults-extra-file=.dbname_backup db_name | gzip» > \
. / backups / db-name- ` date «+%Y-%m-%d» ` .sql.gz
# удаляем резервные копии старше одной недели
find . / backups -mtime + 7 -print -delete
Примечание: Помните, что для получения горячей копии базы данных в непротиворечивом состоянии необходимо использовать утилиту mysqldump с флагом — -lock-tables (возможно, — -lock-all-tables — см man) в случае с MyISAM или — -single-transaction в случае с InnoDB. При резервном копировании файлов может быть целесообразно создать снапшот файловой системы (см пятый пункт шестого выпуска мини-заметок).
Файл .dbname_backup на сервере должен хранить настройки подключения к базе данных db_name и иметь права доступа 600.
Меняем права доступа к нашему скрипту и проверяем его работоспособность:
Дополнение: Также хорошо зарекомендовала себя утилита rsync. В отличие от tar rsync производит копирование только измененных и созданных с прошлого бэкапа файлов (а также удаляет удаленные) вместо того, чтобы каждый раз производить полное копирование. Пример Makefile, использующего rsync:
# Мейкфайл для синхронизации файлов
# (c) 2011 Александр Алексеев | http://eax.me/
# не забываем слэши на конце!
REMOTE=user@example.ru:path/to/directory/
LOCAL=./
# кстати, при LOCAL=./ сам мейкфайл тоже синхронизируется 🙂
put:
rsync -e ssh —progress —del -zutr $
get:
rsync -e ssh —progress —del -zutr $
Для резервного копирования говорим «make get», для восстановления файлов — «make put».
3. Запуск скрипта по крону
Осталось самое простое — добавить одну строчку в /etc/crontab:
Тут важно помнить о переводе часов на летнее и зимнее время. Чтобы скрипт регулярно выполнялся ровно один раз, не стоит планировать его выполнение на период с 2-х до 3-х часов ночи включительно. Перевод часов на зимнее время отменили, так что головной боли теперь меньше. Главное — не забыть правильно настроить систему.
4. Заключение
Разумеется, здесь многое можно доработать или сделать по своему. Например, кому-то нравится говорить «crontab -e» и прописывать команды на автозапуск в локальном кронтабе пользователя вместо редактирования /etc/crontab. В daily-backup.sh можно добавить почтовые уведомления администратора системы. Файлы конфигурации могут хранится в других каталогах, в зависимости от вашей системы. В общем, не стоит следовать предложенной инструкции буквально.
Дополнение: Восстановление из бэкапа рассмотрено в статье Мой опыт переноса блога с шаред хостинга на VDS.
Копирование файлов и запуск команд через SSH
Подключение к серверу посредством SSH – один из основных методов управления *nix серверами. Довольно часто возникает необходимость загрузить файл на удаленный сервер, либо выгрузить, и других средств кроме SSH-подключения нет. К счастью, копирование файлов через защищенное соединение – одна из штатных функций этого протокола и реализуется с помощь отдельной команды scp в Linux-системах, либо с помощью pscp.exe, входящей в состав SSH-клиента Putty для операционной системы Windows.
Работаем на ОС семейства Linux
Используем следующий формат команд:
scp [модификатор] [источник] [место_назначения]
Если в качестве источника или места назначения указывается удаленный сервер, то формат параметра такой:
После запуска команды потребуется ввести пароль от указанной учетной записи удаленного сервера.
Если собрать все вместе, то скопировать локальный файл /home/user/file.tgz в домашний каталог пользователя root удаленного сервера 123.123.123.123 можно командой:
scp /home/user/file.tgz root@123.123.123.123:/root
Чтобы скачать этот же файл с удаленного сервера:
scp root@123.123.123.123:/root/file.tgz /home/user
За одну операцию можно скопировать несколько файлов, для этого необходимо указать их в качестве источника, разделив пробелом – местом назначения будет считаться последний указанный параметр. Например, загрузить файлы file1.tgz и file2.tgz из локального каталога на удаленный сервер позволит команда:
scp file1.tgz file2.tgz root@123.123.123.123:/root
Для копирования каталога потребуется задействовать модификатор команды –r. Копируем локальный каталог /home/user/dir на удаленный сервер:
scp –r /home/user/dir root@123.123.123.123:/root
В тех случаях, когда SSH-сервер работает на нестандартном порту, поможет опция –P. Если нужно подключиться через порт 10022:
scp –P 10022 /home/user/file.tgz root@123.123.123.123:/root
Чтобы узнать какие еще модификаторы поддерживает команда, можно просто запустить scp без параметров и прочитать краткую справку.
Работаем на ОС семейства Windows
При использовании операционной системы Windows и Putty в качестве клиента, формат команды остается тот же, меняется только название исполняемого файл и используется синтаксис указания путей к файлам и каталогам Windows при указании источника или места назначения. Запускаем командную строку (cmd.exe) или PowerShell, переходим в каталог, где расположен файл pscp.exe вводим команду:
pscp.exe C:Tempfile.tgz root@123.123.123.123:/root
В случае запуска из какой-либо другой папки понадобится указать полный путь к pscp.exe. Если в каком-либо из путей присутствуют пробелы, используются двойные кавычки — “Путь к файлу”:
“C:Program FilesPuttypscp.exe” C:Tempfile.tgz root@123.123.123.123:/root
Как и в случае с scp, запустив pscp.exe без параметров, можно увидеть краткую справку по синтаксису команды и перечень поддерживаемых модификаторов.
Запуск команд на удаленном сервере через SSH-подключение
Протокол SSH, помимо работы в интерактивном режиме, поддерживает также разовый запуск команд или скриптов на удаленном сервере.
Работаем на ОС семейства Linux
ssh [пользователь]@[сервер] ‘[команда]’
При запросе вводим пароль указанного пользователя и в консоли получаем вывод команды, если таковой имеется.
Например, получим информацию об установленной на удаленном сервере операционной системе:
ssh root@123.123.123.123 ‘uname -a’
Чтобы запустить несколько команд за одно подключение, можно использовать символ “;” в качестве разделителя. Проверим сетевые настройки и активные сетевые подключения на удаленном сервере:
ssh root@123.123.123.123 ‘ifconfig; netstat -anp tcp’
В случае, если потребуется запустить на удаленном сервере локальный файла сценария, потребуется в SSH-подключении вызвать командный интерпретатор в режиме исполнения сценария (например, bash с ключом -s), и на стандартный ввод передать ему файл сценария. Выглядеть эта конструкция будет так:
ssh root@123.123.123.123 ‘bash -s’
В результате локальный файл /home/user/myscript.sh исполнится на удаленном сервере.
Запуск команды SSH без параметров позволит ознакомиться с краткой справкой по синтаксису и списком дополнительных модификаторов, которые позволяют расширить функциональность команды.
Работаем на ОС семейства Windows
Если мы подключаемся к удаленному серверу с компьютера, работающего на операционной системе Windows, то нам снова потребуется обратиться к терминальному клиенту Putty, в состав которого входит исполняемый файл plink.exe. Работать с этим файлом необходимо из командной строки (cmd.exe) или из PowerShell.
Для запуска команды на удаленном сервере используется следующий синтаксис:
plink.exe [сервер] -ssh -l [пользователь] “[команда]”
Проверим конфигурацию сетевых интерфейсов:
plink.exe 123.123.123.123 -ssh -l root “ifconfig”
Как и при работе с командой SSH в Linux, plink.exe позволяет использовать “;” в качестве разделителя для запуска нескольких команд:
plink.exe 123.123.123.123 -ssh -l root “ifconfig; netstat -anp tcp”
А запуск команд из локального файла можно реализовать с помощью дополнительного ключа —m: