Статья

Простой скрипт сохранения резервной копии на флешку или удалённый сервер для HomeAssistant

В данной статье речь пойдёт о создании бэкапа и копировании его на флешку или на удалённый сервер при помощи утилиты rsync. Мне данный способ показался наиболее простым и, конечно же, рабочим.

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

Создание резервной копии и перемещение на флешку

В первую очередь, подключаем наше устройство к компьютеру через USB или через другой доступный интерфейс. Далее, при помощи fdisk с ключом -l, получаем список подключённых накопителей.

pi@hatest:~ $ sudo fdisk -l.... Device Boot Start End Sectors Size Id Type /dev/sda1 2048 4143103 4141056 2G b W95 FAT32 pi@hatest:~ $

Как видно из листинга, у нас подключено устройство объёмом 2Gb и отформатированное в Fat32, нам же нужен адрес раздела, в данном случае - это /dev/sda1, у вас буквы могут отличаться.

Далее, при помощи команды blkid, получаем уникальный идентификатор устройства (UUID), это нужно для того, чтобы в случае смены буквы диска, система его монтировала и копии создавались там, где это необходимо, а не на диске с вашими любимыми фото котят.

pi@hatest:~ $ sudo blkid /dev/sda1 /dev/sda1: UUID="972B-3F23" TYPE="vfat" PARTUUID="101ce48c-01"

Куда-нибудь записываем UUID, его нужно будет указать в fstab, речь об этом пойдёт чуть ниже.

Далее, при помощи команды mkdir, необходимо создать каталог, к которому будет монтироваться наше устройство. В случае, если Home Assistant установлен в Docker, необходимо, чтобы этот каталог был доступен из контейнера. Следовательно, создаём по адресу /usr/share/hassio/backup/

pi@hatest:~ $ sudo mkdir /usr/share/hassio/backup/remote

Далее необходимо внести изменения в fstab:

pi@hatest:~ $ sudo nano /etc/fstab

Добавляем в конце файла следующую строчку и последовательно нажимаем Ctrl O (записать), Ctrl X (выход).

#Опции монтирования накопителя UUID=972B-3F23 /usr/share/hassio/backup/remote vfat defaults,rw 0 0

Где:

UUID=972B-3F23 - идентификатор устройства, у вас он, естественно, будет другим. /usr/share/hassio/backup/remote - точка монтирования.vfat - тип файловой системы (для устройств, отформатированных в FAT, для NTFS будет ntfs-3g).defaults - использовать настройки по умолчанию, rw - разрешить чтение и запись, по идее, она не нужна, но мне так спокойней.0 - сообщаем о том, что данный раздел не должен быть включён в дамп.0 - сообщаем о том, что нет необходимости выполнять проверку раздела, также можно поставить значение равное 2.

Монтируем при помощи команды mount и опции -a, и на этом всё с хостом.

pi@hatest:~ $ sudo mount -a

Далее в Home Assistant нам понадобится дополнение SSH & Web Terminal от сообщества, так как оно имеет больше возможностей, в отличие от официального. Параметры его настройки есть в документации или в моём видео в начале статьи.

После установки, создаём файл backup.sh, расположенный по следующему пути: /config/scripts/, т.е. в итоге должно получиться:

/config/scripts/backup.sh

Вносим в него скрипт:

#!/bin/bash date=`date " %F"` echo $date STORE_DAYS=3 SRC=/backup/ DST=/backup/remote/ rsync -a \ --delete \ --remove-source-files \ --exclude 'remote' \ $SRC $DST/Processing-$date \ && cd $DST \ && mv Processing-$date $date \ && find. -type d -mtime $STORE_DAYS -exec rm -rf {} \; \ > /dev/null

Где:

#!/bin/bash - указываем используемый интерпретатор.date=`date " %F"` - создаём переменную вида 2020-09-20, вариант с часами и минутами date=`date " %Y-%m-%d-%H%M%S"`.STORE_DAYS=3 - сколько дней будем хранить резервные копии, можно изменить на свой вкус.SRC=/backup/ - директория, откуда выполняем копирование.DST=/backup/remote/ - директория, куда выполняем копирование.rsync -a \ - выполняем rsync для всех файлов.--delete \ - удаляем посторонние файлы в директории назначения.--remove-source-files \ - после копирования удаляем файлы в директории источнике, можете убрать. --exclude 'remote' \ - директории, которые исключаем, дабы не было рекурсии и мы не создавали копии сохранённых копий. $SRC $DST/Processing-$date \ - выполняем синхронизацию во временную директорию.&& cd $DST \ - переходим в директорию назначения.&& mv Processing-$date $date \ - переносим из временной директории в постоянную, также можно прочитать как переименование. && find. -type d -mtime $STORE_DAYS -exec rm -rf {} \; \ - командой find в директории назначения находим все каталоги старше заданного количества дней и удаляем.> /dev/null - перенаправляем вывод команд.

