Резервное копирование данных через автоматизации Home Assistant

13 июня 2019, 12:42

Пришел к выводу, что некоторые рутиные процессы, в частности резервное копирование данных моего домашнего сервера, удобно запускать из Home Assistant. Удобство в том, что можно настроить какие то дополнительные действия, ну в моем случае, я отправляю отчет о резервном копирование в бот телеграмма.

Пара суждений про бэкап. 

У меня используется для хранения данных HP Microserver Gen7 c Убунту на борту. В сервере установлено 4 диска по 4 Тб. Диски объединены в RAID5. Для многих такое решение достаточно в плане надежности хранения данных, так как RAID5 защищает от выхода из строя одного диска. Вероятность выхода из строя сразу нескольких статистически маловероятна. Но несколько лет назад я столкнулся с неприятной ситуацией. Тестировал какую-то сборку, тогда еще, XBMC и запустил ее на индексацию всех аудио-видео-фото на сервере. Так он, ...ука, вместо индексации стер мне все мои фото с сервера. Точнее процесс начал с фото и я заметил, этот эпик фэйл тогда, когда "индексация" фоток подходила к концу. На тот момент бэкапирование я делал очень не регулярно и в результате недосчитался фотографий почти за полгода. На следующий день я купил внешний жесткий диск и теперь провожу ежедневное резервное копирование (если есть изменения). Резервирую не все конечно, а самое главное, а именно свои фото-видео, конфиги-настройки и т.п. Пока на внешнем диске есть место, туда  заливается музыка, но по факту, самое опасное и обидное потерять свои материалы, свои фото и видео, так как их не скачать с торрентов, а музыку, кино, книги можно скачать еще раз, конечно жалко время, но данные не пропадут окончательно. После потери своих фоток, кроме бэкапирования, я закрыл на запись все папки сетевые ресурсы на сервере, оставил только временную папку, и только через нее можно что-то записать на хранилище, удалить только через консоль сервака. 

Короче, закончили лирику. Задача проводить инкрементальное резервное копирование, бесплатно, иметь возможность вытащить данные из архивной копии без необходимости подключения каких либо контейнеров и прочей дичи. Выбрал программу rdiff-backup http://rdiff-backup.nongnu.org/. Умеет все что я хотел, как локально, так и на удаленный хост. Программа давно не развивается, но развивать походу нечего, работает без сбоев и ошибок. Идея программы в том, чтобы объединить лучшие функции зеркала и инкрементную резервную копию. rdiff-backup также сохраняет подкаталоги, жесткие ссылки, файлы dev, разрешения, владение uid/gid, время модификации, расширенные атрибуты, acls.

sudo apt update
sudo apt install rdiff-backup

Программа работает из командной строки, все параметры просты и по необходимости подбираются из мануала. Последовательность действий у меня:

1. С помощью автоматизации HA в 3 ночи запускается bash скрипт, монтируется внешний HDD, производится резервное копирование, сохраняется отчет, через REST API компоненту input_boolean присваивается значение TRUE.

2. При значении TRUE у input_boolean запускается автоматизация, которая в телегу отправляет отчет о копировании.

backup.sh

#!/bin/sh

sudo /bin/mount /dev/sdf1 /mnt/backup

sudo /usr/bin/rdiff-backup --force --exclude /mnt/raid/NEW --exclude /mnt/raid/SOFT --exclude /mnt/raid/TORRENTS --exclude /mnt/raid/VIDEO --print-statistics /mnt/raid /mnt/backup > /tmp/backup_stats.txt

sudo /bin/umount /mnt/backup

/usr/bin/curl -X POST -H "Authorization: Bearer ******************" -H "Content-Type: application/json"  -d '{"state": "on"}' https://ha.********.ru/api/states/input_boolean.backup_complete

exit 0
shell_commands.yaml

  backup_raid: "/home/acidquest/backup.sh"

input_booleans.yaml

backup_complete:
  initial: off
  
automations.yaml

- alias: 'Backup Data at 03.00'
  initial_state: true
  trigger:
    - platform: time
      at: '03:00:00'
  action:
    - service: shell_command.backup_raid

