Одноплатный компьютер 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 утра.
Скрипт бэкапа еще тестируется и дорабатывается, обо всех проблемах, вопросах, пожеланиях просьба писать в комментариях.
печально что с докером все по другому.... и с хассио я так полагаю тоже.... а хотелось бы ага...
Очень полезная статья! Но для "чайников" некоторые моменты пропущены и не описаны. К примеру: "Обязательно загружаемся один раз с этой флешки". Как?
еще бы добавить инфо как настроить выгрузку бэкапа на NAS
а как бекапить еще БД? может кто то дополнить?
ставлю +
https://www.balena.io/etcher/">Etcher при записи образа на флешку пытается внести мусор в реестр
посоветуйте другую программу
https://www.tweaking4all.com/hardware/raspberry-pi/macosx-apple-pi-baker/">https://www.tweaking4all.com/h...
Использую эту утилиту, пока нет нареканий
можешь подсказать что и куда нужно дописать чтоб ХБ тоже бэкапился, а то вроде всё получается, а ХБ даже на основной флэшке ломается во время процесса бэкапа и соответственно после окончания процесса бэкапа ХБ уже не поднимается никак.
Сработает ли данный метод, если обе флешки воткнуты в USB (загрузочный SSD, резервная SD через кардридер) Raspberry 3b+?