Вариант скрипта для копирования на удалённый сервер (Time Machine)

Также необходимо установленное дополнение SSH & Web Terminal, но сам скрипт несколько отличается, листинг и некоторые комментарии к нему будут приведены ниже, так как предполагается, что читатель, использующий данный метод, уже знаком с bash.

NB: Используется авторизация по ключу

Листинг скрипта

#!/bin/bash date=`date " %Y-%m-%d-%H%M%S"` STORE_DAYS=3 SRC=/backup/ DST=/backups/ha rsync -a \ --delete \ --fake-super \ --remove-source-files \ --link-dest=../Latest \ $SRC backup@your_ip:$DST/Processing-$date \ && ssh -T backup@your_ip \ "cd $DST \ && mv Processing-$date $date \ && rm -f Latest \ && ln -s $date Latest \ && find. -type d -mtime $STORE_DAYS -exec rm -rf {} \;"

В данном скрипте, после синхронизации с удалённым сервером, создаётся жёсткая ссылка Latest на последнюю резервную копию, таким образом, можно очень оперативно получить доступ к последней копии. Необходимо, чтобы удалённая файловая система поддерживала такие ссылки.

Пример автоматизации

Ниже приведён пример автоматизации созданной в GUI. Стоит обратить внимание на установленную задержку, это сделано для того, чтобы синхронизация не началась до того, как будет создан снапшот, так как создание занимает некоторое время.

- id: '1600711902170' alias: Резервная копия на флешку description: '' trigger: - platform: time at: 02:00:00 condition: [] action: - service: hassio.snapshot_full data_template: name: hassio_{} - delay: 00:01:00 - service: hassio.addon_stdin data: addon: a0d7b954_ssh input: bash /config/scripts/backup.sh mode: single

Доработка скрипта резервного копирования, от 14.10.20


Также есть https://github.com/sabeechen/hassio-google-drive-backup">дополнение к Hass.io для выгрузки запароленных резервных копий снапшотов на Google Drive.

Да, я знаю.

Но в этом случае, если немного фантазии применить, можно и на GoogleDrive и на Яндекс Диск и на Облако Мэйл и в Nextcloud скидывать и в Дропбокс и куда угодно, достаточно смонтировать по WebDav, единственное, нужно будет сделать мониторинг, что ничего не отвалилось. А также если есть утилита консольная, то использовать её. Я не стал это затрагивать.

И какой смысл регулярно бэкапить если нет изменений в системе ? А если наковырял - тискаем на родную кнопку снапшота, и абсолютно любым стандартным синхронизатором по самбе забираете и кладете куда угодно. Просто, быстро и понятно.

А то что выше вы называете самым простым... Ну-ну... ))

И выстрелит это в самый неподходящий момент, когда пару раз забыл сделать рукаим бэкап :)

Я не сказал, что это самый простой )
А если завтра выгорает что-то на железке, выходит из строя диск и прочее? Что тогда? Какую кнопку нажимать?

Старый баян: Администраторы делятся на две категории, на тех кто ещё не делает бэкапы и всех остальных.

"Мне данный способ показался наиболее простым".
Или текст не вы писали ? ))

Мне показался самым простым != самый простой.


Я не знаю какой самый простой, он для каждого свой, наверное. 

Да чего вы накинулись на парня то? Годная статья. У некоторых кроме ха на малине/минипк ещё другие вещи стоят. Их тоже как бы надо бэкапить. И вот такой вариант как раз для этого.

Замечание: Вы используете ln -s, так что ссылка мягкая. Ну и можно без аддонов просто в crontab добавить с каким-то зазором, чтобы бекап снялся, но это дело вкуса, конечно.

Спасибо за замечание! Глаз замылился :)
Если кто-то дочитает до сюда, то жесткая ссылка создаётся через ln без ключей.

Хотелось показать как сделать средствами HA, а так, конечно можно или через крон, или (мой выбор в последнее время) через таймеры системд. 


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