Среди инструментов резервного копирования существует отдельная группа - системы аварийного восстановления на "голое железо" (Bare Metal Disaster Recovery - BMDR), которые позволяют полностью восстановить систему в случае выхода из строя оборудования или уничтожения системы при воздействии иных факторов. Relax-and-Recover - сокращенно ReaR - как раз и представляет такую систему, простую в использовании, но достаточно мощную в работе. С ее помощью вы сможете быстро восстановить вашу ОС Linux на новое оборудование, либо выполнить перенос системы со старого оборудования на новое, либо в виртуальную среду.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Перед тем как начинать работу с ReaR следует уточнить некоторые принципиальные моменты. ReaR предполагает создание двух достаточно независимых сущностей: загрузочного образа и резервной копии.
Загрузочный образ позволяет загрузить систему и выполнить восстановление ее макета, под которым подразумевается дисковая разметка, разделы и файловые системы на них, поддерживаются все типы разметки, включая программный RAID и LVM. Но при этом макет не содержит никаких данных, он просто восстановит структуру дисковой подсистемы.
Резервная копия не содержит сведений о структуре хранения, а просто содержит данные, которые там хранились. Это достигается за счет того, что файловая система Linux иерархична и всегда имеет общий корень, это позволяет просто скопировать все данные одним архивом, а как именно они располагаются на физических носителях определяется макетом.
Кстати, Relax-and-Recover поддерживает множество внешних систем резервного копирования, что позволяет разделить процесс резервного копирования макета и резервного копирования данных, но это выходит за рамки данной статьи и ниже мы будем использовать только встроенные средства.
Установка и первоначальная настройка ReaR
ReaR находится в репозиториях всех актуальных DEB-систем начиная с Debian 10 и Ubuntu 20.04, для его установки выполните команду:
apt install rear
Все настройки ReaR находятся в конфигурационном файле /etc/rear/local.conf, по умолчанию он пуст, содержит только блок комментариев.
Создание загрузочного флеш-накопителя
Если у вас небольшая инфраструктура, то неплохим решением будет использование для резервного копирования системы загрузочного флеш-накопителя. Его объем должен соответствовать объему данных в системе, ну может чуть меньше, потому как резервная копия сжимается при помощи gzip.
Перед использованием флеш-накопитель нужно отформатировать, это делается командой:
rear format /dev/sdX
Где sdX - имя накопителя.
Для UEFI систем команда форматирования должна быть немного иной:
rear format -- --efi /dev/sdX
Затем откройте /etc/rear/local.conf и внесите туда следующие строки:
OUTPUT=USB
BACKUP=NETFS
BACKUP_URL="usb:///dev/disk/by-label/REAR-000"
Опция OUTPUT указывает на тип образа восстановления, в нашем случае это USB-диск, BACKUP задает тип бекапа, NETFS - это встроенный механизм бекапа ReaR, а BACKUP_URL определяет его расположение, для USB-дисков выполняется привязка по метке диска, которая после форматирования всегда будет REAR-000.
Настройка сетевого хранилища резервных копий
Для более сложной и развитой инфраструктуры имеет смысл использовать сетевое хранилище для размещения там образов и резервных копий. Для этого немного изменим конфигурационный файл /etc/rear/local.conf указав в нем следующие опции:
OUTPUT=ISO
BACKUP=NETFS
BACKUP_URL="nfs://192.168.233.184/rear/"
В данном случае мы используем в качестве сетевого хранилища NFS и указываем тип образа восстановления - ISO.
В тоже время ReaR поддерживает различные типы хранилищ, более подробно с этим можно ознакомиться в документации, мы же приведем несколько наиболее популярных вариантов.
Так если вы хотите хранить копии в локальной файловой системе, например, на примонтированном внешнем или сетевом диске:
BACKUP_URL="file:///directory/path/"
Для Samba укажите:
BACKUP_URL="cifs://192.168.233.184/rear"
Если требуется аутентификация на Samba-ресурсе, то ниже добавьте опцию:
BACKUP_OPTIONS="cred=/etc/rear/cifs"
А затем создайте файл /etc/rear/cifs со следующим содержимым:
username=User
password=Pa$$word
domain=WORKGROUP
Его содержимое комментариев не требует.
При всех указанных выше настройках в указанном расположении при выполнении резервного копирования будет создана директория с именем хоста резервируемого узла внутри которой будет находиться загрузочный образ с именем rear-hostname.iso и архив с данными backup.tar.gz, а также служебные файлы и логи.
При восстановлении вам необходимо также иметь доступ к указанному расположению, иначе ReaR не сможет восстановить данные. Параметры подключения к хранилищу в загрузочном образе уже прописаны. Однако бывают ситуации, когда восстанавливать систему приходится автономно, либо в другом контуре, например, при переносе в виртуальную среду и т.д. В этом случае имеет смысл объединить загрузочный образ и архив в один файл.
Для этого измените /etc/rear/local.conf следующим образом:
OUTPUT=ISO
BACKUP=NETFS
OUTPUT_URL="nfs://192.168.233.184/rear/"
BACKUP_URL="iso:///backup"
Здесь нами была использована новая опция OUTPUT_URL, которая указывает место расположения образа восстановления, а BACKUP_URL предписывает расположить архив с данными внутри ISO-образа.
Кстати, комбинируя эти две опции можно настроить раздельное хранение образов и архивов с данными, тем более что OUTPUT_URL предполагает значительно большее количество способов подключения к хранилищу.
Из полезных опций также можно упомянуть про перенаправление временной директории, например, если у вас /tmp вынесен на отдельный раздел или RAM-диск и на нем недостаточно место для создания архива.
TMPDIR=/new_tmp
Обратите внимание, что указанная директория должна существовать, иначе создание резервной копии закончится с ошибкой.
Для того, чтобы исключить из резервной копии некоторые расположения используйте опцию:
BACKUP_PROG_EXCLUDE=( "${BACKUP_PROG_EXCLUDE[@]}" '/tmp/*' '/proc/*' '/sys/*' '/dev/*' )
Расположения задаются в одиночных кавычках через пробел. Обратите внимание, что исключения указываются с использованием маски. В этом случае указанные директории попадут в архив, но их содержимое будет проигнорировано, иначе в копии не будет самих директории, что может вызвать проблемы в работе восстановленной системы.
Резервное копирование
Для того, чтобы выполнить резервное копирование выполните:
rear -v mkbackup
Эта команда создаст новый загрузочный образ и новый архив с данными. Ключ -v (verbose) отображает подробный лог в консоли, если что-то пошло не так, то можете добавить ключ -d (debug) для получения более подробной информации.
Если вам нужно только обновить загрузочный образ, то используйте команду:
rear mkrescue
А если только создать новый архив с данными, то:
rear mkbackuponly
В большинстве случаев постоянно обновлять загрузочный образ нет смысла, так как разметка диска и файловые системы меняются редко, чтобы определить, изменился ли макет системы используйте команду:
rear checklayout
echo $?
Если вывод возвратит 0, то макет не изменился, а если 1 - то требуется повторное создание загрузочного образа. Кроме изменения макете загрузочный образ также следует пересоздать при изменении настроек ReaR.
Таким образом для автоматического обновления макета можно использовать конструкцию:
rear checklayout || rear mkrescue && rear mkbackuponly
Но есть один неочевидный момент. Загрузочный образ формируется на базе текущего состояния системы, включая текущую версию ядра и модулей к нему и если вы обновите ядро или включите дополнительные модули, то они не попадут в образ, так как макет системы при этом не изменился. Чаще всего это не вызовет особых затруднений, но в некоторых случаях может препятствовать загрузке, особенно на новом железе. Поэтому при обновлении ядра загрузочный образ лучше всего пересобрать.
В целом никаких сложностей здесь нет, все просто и понятно, осталось только автоматизировать процесс. Обычно для этого используют cron, но в настоящий момент этот метод устарел, и мы будем использовать вместо него таймеры systemd. В первую очередь создадим юнит сервиса:
nano /etc/systemd/system/rear.service
И внесем в него следующий текст:
[Unit]
Description=Relax-and-Recover
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/rear mkbackup
[Install]
WantedBy=multi-user.target
Затем создадим юнит таймера:
nano /etc/systemd/system/rear.timer
В котором следует разместить следующие строки:
[Unit]
Description=Relax-and-Recover timer
[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true
[Install]
WantedBy=timers.target
В нашем случае настроен ежедневный запуск, который будет автоматически разнесен по временем с точностью в 1 час (чтобы исключить нагрузку от одновременного запуска нескольких заданий точно в полночь), также будет выполнен автоматический запуск при пропуске задания.
Более подробно о работе с таймерами systemd вы можете узнать из нашей статьи:
Настраиваем таймеры systemd вместо заданий cron
После того как вы создали юниты перечитаем изменения в них:
systemctl daemon-reload
И пробуем запустить юнит сервиса:
systemctl start rear
После чего должно выполниться резервное копирование. Если все прошло хорошо, то просто включаем таймер для него в автозагрузку:
systemctl enable rear.timer
На этом настройка резервного копирования закончена.
Восстановление из аварийного образа
Перед тем, как переходить к восстановлению необходимо понимать ограничения, чтобы не столкнуться с проблемами на ровном месте. Серьезных ограничений ровно два:
- Образ для UEFI системы не удастся загрузить на системе с BIOS и наоборот.
- Количество дисков должно быть не меньше, чем у целевой системы, а их объем быть равным или превышать объем дисков целевой системы.
Справедливости ради, при восстановлении на диск меньшего объема ReaR выполнит попытку уменьшить последний раздел, но это увенчается успехом только в том случае если у вас простая разметка (без RAID и LVM), а также файловая система в последнем разделе поддерживает уменьшение размера. Но мы не рекомендуем надеяться на это, в большинстве случаев восстановление на диск меньшего объема будет невозможно.
При загрузке с аварийного диска мы видим простое меню, по умолчанию выбрана загрузка с первого жесткого диска, а для восстановления нам нужно выбрать один из верхних пунктов, их отличие только в том, что при выборе второго пункта при загрузке системы восстановление будет запущено автоматически.
Для UEFI-систем загрузочное меню немного иное, но смысл остается тот же, по умолчанию выбрана загрузка аварийного образа с отключенной безопасной загрузкой.
После загрузки войдите в систему пользователем root без пароля и запустите восстановление командой:
rear recover
Восстановление выполняется в несколько этапов, сначала восстанавливается разметка, потом скачивается архив и распаковываются данные. На каждом этапа можно вмешаться в процесс и даже отредактировать параметры восстановления, однако это требует достаточно глубоких знаний и понимания процесса, а также навыков работы с vi. Если вы хотите использовать параметры по умолчанию, то просто подтверждайте их нажатием на Enter, так как времени на раздумье дается много - 5 минут на каждый вопрос, а вопросов там достаточно.
Как мы уже говорили выше, для успешного автоматического восстановления система должна иметь доступ к хранилищу резервных копий или копия должна быть включена в образ. В этом случае вам нужно просто дождаться окончания процесса восстановления и перезагрузить систему.
Если же по какой-то причине резервная копия недоступна, то у вас будет восстановлена только разметка. В этом случае следует выбрать пункт Use Relax-and-Recouer shell and return back to here после чего вы попадаете в консоль ReaR и строка приглашения изменится на:
rear>
После чего разместите любым доступным образом архив с данными в /mnt/local/ и распакуйте его, сам архив после этого можно удалить:
tar xf /mnt/local/backup.tar.gz -C /mnt/local/
rm -f /mnt/local/backup.tar.gz
Затем обязательно выйдите из консоли ReaR командой:
exit
При этом будет сгенерирован новый загрузочный образ и установлен загрузчик, после чего систему можно перезагрузить.
В некоторых случаях вам может потребоваться изменить некоторые параметры восстановленной системы до ее перезагрузки, например, если вы делаете клон или переносите систему в иную среду. Для этого можно воспользоваться возможностью войти в консоль восстановленной системы командой:
chroot /mnt/local bash --login
После чего вы окажетесь в среде восстановленной системы и сможете выполнить в ней все необходимые действия.
Для выхода из chroot также введите:
exit
Как видим, Relax-and-Recover - простая в использовании, но в тоже время очень функциональная и мощная система аварийного восстановления, которую можно использовать как для резервного копирования ваших физических узлов, так и для переноса системы на другое железо или в виртуальную среду.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Последние комментарии