- alias: 'Backup Complete'
  initial_state: true
  trigger:
    platform: state
    entity_id: input_boolean.backup_complete
    to: 'on'
  action:
    - service: notify.telegram_oleg
      data:
        message: "Результат резервного копирования"
        data:
          document:
            file: /tmp/backup_stats.txt
    - service: input_boolean.turn_off
      entity_id: input_boolean.backup_complete

Команды mount, umount и сам rdiff-backup работают от рута, а HA от пользователя acidquest, поэтому наводим косметику с правами:

/etc/sudoers

# Allow members of group sudo to execute any command
%sudo<->ALL=(ALL:ALL) ALL
acidquest<----->ALL = NOPASSWD:>/bin/mount
acidquest<----->ALL = NOPASSWD: /bin/umount
acidquest<----->ALL = NOPASSWD: /usr/bin/rdiff-backup

/etc/group

sudo:x:27:acidquest
Конечно можно было запускать задачу через cron и отсылать файл с отчетом по почте. Все так и работало до Home Assistant, но я хочу чтобы было именно так. Понимаю, что HA дополнительная прослойка, узкое место и т.п. 

Вообще думаю про железное резервирования сервера, так как если Home Assistant упадет, то я даже свет не включу в гостиной (пока), а через некоторое время нигде в квартире. Вот это будет еще один эпик фэйл. Пока жена и дети терпят мои эксперименты, даже начали командовать Алисе включить телек и выключить свет. Ха, но если все сломается, то будет кому то нехорошо, и скорее всего этот кто-то буду я. 


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

  1. (Brain)
    (Brain) 6 дней назад

    Цитата : " так как если Home Assistant упадет, то я даже свет не включу в гостиной (пока), а через некоторое время нигде в квартире. "

    Если жаба не душит, можно вторую малину поставить. У меня одна работает, вторая (точная копия) с выключенной автоматизацией следит за первой и анализирует аптайм. Как только что-то происходит с первой, к примеру апдейт, перезагрузка и иже с ними, вторая враз включает всю автоматизацию. После прихода на трон первой малины, вторая видя по аптайму , что все хорошо, обижается и выключает автоматизации, матеря по чем зря превосходство первой малины и возмущаясь мирской несправедливостью.

  2. Ружинский Олег (acidquest)

    Да, обязательно организую резервный сервер. У меня есть NAS Synology, стоит без дела пока, скорее всего на нем подниму копию Home Assistant. В идеале, конечно, еще один полноценный сервак, не очень мне нравятся эти NASы, вещь в себе все-таки, со своей типа операционкой. Зеркалировать диски по DRBD, а сервер через систему Hearbeat слушать, получится полноценный кластер, но можно и малину второй поставить

  3. Андрей Паневин (gfyz)
    Андрей Паневин (gfyz) 5 дней назад

    Вопрос резервного копирования очень актуален.

    я когда игрался с малиной так и не нашёл решения делать человеческий образ всей флешки.

    что бы если она сдохнет или что то накосячишь с настройками не разбираться где и что а просто накатить образ обратно и всё.

    по аналогии с акронисом на windows.

    папки и файлы да, но образ всё таки удобнее будет, ИМХО КОНЕЧНО

    • Ружинский Олег (acidquest)

      Для копирования образа флэшки вот продукт: https://clonezilla.org/. Опенсорсный аналог акроникса в части клонирования и копирования разделов. Пишешь образ на флэху, грузишься с него и снимаешь образ корневой флэшки в файл или на другую флэшку.

К списку блогов

Похожие записи

13 февраля 2019, 22:00
Подключение радио на Xiaomi Gateway к Home Assistant c дальнейшим использованием в автоматизациях
19 апреля 2019, 20:53
Требуется ваше мнение!
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
21 марта 2019, 11:59
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
04 апреля 2019, 12:45
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
07 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.87 от 06.02.19.
19 января 2019, 20:49
Делюсь новостями по проекту.
13 марта 2019, 21:12
Самое важное из апдейта Home Assistant 0.89 от 06.03.19.
20 мая 2019, 20:54
Добавляем Телевизор в Homekit c помощью новых возможностей Home Assistant версии 0.93 и кастом компонента SmartIR MediaPlayer.