Создание и сохранение резервных копий (Backup) описано в документации. Популярные решения представлены в следующем списке:
- Резервное копирование в Google Диск
- Синхронизация с Dropbox
- Резервное копирование Nextcloud
- Резервное копирование с Samba
- Удаленное резервное копирование (scp/rsync/rclone)
В связи с текущей ситуацией, рассмотрим сохранение копий на Yandex.Disk.
Для Backup создадим автоматизацию. Переходим Настройки->Автоматизации и сцены и нажимаем Создать автоматизацию.
Выбираем Начать с нуля.
Добавляем название - Full-Backup и описание Ежедневное полное сохранение. Режим - Одиночный.
Создаем Триггеры - Время, Режим - Фиксированное время - 3:00:00.
Условия пропускаем.
В Действиях выбираем - Вызвать службу. Служба - Home Assistant Supervisor: Create a full backup. Имя - daily_full_backup. Password - обязательно добавить. Compressed - сжатие тоже обязательно.
В формате yaml это выглядит так:
alias: Full-Backup
description: Ежедневное полное сохранение
trigger:
- platform: time
at: '03:00:00'
condition: []
action:
- service: hassio.backup_full
data:
name: daily_full_backup
password: password
mode: single
Для проверки запустим автоматизацию.
Переходим Настройки->Система->Резервные копии. Видим созданную резервную копию.
Теперь осталось только сохранить эту копию в Yandex.Disk. По статье - Бэкап на Yandex Disk настраиваем Yandex.Disk и скрипты.
Создаем папку scripts:
mkdir scripts
Создаем в ней скрипты:
- backup-ha-day.sh - для ежедневного бэкапа
- backup-ha-week.sh - еженедельного бэкапа
- backup-ha-month.sh - ежемесячного бэкапа
На Yandex.Disk создаем следующую структуру каталогов:
- Yandex.Disk/backups/ha/day - храним 7 архивов за последние 7 дней
- Yandex.Disk/backups/ha/week - хранятся 4 бэкапа за последние 4 недели
- Yandex.Disk/backups/ha/month - храним все резервные копии Home Assistant за все время
При установке Home Assistant в контейнер Docker, по этой инструкции, директория в которую сохраняются backup файлы на хостовой системе находится - /usr/share/hassio/backup/ Имена файлов backup в Home Assistant выглядят примерно так:
0d58ab97.tar 6bcf0ea5.tar b6e7a1dc.tar cc78178b.tar ed4e3499.tar
Поэтому скрипты немного подправим. Для начала нужно определить самый последний созданный файл. Для этого воспользуемся такой командой:
ls -t | head -n1
backup-ha-day.sh:
#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/home/drhellp/Yandex.Disk/backups/ha/day'
# Директория для архива
inf_dir='/usr/share/hassio/backup'
# Имя самого последнего созданного файла
file_to_bk=$(ls -t $inf_dir | head -n1)
# Копируем файл на Yandex.Disk
/usr/bin/cp $inf_dir/$file_to_bk $bk_dir/ha_$date_time.tar
# Удаляем архивы старше 7-ми дней
/usr/bin/find $bk_dir -type f -mtime +7 -exec rm {} \;
backup-ha-week.sh:
#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/home/drhellp/Yandex.Disk/backups/ha/week'
# Директория для архива
inf_dir='/usr/share/hassio/backup'
# Имя самого последнего созданного файла
file_to_bk=$(ls -t $inf_dir | head -n1)
# Копируем файл на Yandex.Disk
/usr/bin/cp $inf_dir/$file_to_bk $bk_dir/ha_$date_time.tar
# Удаляем архивы старше 30-ти дней
/usr/bin/find $bk_dir -type f -mtime +30 -exec rm {} \;
backup-ha-month.sh:
#!/bin/bash
# Задаем переменные
# Текущая дата в формате 2020-12-01_04-10
date_time=`date +"%Y-%m-%d_%H-%M"`
# Куда размещаем backup
bk_dir='/home/drhellp/Yandex.Disk/backups/ha/month'
# Директория для архива
inf_dir='/usr/share/hassio/backup'
# Имя самого последнего созданного файла
file_to_bk=$(ls -t $inf_dir | head -n1)
# Копируем файл на Yandex.Disk
/usr/bin/cp $inf_dir/$file_to_bk $bk_dir/ha_$date_time.tar
Добавляем запуск этих файлов в cron:
sudo nano /etc/crontab
# home assistant backup to yandex.disk
# ежедневно в 3:30
30 3 * * * root /home/drhellp/scripts/backup-ha-day.sh >/dev/null 2>&1
# еженедельно в 4:30 в воскресенье
30 4 * * 0 root /home/drhellp/scripts/backup-ha-week.sh >/dev/null 2>&1
# ежемесячно в 5:30 1-го числа месяца
30 5 1 * * root /home/drhellp/scripts/backup-ha-month.sh >/dev/null 2>&1
Удаляемые файлы попадают в корзину из которой их можно удалить только через вэб-интерфейс Yandex.Disk или создать приложение по инструкции.