Блог

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

Пришел к выводу, что некоторые рутиные процессы, в частности резервное копирование данных моего домашнего сервера, удобно запускать из 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 упадет, то я даже свет не включу в гостиной (пока), а через некоторое время нигде в квартире. Вот это будет еще один эпик фэйл. Пока жена и дети терпят мои эксперименты, даже начали командовать Алисе включить телек и выключить свет. Ха, но если все сломается, то будет кому то нехорошо, и скорее всего этот кто-то буду я. 


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

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

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

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

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

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

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

В системах электроснабжения любая автоматизация (!) выполняется так, чтобы ее выход из строя не влиял на работу системы в целом.


Это аксиома у нас.


В квартире я ВСЕГДА ставлю, например, реле включения света параллельно существующему выключателю.


При выходе/замене/сбое у меня все включается (это к вопросу о резервировании и backup'ах).


Конечно, так можно не везде, но в большинстве случаев удается.


Вернуться назад
Вернуться назад