Бэкап и восстановление openHAB
Если openHAB крутится на Raspberry Pi с SD-картой три года без единого бэкапа — рано или поздно карта умрёт, и вместе с ней все items, rules, sitemaps и настроенные годами интеграции с реальными устройствами. Восстановить это руками за один вечер не получится: часть логики просто забудется. Ниже — рабочая схема бэкапа и восстановления openHAB, которую можно поставить один раз и забыть, пока не понадобится реально что-то восстанавливать.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что именно нужно бэкапить в openHAB
openHAB хранит состояние в трёх местах, и их важность сильно различается:
| Каталог | Переменная | Что внутри | Насколько критично |
|---|---|---|---|
/etc/openhab | OPENHAB_CONF | items, rules, sitemaps, things, transform, services, html/icons | Критично — без этого теряется вся логика |
/var/lib/openhab | OPENHAB_USERDATA | jsondb (Things/Items из UI, привязки аддонов), persistence-данные, cache, tmp, логи | Критично, но cache/tmp можно исключить |
/usr/share/openhab | OPENHAB_HOME | сам рантайм, Karaf, установленные jar-аддоны | Не критично — переустанавливается из пакета/образа |
Отдельно держите в уме: если вы завели Things и Items через UI (Main UI / PaperUI), они лежат не в текстовых файлах в /etc/openhab, а в JSONDB внутри userdata/jsondb/*.json. Это частая ошибка новичков — бэкапят только /etc/openhab, потому что «там же конфиги», а потом после восстановления пропадают все UI-Things.
Persistence-сервисы (InfluxDB, MySQL, rrd4j) хранят исторические данные датчиков отдельно от openHAB и в этот бэкап не попадают в принципе — про них ниже отдельный раздел.
Встроенный инструмент openhab-cli backup/restore
Если openHAB установлен из APT/RPM-репозитория (а не в Docker), в комплекте идёт обёртка openhab-cli, которая умеет собирать и разворачивать архив сама, зная нужные пути:
sudo openhab-cli backup /var/lib/openhab/backup/openhab-$(date +%F).zip
Без указания пути утилита создаст архив в текущей директории с именем вида openhab-backup-<timestamp>.zip. По умолчанию она берёт conf и userdata, но пропускает временные и кэш-каталоги (cache, tmp, часть логов) — это осознанно, чтобы архив не разрастался до гигабайтов на пустом месте.
Восстановление — обратная команда:
sudo systemctl stop openhab
sudo openhab-cli restore /var/lib/openhab/backup/openhab-2026-08-20.zip
sudo systemctl start openhab
Важно: openhab-cli не спрашивает подтверждения перед перезаписью — команда restore затирает текущий conf и userdata содержимым архива. Прогонять её на боевом сервере «на всякий случай посмотреть» не стоит — сначала снимите отдельный бэкап текущего состояния.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверРучной бэкап для Docker-установки
В Docker-варианте openhab-cli внутри контейнера тоже доступен, но чаще проще работать с volume-ами напрямую — это не зависит от того, как именно собран образ. Обычный docker-compose.yml для openHAB заводит три тома:
services:
openhab:
image: openhab/openhab:4.3
volumes:
- openhab_conf:/openhab/conf
- openhab_userdata:/openhab/userdata
- openhab_addons:/openhab/addons
volumes:
openhab_conf:
openhab_userdata:
openhab_addons:
Бэкап без остановки контейнера рискует поймать файл jsondb в момент записи — лучше сначала мягко остановить сервис:
docker compose stop openhab
docker run --rm \
-v openhab_conf:/data/conf \
-v openhab_userdata:/data/userdata \
-v $(pwd):/backup \
alpine tar czf /backup/openhab-backup-$(date +%F).tar.gz -C /data conf userdata
docker compose start openhab
Восстановление — тот же приём в обратную сторону: остановить контейнер, распаковать архив во временный volume, стартовать заново. Если переносите openHAB на другой сервер, убедитесь, что версия образа совпадает или новее — jsondb от более новой версии openHAB может не открыться старым рантаймом.
Автоматизация: cron и офсайт-копии
Ручной бэкап хорош ровно до первого забытого запуска. Рабочий вариант — cron-задача плюс копия за пределы сервера, потому что локальный бэкап на том же диске не спасёт при выходе диска из строя.
# /etc/cron.d/openhab-backup
0 3 * * * root /usr/bin/openhab-cli backup /var/lib/openhab/backup/openhab-$(date +\%F).zip >> /var/log/openhab-backup.log 2>&1
15 3 * * * root find /var/lib/openhab/backup -name '*.zip' -mtime +14 -delete
Ротация нужна обязательно — без неё каталог с бэкапами тихо съест всё свободное место за пару месяцев.
Для офсайт-копии проще всего rclone до S3-совместимого хранилища:
rclone copy /var/lib/openhab/backup remote:openhab-backups --min-age 1h
Важный нюанс безопасности: в архиве openHAB часто лежат живые секреты — токены Telegram/Alexa/Google Home биндингов, пароли от MQTT-брокера, API-ключи погодных сервисов из services/*.cfg или things в JSONDB. Если копия уходит в облако, шифруйте архив перед отправкой (gpg --symmetric или встроенное шифрование restic, если используете его вместо связки cron+rclone) — просто выгружать zip в открытый бакет не стоит.
Восстановление openHAB на новом сервере
Пошагово, для сценария «старый сервер умер, поднимаем на новом»:
- Установите openHAB той же мажорной версии, что была на старом сервере (или актуальную, если готовы разбираться с миграцией схемы jsondb — в мажорных релизах она иногда меняется).
- Остановите сервис:
sudo systemctl stop openhab. - Скопируйте архив бэкапа на новый сервер (
scp, или заберите из офсайт-хранилища черезrclone copy). - Разверните:
sudo openhab-cli restore <файл>.zip. - Проверьте владельца файлов — после restore иногда остаются права от пользователя, из-под которого разворачивали архив:
sudo chown -R openhab:openhab /etc/openhab /var/lib/openhab. - Запустите:
sudo systemctl start openhabи сразу смотрите лог:tail -f /var/log/openhab/openhab.log. - Дайте системе 2-3 минуты на переиндексацию JSONDB и переподключение биндингов — на слабом железе (тот же Raspberry Pi 3) это заметно дольше, чем на нормальном сервере с SSD.
Если планируете держать openHAB не на домашнем железе, а на VPS или выделенном сервере — это отдельно снимает саму проблему деградации SD-карты как причины бэкапа №1: диски на серверных SSD/NVMe живут ощутимо дольше при той же нагрузке на запись логов и persistence-баз, что и создаёт первичный износ на Raspberry Pi.
Частые проблемы при бэкапе и восстановлении
- Restore прошёл, а UI-Things пропали. Почти всегда причина — бэкапили только
/etc/openhab, забыв проuserdata/jsondb. Проверьте, что в архиве реально есть каталогjsondbс файлами вродеorg.openhab.core.thing.Thing.json. - После restore на новую версию openHAB сервис не стартует или сыплет ошибками биндингов. JSONDB между мажорными версиями иногда меняет формат. Безопасный путь — восстанавливать на ту же минорную ветку, что была на исходном сервере, и уже потом обновляться штатным апдейтом с рабочей системы.
- Бэкап «не видит» историю датчиков после восстановления. Ожидаемо:
openhab-cli backupне трогает внешние persistence-сервисы. InfluxDB бэкапится своимinfluxd backup, MySQL —mysqldump, это отдельные задачи cron рядом с бэкапом самого openHAB. - Архив весит гораздо больше, чем ожидалось. Обычно в
userdataнакопились старые логи или необнулённыйcache/tmp.openhab-cli backupих исключает по умолчанию, а вот ручнойtarбез--excludeтащит всё подряд — стоит явно исключать эти каталоги. - Restore на другом сервере — permission denied в логах. Классика для ручного
tar-варианта: владелец файлов после распаковки — root или тот пользователь, из-под которого делали restore, а сервис openHAB запускается отopenhab. Лечитсяchown -Rиз шага восстановления выше.
Если работаете с бэкапами Docker-томов и хотите общую картину граблей (permissions, символические ссылки, порядок stop/backup/start), пригодится разбор частых ошибок бэкапа Docker volume — там те же грабли, но не привязаны к конкретному сервису. А если рассматриваете альтернативную или параллельную платформу умного дома, вот как разворачивается Home Assistant в Docker Compose — у него схожая логика бэкапа, только структура каталогов другая. Общий каркас автоматизации бэкапов на сервере — в статье про автоматические бэкапы на AlmaLinux 9 с нуля, если openHAB у вас крутится не на Raspberry Pi, а уже на полноценном сервере.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Как часто делать бэкап openHAB?
Ежедневно через cron достаточно для большинства домашних инсталляций — items и rules меняются нечасто, а вот jsondb с состояниями Things обновляется постоянно, и суточный интервал покрывает типичный сценарий «что-то сломал вчера вечером, откатываю сегодня утром».
Можно ли восстановить бэкап на другую версию openHAB?
В пределах одной мажорной версии — как правило да. Между мажорными версиями возможны изменения формата JSONDB и API аддонов, поэтому надёжнее сначала восстановить на исходную версию, убедиться, что всё поднялось, и только потом обновляться штатным способом с уже рабочей системы.
Бэкапит ли openhab-cli backup базу InfluxDB или Grafana-дашборды?
Нет, это независимые сервисы со своим хранилищем. Их нужно бэкапить отдельно — influxd backup для InfluxDB, экспорт дашбордов или бэкап volume для Grafana.
Сколько весит типичный бэкап openHAB?
Сильно зависит от количества настроенных Things и глубины persistence в jsondb — от нескольких мегабайт на скромной инсталляции до заметно больше на системах с сотнями устройств и долгой историей. Ориентируйтесь по факту первого бэкапа на вашей системе, а не по чужим цифрам.
Нужно ли останавливать openHAB перед бэкапом?
Для openhab-cli backup — не обязательно, штатный сценарий рассчитан на бэкап на живой системе. Для ручного tar с Docker-томами — желательно, чтобы не поймать jsondb-файл в момент записи.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →