Привет,
Я — разработчик, и многие мои хобби вращаются вокруг компьютеров. В частности, для разных моих поделок дома у меня работает небольшой сервер на старом железе. Спецификой наверное любого персонального домашнего сервера является обилие разной мелочи, раскиданной по нему, сервисов различной направленности, например, MySQL и PostgreSQL, или RoR- и Django-приложения по соседству на одной домашней машине — это нормально; чего не встретишь во взрослом продакшне, где у железок своя специализация и быстрый ввод в строй новой ноды — штатная процедура.
Некоторые данные на моем сервере, как и положено, представляют для меня весьма существенную ценность, и потерять их было бы жалко.
Поэтому я делаю бэкапы. Бэкапы я делаю с помощью
Duplicity и храню их на NAS-е. Устраиваю себе периодически небольшие учения, проверяя процедуру восстановления из бэкапов и целостность бэкапов, возможность восстановить БД из дампов, наличие конфигов и всё такое. Делаю это, когда случайно находится небольшой кусочек свободного времени. И теперь я подхожу к сути вопроса: ручное восстановление из бэкапа даже небольшой части моего небольшого зоопарка — это очень муторная процедура, которая, при нехватке времени, может занимать (я говорю о полном восстановлении) — несколько вечеров…
Итак, исходные данные:
- домашний сервер под управлением Linux. Например, вездесущий Ubuntu Server;
- второсортное потребительское железо, готовое отказать в любой момент, а может сыпаться по чуть-чуть несколько недель подряд (я говорю в первую очередь про жесткие диски);
- другое второсортное железо, совсем не похожее на первое, имеющее совсем другую конфигурацию вплоть до архитектуры процессора (например, был старый ноутбук с Intel Core2Duo с механическим жестким диском, а стал одноплатный миникомпьютер с четырехядерным ARM Cortex-A7 и SSD);
- обилие сервисов (веб-сервер, субд, питоны и руби специфичных версий, репозитории кода и т.д. и т.п.) и мелких кусочков того или иного софта и данных, разбросанных по серверу.
Хочется: соблюдая для себя, если это потребуется, какую-то несложную дисциплину или алгоритм действий иметь такую резервную копию, из которой восстановление даже в совершенно непохожей среде (разве что версия ОС, но не платформа, останутся теми же) занимало бы минимум ручного труда. При этом, конфигурирование и внедрение такой системы резервного копирования само по себе так же должно занимать минимум усилий (я не ленивый, это вопрос приоритетов :)).
Самый приятный из придуманных мной вариантов — это делать deb-пакеты со своими конфигурациями, данными и правильно проставленными зависимостями. Группировать их в репозиторий, а репозиторий держать на NAS-е. Пересобирать пакеты по расписанию, включая мета-пакет «разбэкапить всё». Очень красиво, но, чую, жутко трудоемко.
Посоветуйте, пожалуйста, материалы на тему резервирования и восстановления, специфичные для моей задачи, и, если имеются, готовые решения.
Спасибо!