Ежедневный автоматический бэкап системы raspbian микрокомпьютера Raspberry Pi

06 ноября 2018, 09:44

Одноплатный компьютер Raspberry Pi (в народе Малина) является центром умного дома у многих энтузиастов этого дела. Софт, используемый на малине, становится все сложнее. Для статистики собираются необходимые данные с различных датчиков и сенсоров, данные постоянно сохраняются на Micro SD карту, что, в следствии ограниченного число циклов перезаписи, рано или поздно приводит к выходу из строя карты памяти, и как следствие, краху всей системы. Ниже я расскажу как максимально обезопасить себя от этой неприятности. 

Сразу хочу сказать, что ввиду разнообразия софта, установленного на малине, этот метод не является универсальным и гарантированным. В зависимости от конфигурации системы, в процессе бэкапа можно останавливать и потом вновь запускать различные службы, делать бэкап баз данных средствами SQL баз данных средствами SQLite, главное, чтобы этот установленный софт поддерживал управление через shell, (ssh, командная строка, терминал, putty). 

Но обо все по порядку. Помимо работающей малины с установленной системой и доступом к ней по ssh, нам потребуется USB-MicroSD картридер и вторая Micro-SD карта, на которую впоследствии и будет делаться бэкап. Следующие действия необходимо выполнять строго в указанном порядке. Клонированный образ системной флешки в качестве резервной не подойдет, ввиду того, что исходный и резервный носители в результате клонирования имеют одинаковый идентификатор uuid, а система raspbian использует этот uuid для монтирования. Возможно, если данный метод нам не подойдет, в следующей части мы залезем в системные файлы raspbian и научим его монтировать клонированные флешки, а пока попробуем обойтись без особого вмешательства в операционную систему.

1. Подготовка резервного носителя

  • На резервную флешку заливаем чистый образ raspbian, скачанный с Официального сайта с помощью утилиты Etcher
  • Вставляем эту флешку в малину и загружаемся с нее (подключаться по ssh в этот момент не надо, да и не получится).
  • Ждем для верности 5 минут, выключаем питание малины, вставляем рабочую флешку в разъем micro SD, а подготовленную - через картридер в USB порт малины, и вновь подключаем к малине питание.

2. Настраиваем Бэкап

  • Заходим на малину по ssh и запускаем следующую команду:

lsblk

Смотрим имя устройства подключенной флешки, (у меня это /dev/sda)

Имена разделов: /boot раздел - /dev/sda1, - с этого раздела загружается малина, и /root раздел - /dev/sda2 - Основной раздел raspbian, на нем находятся системные файлы и все установленные приложения

  • Создаем файл исключений, того, что не нужно бэкапить:
sudo nano  /backup_excludes

Ниже пример файла /backup_excludes

/media/*
/etc/fstab

#Homeassistant
/home/homeassistant/.homeassistant/home_assistant_v2.db

#iObrocker
/opt/iobrocker/iobrocker-data/sqlite/sqlite.db

/proc/*
/sys/*
/dev/*
/boot/*
/tmp/*
/run/*
/mnt/*
В инструкции приведены примеры бекапа системы с установленным софтом Home-Assistant, iOBrocker. Для других приложений, использующих для хранения базы данных SQLite3, необходимо прописать аналогичные пути к базе данных в файле /backup_excludes и /backup.sh.
  • Создаем файл скрипта обновления /backup.sh :

sudo nano /backup.sh

Содержимое файла:

#!/bin/sh

# если возникнет ошибка, прервать выполнение
set -e

homeassistant_db="/home/homeassistant/.homeassistant/home-assistant_v2.db"
zll_db="/home/pi/.local/share/dresden-elektronik/deCONZ/zll.db"
sqlite_db="/opt/iobrocker/iobrocker-data/sqlite/sqlite.db"

# отмонтируем разделы подключенной флешки отовсюду, игнорируем ошибки (если
# флешка уже отмонтирована)
umount /dev/sda1 2> /dev/null || /bin/true;
umount /dev/sda2 2> /dev/null || /bin/true;

# создадим точки монтирования, если их еще нет
mkdir -p /mnt/backup_boot
mkdir -p /mnt/backup_root

# подмонтируем boot и корневые разделы флешки в соответствующие каталоги
mount /dev/sda1 /mnt/backup_boot;
mount /dev/sda2 /mnt/backup_root;

# выполним синхронизацию корневых разделов
rsync -aHv --delete --delete-after --exclude-from=/backup_excludes / /mnt/backup_root/;

# выполним бэкап базы Homeassistant
if [ -f "$homeassistant_db" ]
then
  sqlite3 $homeassistant_db ".backup /mnt/backup_root$homeassistant_db";
fi

# выполним бэкап базы iObrocker
if [ -f "$sqlite_db" ]
then
  sqlite3 $sqlite_db ".backup /mnt/backup_root$sqlite_db";
fi

# выполним синхронизацию boot раздела, исключив cmdline.txt файл
rsync -rltD --delete --exclude 'cmdline.txt' /boot/ /mnt/backup_boot/;

Делаем файл исполняемым:

sudo chmod +x /backup.sh

Вручную запустить работу скрипта можно командой:

sudo /backup.sh

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

После завершения копирования можно попробовать поменять флешки местами, малина должна загрузиться без проблем.

Добавляем наш скрипт в расписание малины (Редактируем крон):

sudo crontab -e

Добавляем строчку:

0 5 * * * root /backup.sh

После отработки скрипта на резервной флешке у вас будет полностью рабочая система с актуальными базами данных Home-assistant, iOBrocker. Так же копия изменений будет делаться ежедневно 5 утра.

Скрипт бэкапа еще тестируется и дорабатывается, обо всех проблемах, вопросах, пожеланиях просьба писать в комментариях.


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

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

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Виталий Никольский (bigmanekb)

    печально что с докером все по другому.... и с хассио я так полагаю тоже.... а хотелось бы ага...

  2. Максим Манцев (Maxwell)
    Максим Манцев (Maxwell) отредактировано 9 месяцев назад
    Комментарий был удален
  3. (stalkerj)
    (stalkerj) 9 месяцев назад

    еще бы добавить инфо как настроить выгрузку бэкапа на NAS

  4. Евгений Аверин (doc76)
    Евгений Аверин (doc76) 9 месяцев назад

    а как бекапить еще БД? может кто то дополнить?

    ставлю +

  5. (basil888)
    (basil888) 8 месяцев назад

     Etcher при записи образа на флешку пытается внести мусор в реестр

    посоветуйте другую программу

  6. Gülahmet Müslim (axyskus)
    Gülahmet Müslim (axyskus) 5 месяцев назад

    можешь подсказать что и куда нужно дописать чтоб ХБ тоже бэкапился, а то вроде всё получается, а ХБ даже на основной флэшке ломается во время процесса бэкапа и соответственно после окончания процесса бэкапа ХБ уже не поднимается никак. 

  7. (Spirit)
    (Spirit) 4 месяца назад

    Сработает ли данный метод, если обе флешки воткнуты в USB (загрузочный SSD, резервная SD через кардридер) Raspberry 3b+? 

К списку статей

Похожие статьи

15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
14 ноября 2018, 06:43
Плагин для интеграции в Athom Homey дочерних zigbee-устройств, подключенных на координаторы deCONZ - RaspBee или ConBee.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
25 ноября 2018, 18:23
Умное зеркало добавляем модули Airplay и Google Calendar
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
30 июня 2018, 12:17
Добавляем устройства управляемые по ИК через Broadlink RM3 Mini на примере кондиционера.
25 сентября 2018, 07:06
Делаем умный замок с интеграцией в HomeKit