Введение
Ранее я уже неоднократно рассматривал вопрос резервного копирования данных или целых серверов linux. Конкретно в этих статьях:
- Бэкап сервера с помощью Duplicity.
- Создание резервной копии на Яндекс.Диске.
- Настройка Rsync для бэкапа данных.
Забэкапить сразу весь сервер можно, например, с помощью Duplicity. Но вот восстановить его на другом железе будет не так просто. Помимо данных нужно будет, как минимум, позаботиться о разметке диска, установке загрузчика. На это необходимо затратить некоторые усилия и немного разбираться в теме initramfs и grub. Сам я не очень разбираюсь в нюансах работы этих инструментов и очень не люблю с ними возиться.
Некоторое время назад появился отличный бесплатный продукт для бэкапа всего сервера целиком. Речь идет о Veeam Agent for Linux FREE. С его помощью можно сделать полный backup сервера, положить его куда-нибудь по smb или nfs, потом загрузиться с live cd и восстановить из бэкапа на другом железе.
Сразу расскажу о некоторых нюансах работы бесплатной версии, с которыми столкнулся в процессе эксплуатации замечательного продукта от veeam.
- Бэкап можно сделать либо всего сервера сразу, либо отдельного диска, либо отдельных папок и файлов. При выборе бэкапа всего диска или сервера, нельзя задать исключения для отдельных папок или файлов. Это очень неудобно, но увы и ах, таков функционал. Исключения можно сделать только если вы делаете бэкап на уровне папок.
- Бэкап можно положить локально на соседний раздел, если делаете резервную копию раздела, локально в папку — если делаете бэкап файлов и папок. Если бэкапите всю систему целиком, то удаленно по smb и nfs. К сожалению, по ftp или sftp программа не работает.
В качестве хранилища для архивов может выступать репозиторий Veeam Backup & Replication. Но я не рассматриваю этот вариант, так как в данном случае использую только бесплатное решение.
Мне очень хотелось настроить резервную копию всего сервера на Яндекс.Диск, но, к сожалению, у меня это не получилось из-за технических ограничений. Яндекс.Диск подключается к системе через webdav. Для того, чтобы сделать резервную копию всей системы, нужно бэкапить либо всю систему сразу, либо образ диска. Если у вас небольшой веб сервер, то скорее всего на нем только один раздел. На этом же разделе хранится кэш, который использует webdav для передачи файлов. Без кэша он работать не умеет.
Думаю вы уже поняли, в чем проблема сделать полный backup сервера с помощью Veeam Agent for Linux на Яндекс.Диск по webdav. Вы не сможете добавить в исключения папку с кэшом от webdav. В итоге, во время бэкапа с помощью veeam будет расти папка с кэшом webdav, которая, в свою очередь, будет бэкапиться. В итоге, свободное место на диске закончится, бэкап прервется.
Я подробно описал ситуацию с Яндекс.Диском, потому что пространство на нем не дорого стоит. Я часто его использую в повседневной жизни, настраиваю бэкапы, храню данные и т.д. В общем, мне он нравится по ряду причин. Для того, чтобы бэкапить весь сервер целиком, вам придется найти место для архивных копий с доступом по smb или nfs. Таких предложений не очень много на рынке. Практически не из чего выбирать, я специально искал.
Остановился вот на этом варианте — KeyDisk. После оплаты, вам дают адрес сервера, логин и пароль. Вы можете сразу же подключаться по smb к хранилищу. Можно прям в windows через два обратных слеша зайти или подмонтировать хранилище к linux серверу.
KeyDisk стоит примерно 350р. в месяц за 100 гигов. Не очень дешево, конечно, в сравнении с облачными сервисами, но все равно не дорого. Похожих предложений с доступом по smb я лично вообще не нашел в принципе. Этот объем позволит вам забэкапить небольшой веб сервер с глубиной архива в несколько недель или месяцев, в зависимости от того, сколько данных у вас на нем хранится.
Дальше я подробно на конкретном примере расскажу как все настроить и восстановить или перенести сервер целиком, если понадобится. Причем переносить буду вообще на другое железо. Но обо всем по порядку.
Запустите восстановление
-
Предварительно удалите произвольный файл, например утилиту , чтобы проверить восстановление:
-
Убедитесь, что утилита удалена:
Вывод команды должен быть следующим:
-
Войдите в Bacula Console:
-
Запустите полное восстановление:
Выберите , чтобы запустить восстановление из последней резервной копии:
Введите , чтобы подтвердить полное восстановление:
Введите , чтобы подтвердить запуск восстановления:
-
Проверьте статус восстановления:
Вывод команды, если восстановление выполняется:
Вывод команды, если восстановление завершено:
-
Дождитесь завершения восстановления и выйдите из Bacula Console:
Пример бэкапа windows сервера с помощью rsync
Еще один пример из моей практики. Допустим, у нас есть windows сервер с некоторой информацией, которую мы хотим так же бэкапить. Никаких проблем, это делается достаточно просто.
Создаем на windows сервере сетевую шару с информацией. Создаем пользователя и добавляем его в доступ к этой папке. Этого пользователя мы будем использовать для подключения виндовой шары к linux серверу.
Монтируем шару с информацией, которую будем бэкапить:
# mount -t cifs //192.168.0.16/docs /mnt/docs -o user=backup,password=12345,iocharset=utf-8,codepage=cp866
192.168.0.16 — адрес виндовой шары
backup и 12345 — пользователь и пароль виндовой машины с доступом к шаре docs.
Все, теперь папку /mnt/docs можно использовать в качестве приемника в нашем скрипте бэкапа с rsync. Если папка примонтирована непосредственно к серверу с бэкапами, то нужно на нем самом настроить конфиг rsyncd на примере серверов источников, запустить на нем rsyncd и в скрипте в качестве ip адреса сервера указывать 127.0.0.1.
Я в таких случаях создаю несколько скриптов: на монтирование шары, бэкап и размонтирование, объединяю их в один и запускаю последовательно. В итоге получается, что подключаем диск, делаем бэкап и отключаем его.
Так же есть возможность установить на Windows Server rsync с помощью cygwin. Подобный функционал собран в готовом приложении — cwRsync server. Его настройка ничем принципиально не отличается от настройки linux версии. Нужно только внимательно следить за путями к директориям, примеры есть в конфигах.
Онлайн курс Infrastructure as a code
Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.
Что даст вам этот курс:
- Познакомитесь с Terraform.
- Изучите систему управления конфигурацией Ansible.
- Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
- Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
- В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .
Настройте компоненты Bacula
Настройте Bacula Director
-
Откройте конфигурационный файл Bacula Director:
-
В блоке конфигурации добавьте строку , чтобы настроить соединение с Bacula Director:
-
Для удобства переименуйте задачу на :
-
В конфигурации задачи добавьте строку , чтобы назначить папкой для восстановленных файлов:
-
В блоке конфигурации с именем в разделе :
- Добавьте строку в раздел для сжатия при резервировании.
- Укажите для резервирования всей файловой системы.
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите внутренний IP-адрес виртуальной машины.
-
В блоке конфигурации укажите внутренний IP-адрес виртуальной машины в поле , чтобы настроить соединение с Storage Daemon:
-
В блоке конфигурации укажите пароль для базы данных , созданный при , для подключения к БД:
-
Сохраните файл.
-
Проверьте, что в файле нет синтаксических ошибок:
Если сообщений об ошибках нет, конфигурация корректна.
Настройте Storage Daemon
-
Откройте конфигурационный файл Storage Daemon:
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите внутренний IP-адрес виртуальной машины.
-
В блоке конфигурации укажите внутренний IP-адрес виртуальной машины в поле для настройки соединения с Storage Daemon:
-
В блоке конфигурации укажите папку для резервного копирования :
-
Сохраните файл.
-
Проверьте, что в файле нет синтаксических ошибок:
Если сообщений об ошибках нет, конфигурация корректна.
Создайте пароли для компонентов Bacula
Bacula Director, Storage Daemon и File Daemon используют пароли для межкомпонентной аутентификации.
Чтобы установить пароли для компонентов Bacula:
-
Сгенерируйте пароли для Bacula Director, Storage Daemon и File Daemon:
-
Поместите пароли в конфигурационные файлы:
Создайте виртуальную машину
Чтобы создать виртуальную машину:
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.
В поле Имя введите имя виртуальной машины: .
Выберите зону доступности, в которой будет находиться виртуальная машина.
В блоке Образы из Cloud Marketplace нажмите кнопку Выбрать. Выберите публичный образ CentOS 7.
В блоке Вычислительные ресурсы выберите:
Платформа — Intel Cascade Lake.
Гарантированная доля vCPU — 20%.
vCPU — 2.
RAM — 2 ГБ.
В блоке Сетевые настройки выберите сеть и подсеть, к которым нужно подключить виртуальную машину. Если нужной сети или подсети еще нет, вы можете создать их прямо на странице создания ВМ.
В поле Публичный адрес оставьте значение Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Yandex.Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.
Укажите данные для доступа на виртуальную машину:
В поле Логин введите имя пользователя.
В поле SSH-ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно, см
раздел о подключении к виртуальным машинам по SSH.
Внимание
IP-адрес и имя хоста (FQDN) для подключения к машине назначатся ей при создании. Если вы выбрали вариант Без адреса в поле Публичный адрес, вы не сможете обращаться к ВМ из интернета.
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут.
При создании виртуальной машине назначается публичный IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
Troubleshooting
Your password contains special characters, and you receive this error while providing correct credentials:
- Encode the password into base64 format: https://www.base64encode.org/
- Specify the encoded password using the -b or —base64 parameter. For a Windows agent, it would be:register_agent.exe -o register -t cloud -a https://cloud.acronis.com -u <account> -b -p <encoded password>
If you want-to re-register Agent from one Backup Account to another, and the operation fails, try unregistering the Agent first:
- Open Command prompt and navigate to C:\Program Files\BackupClient\RegisterAgentTool:cd «%ProgramFiles%\BackupClient\RegisterAgentTool»
- Issue this command to unregister the client machine:
register_agent.exe -o unregister
Настройте хранилище для резервного копирования
Смонтируйте бакет в файловую систему
Смонтируйте бакет в файловую систему, чтобы загружать скопированные файлы в Object Storage:
-
Смонтируйте бакет с помощью утилиты :
- — название бакета в Object Storage.
- — идентификатор пользователя из файла .
- — идентификатор группы из файла .
-
Проверьте права доступа к папке :
Вывод команды должен быть следующим:
-
Проверьте, что пользователь может создавать файлы в папке :
-
Временно включите оболочку для пользователя :
-
Создайте произвольный файл в папке :
-
Убедитесь, что файл создан в папке :
-
На странице каталога в консоли управления откройте сервис Object Storage. Убедитесь, что файл появился в бакете .
-
Удалите тестовый файл:
-
Отключите оболочку для пользователя :
-
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex.Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex.Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе или . Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша виртуальная машина, на странице облака.
Необходимые платные ресурсы
В стоимость поддержки резервного копирования и восстановления входит:
- плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- плата за хранение данных (см. тарифы Yandex Object Storage);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Установка rsync на CentOS 8
Чаще всего rsync уже присутствует в базовой версии centos 8, но скорее всего без версии, работающей в качестве службы. Так что устанавливаем обоих:
# dnf install rsync rsync-daemon
Если у вас еще нет настроенной системы, то используйте мои статьи по установке и настройке centos 8. Запускаем rsyncd и добавляем в автозагрузку.
# systemctl enable --now rsyncd Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.
Проверяем автозагрузку:
# systemctl list-unit-files --type service | grep rsyncd rsyncd.service enabled
Проверяем, слушает ли служба сетевой порт.
# netstat -tulpn | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 40814/rsync tcp6 0 0 :::873 :::* LISTEN 40814/rsync
Все в порядке, можно приступать к настройке rsync. Если вам не нужен ipv6, то можете его .
Настройка rsync
Теперь приступаем к настройке. Логика наших бэкапов будет следующая. При первом запуске мы делаем полный бэкап интересующей нас информации в папку current. Потом раз в сутки мы сверяем имеющийся архив с источником и делаем его вновь актуальным, перезаписывая все изменившиеся файлы, но при этом не удаляем их, а складываем в папку increment, где каждый день создается папка с именем в виде даты, в которую складываются все измененные файлы за текущий день. Таким образом, у нас всегда будет полный архив, актуальный на момент последней синхронизации, плюс набор папок за каждый день с изменившимися в этот день файлами. Сколько дней хранить, можно выбрать по необходимости.
Получается у нас такая картинка:
При этом подключение и работа rsync будет проходить по своему отдельному порту tcp 873. Не забудьте настроить iptables и открыть этот порт. Приступаем к реализации. В первую очередь настраиваем rsync на серверах источниках информации, с которых мы будем забирать данные для backup.
Создаем файл конфигурации rsync:
# mcedit /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log transfer logging = true munge symlinks = yes # папка источник для бэкапа path = /data uid = root read only = yes list = yes comment = Data backup Dir auth users = backup secrets file = /etc/rsyncd.scrt
Создаем файл с учетными данными для подключения:
# mcedit /etc/rsyncd.scrt
backup:12345
где backup — имя пользователя, 12345 — пароль.
Делаем права на чтение только root, иначе rsync не запустится:
# chmod 0600 /etc/rsyncd.scrt
После настройки перезапускаем rsync. На Centos:
# systemctl restart rsyncd
На Debian/Ubuntu:
# systemctl restart rsync
Теперь идем на сервер приемник, в котором будут храниться архивные копии с серверов источников. Там создаем скрипт инкрементного бэкапа c использованием rsync:
# mcedit /root/bin/backup-server1.sh
#!/bin/bash date # Папка, куда будем складывать архивы syst_dir=/backup/ # Имя сервера, который архивируем srv_name=server1 # Адрес сервера, который архивируем srv_ip=10.10.1.55 # Пользователь rsync на сервере, который архивируем srv_user=backup # Ресурс на сервере для бэкапа srv_dir=data echo "Start backup ${srv_name}" # Создаем папку для инкрементных бэкапов mkdir -p ${syst_dir}${srv_name}/increment/ # Запускаем непосредственно бэкап с параметрами /usr/bin/rsync -avz --progress --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/ # Чистим папки с инкрементными архивами старше 30-ти дней /usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \; date echo "Finish backup ${srv_name}"
Делаем скрипт исполняемым:
# chmod 0744 /root/bin/backup-server1.sh
Создаем файл с паролем для авторизации на сервере источнике:
# mcedit /etc/rsyncd.scrt
12345
Делаем права на чтение только root, иначе rsync выдаст ошибку:ERROR: password file must not be other-accessible
Исправляем это:
# chmod 0600 /etc/rsyncd.scrt
На этом все, теперь можно запускать скрипт и ожидать его выполнения. Если получите ошибку на клиенте:
rsync: opendir "/." (in data) failed: Permission denied (13)
и вот эту на сервере:
SELinux is preventing rsync from getattr access on the file
Проверьте настройки SELinux. Это он блокирует доступ к файлам. Нужно либо отключить selinux, либо настроить. В данном случае настройка простая:
# setsebool -P rsync_full_access on
Осталось добавить скрипт в cron:
# mcedit /etc/crontab
30 23 * * * root /root/bin/backup-server1.sh
Я обычно создаю несколько скриптов для каждого сервера отдельно. Потом объединяю их запуск в одном общем скрипте и уже его добавляю в cron. А потом по мере необходимости редактирую уже его, добавляю или удаляю сервера.
Solution
Use this method to manually register a Backup Agent.
Note that account name and password used in the commands are for backup user account, not for Partner-level admin
Use quotation marks, if your password contains special characters or spaces.
Instructions below are applicable to Acronis Cyber Protect Cloud 7.8 and newer. If you use an older version of the product, click
Windows OS
- Open Command prompt and navigate to C:\Program Files\BackupClient\RegisterAgentTool:cd «%ProgramFiles%\BackupClient\RegisterAgentTool»
- Issue this command to register the client machine using account and password:
register_agent.exe -o register -t cloud -a https://cloud.acronis.com -u <account> -p <password>
where -u <account> -p <password> are login and password for backup user account, follow if the password contains special characters
or issue this command to register the client machine using registration token:»C:\Program Files\BackupClient\RegisterAgentTool\register_agent.exe» -a <your-datacenter> —token <token> -o register -t cloud
<your-datacenter> is the datacenter address displayed in browser when you log in to Cyber Protection console, e.g. https://au1-cloud.acronis.com
Linux OS
- Open terminal as root user.
-
Type in the following command to register the agent using account and password:/usr/lib/Acronis/RegisterAgentTool/RegisterAgent -o register -t cloud -a https://cloud.acronis.com -u <account> -p <password>
where -u <account> -p <password> are login and password for backup user account, follow if the password contains special characters
or execute the following command to register the client machine using registration token: /usr/lib/Acronis/RegisterAgentTool/RegisterAgent -o register -t cloud -a <your-datacenter> —token <token>
<your-datacenter> is the datacenter address displayed in browser when you log in to Cyber Protection console, e.g. https://au1-cloud.acronis.com
OS X
- Open terminal.
-
Execute the following command to register the client machine using account and password:sudo «/Library/Application Support/BackupClient/Acronis/RegisterAgentTool/RegisterAgent» -o register -t cloud -a https://cloud.acronis.com -u <account> -p <password>
where -u <account> -p <password> are login and password for backup user account, follow if the password contains special characters
or execute the following command to register the client machine using registration token:sudo «/Library/Application Support/BackupClient/Acronis/RegisterAgentTool/RegisterAgent» -o register -t cloud -a <your-datacenter> —token <token>
<your-datacenter> is the datacenter address displayed in browser when you log in to Cyber Protection console, e.g. https://au1-cloud.acronis.com
Instructions for Acronis Cyber Protect Cloud 7.5 or older: click to expand
Windows OS
- Open Command prompt and navigate to C:\Program Files\BackupClient\BackupAndRecovery:cd «%ProgramFiles%\BackupClient\BackupAndRecovery»
- Issue this command to register the client machine:register_msp_mms.exe register https://cloud.acronis.com <account> <password>
where -u <account> -p <password> are login and password for backup user account, follow if the password contains special characters
Linux OS
- Open terminal as root user.
- Type in the following command to register the agent:/usr/lib/Acronis/BackupAndRecovery/AmsRegisterHelper register https://cloud.acronis.com <account> <password>
where -u <account> -p <password> are login and password for backup user account, follow if the password contains special characters
OS X
- Open terminal.
- Execute:sudo «/Library/Application Support/BackupClient/Acronis/BackupAndRecovery/AmsRegisterHelper» register https://cloud.acronis.com <account> <password>
where -u <account> -p <password> are login and password for backup user account, follow if the password contains special characters
Настройте AWS CLI
После того как виртуальная машина перейдет в статус :
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту в Linux и macOS и программу PuTTY для Windows.
Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.
-
Установите yum-репозиторий:
-
Установите :
-
Установите AWS CLI:
-
Настройте AWS CLI:
Команда запросит значения параметров:
- — введите идентификатор , который вы получили при .
- — введите секретный ключ , который вы получили при .
- — .
- — .
-
Проверьте, что файл содержит правильные значения и :
-
Проверьте, что файл содержит правильные значения и :
Выбор редакции
Veeam Agent для Linux может работать в трех режимах:
- Server — режим, обеспечивающий доступ ко всем функциям продукта и предназначенный для выполнения задач защиты данных на серверах под управлением ОС Linux. Veeam Agent для Linux может работать в режиме сервера, если на защищенном компьютере установлена коммерческая лицензия, поддерживающая этот режим;
- Workstation — режим, который предлагает ограниченные возможности, достаточные для выполнения задач защиты данных на настольных компьютерах и ноутбуках, работающих под управлением ОС Linux. Veeam Agent для Linux может работать в режиме рабочей станции, если на защищенном компьютере установлена коммерческая лицензия, поддерживающая этот режим;
- Free — режим, который предлагает те же возможности, что и режим рабочей станции, но не поставляется с коммерческой программой поддержки. В отличие от режимов рабочей станции и сервера, свободный режим не требует лицензии.
Чтобы проверить, в каком режиме работает Veeam Agent для Linux, используйте командную строку. Дополнительные сведения в разделе Просмотр информации о лицензии.
По истечении срока действия лицензии Veeam Agent for Linux автоматически переходит в бесплатный режим.
По сравнению с режимом функциональности сервера Veeam Agent для Linux, свободные и рабочие станции имеют следующие ограничения:
- количество заданий резервного копирования, которые вы можете настроить в Veeam Agent для Linux, ограничено одним;
- вы не можете указывать сценарии предварительного приостановления и последующего запуска в настройках задания резервного копирования;
- вы не можете использовать репозиторий Veeam Cloud Connect в качестве основного места хранения для файлов резервных копий при использовании бесплатного режима.
Вы можете настроить Veeam Agent для Linux для создания резервных копий автоматически (запускаемых в определенное время дня по заданному плану), или выполнять резервное копирование данных вручную. Вы можете создать резервную копию образа машины или отдельных каталогов и файлов. Эта функция доступна для редакции Server. Подробнее читайте в статье Резервное копирование данных.
Перед началом работы ознакомьтесь с системными требованиями и используемыми сетевыми портами.