
Сервер Home Assitant у меня работает на ТВ приставке Vontar X3: https://ali.click/4xx4vc?erid=2SDnjeh6Y2C
В этой статье я покажу как делать резервные копии настроек Home Assistant в методе установки Home Assistant Container.
Так-же Покажу как создавать резервные копии версий контейнеров (аддонов) и восстанавливать их (откатывать на более раннюю версию) если это необходимо.
Так-же покажу как резервные копии автоматизировать.
Прошлые статьи по настройке Home Assistant Container:
- Установка Home Assistant Container на Linux и любой одноплатный компьютер.
- Установка и настройка FileEditor в Home Assistant Container
- Установка HACS в Home Assistant Container
- Установка и настройка Mosquitto (mqtt) broker на Home Assistant Container
- Установка и настройка Zigbee2mqtt в Home Assistant Container
- Установка и настройка Matter Server в Home Assistant Container
- Установка и настройка ESPHome в Home Assistant Container
- Оповещение о новых обновления контейнера с помощью DIUN и обновление контейнеров.
- Резервное копирование и восстановление Home Assistant Container
Все настройки Home Assistant, если делали по моим урокам, хранятся в папке /config.
Резервная копия настроек Home Assitant:
Резервная копия папки /config делается такой командой:
tar -zcvf "/backup/homeassistant-$(date +%F-%H%M%S).gz" /config
Чтоб восстановиться из последней резервной копии, нужно выполнить следующую команду:
latest_backup=$(ls -t /backup/homeassistant-*.gz | head -1) && rm -rf /config/* && tar -xzvf "$latest_backup" -C /
Даём права на папку /config
chmod 777 -R /config
Резервное копирование Docker images (аддонов):
Резервное копирование images докера делается такой командой:
docker save $(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v '<none>') | gzip > /backup/docker-images-$(date +%F-%H%M%S).tar.gz
Восстановление images выполняется двумя командами:
Сначала удаляем старые Images:
docker rmi $(docker compose config --images) 2>/dev/null Потом восстанавливаем из бэкапа:
gunzip -c $(ls -t /backup/docker-images-*.tar.gz | head -1) | docker load
Удаление бэкапов, чтоб оставить только две последние версии:
Для удаления бэкапов старше двух последних каждого типа, команда получается такая:
# Для homeassistant бэкапов
ls -t /backup/homeassistant-*.gz | tail -n +3 | xargs -r rm
# Для docker-images бэкапов
ls -t /backup/docker-images-*.tar.gz | tail -n +3 | xargs -r rm
Полная команда, чтоб сразу все очистить, выглядит вот так:
ls -t /backup/homeassistant-*.gz | tail -n +3 | xargs -r rm && ls -t /backup/docker-images-*.tar.gz | tail -n +3 | xargs -r rm
Расписание резервных копий:
Чтоб добавить в расписание все команды, можно добавить все это дело в Crontab:
crontab -e
И добавить туда эти строчки:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#Создание бэкапа паки /config и удаление бэкапа старше двух последних
#0 2 */3 * * tar -zcvf "/backup/homeassistant-$(date +\%F-\%H\%M\%S).gz" /config && ls -t /backup/homeassistant-*.gz | tail -n +3 | xargs -r rm
#Создание бэкапа Docker image и удаление прошлых бэкапов, которые старше двух последних
#0 3 */3 * * docker save $(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v '<none>') | gzip > /backup/docker-images-$(date +\%F-\%H\%M\%S).tar.gz && ls -t /backup/docker-images-*.tar.gz | tail -n +3 | xargs -r rm
Либо же можно упростить все это дело и создать просто скрипт в котором будут все действия и создание бэкапа и восстановление его.
nano backup.sh
Туда добавляем следующее содержание:
#!/bin/bash
BACKUP_DIR="/backup"
TIMESTAMP=$(date +%F-%H%M%S)
# Бэкап homeassistant
tar -zcvf "$BACKUP_DIR/homeassistant-$TIMESTAMP.gz" /config
# Бэкап docker images
docker save $(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v '<none>') | gzip > "$BACKUP_DIR/docker-images-$TIMESTAMP.tar.gz"
# Удаляем старые бэкапы (оставляем 2 последних каждого типа)
ls -t "$BACKUP_DIR"/homeassistant-*.gz | tail -n +3 | xargs -r rm
ls -t "$BACKUP_DIR"/docker-images-*.tar.gz | tail -n +3 | xargs -r rm
echo "Backup completed at $TIMESTAMP"
Этот скрипт будет создавать бэкап папки /config и image Образов docker. И после сохранением этих бэкапов будет удалять пред идущие, которые старше двух последних.
После этого делаем исполняемый файл:
chmod +x /root/backup.sh
И можно его добавить в расписание в crontab:
crontab -e
и добавляем:
0 2 */3 * * /root/backup.sh
Теперь скрипт будет исполняться каждые 3 дня.