udvnl

 
<<< Back

Raspberry Pi: немного о резервном копировании и актуальной копии системы

Небольшая заметка по созданию актуальной копии как MajorDoMo, так и всей ОС с настройками установленными приложениями.
Обновлено 2022-05-13 в связи с изменениями в ядре Debian.
Для корректной работы рекомендую обновлять и загрузочный раздел карты памяти.

Некоторое время назад, я считал, что наиболее лучший способ создания копии SD карты Raspberry является создание образа карты. Но этот способ имеет несколько недостатков: один из которых для создания образа необходим перерыв в работе, к тому же сохранение образа или же восстановление карты памяти может занимать длительное время.
Для себя опробовал несколько измененный вариант резервного копирования.

Подготовительные действия

Нам понадобится ещё одна карта памяти и SD-USB картридер.
Первоначально делаем образ вначале на ПК с помощью программы для работы с образами (я пользуюсь USB Image tool), об его использовании немного написано в одной из заметок Установка базового образа MajorDoMo на Raspberry P... и клонируем на резервную карточку.
Подключаем с помощью картридера в один из USB разъёмов резервную карту памяти.

Проверяем определилась ли карта:

lsblk

ответ системы:

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 29.1G  0 disk
├─sda1        8:1    1 43.2M  0 part /boot
└─sda2        8:2    1 14.4G  0 part
mmcblk0     179:0    0 14.5G  0 disk
├─mmcblk0p1 179:1    0 43.2M  0 part
└─mmcblk0p2 179:2    0 14.4G  0 part /*

Можем посмотреть доп информацию:

lsblk -fp
NAME             FSTYPE LABEL  UUID                                 MOUNTPOINT
https://connect.smartliving.ru/cms/data_images/1453_image.png
├─/dev/sda1      vfat   boot   3725-1C05                            /boot
└─/dev/sda2      ext4   rootfs fd695ef5-f047-44bd-b159-2a78c53af20a
/dev/mmcblk0
├─/dev/mmcblk0p1 vfat   boot   3725-1C05
└─/dev/mmcblk0p2 ext4   rootfs fd695ef5-f047-44bd-b159-2a78c53af20a /

Как видим у нас присутствуют две карты памяти одинаковые по размеры с одинаковыми разделами.
SDA1 - загрузочный раздел резервной карты памяти (установленной в картридер).
SDA2 - корневой раздел со всеми данными.
mmcblk0 основная карта памяти RPI, с которой на данный момент работает система. mmcblk0p1 -загрузочный раздел, mmcblk0p2 корневой раздел.
Создаем папки для монтирования:

 sudo mkdir /mnt/usb
 sudo mkdir /mnt/usb/backup_root/
 sudo mkdir /mnt/usb/backup_boot/

Теперь монтируем карты памяти с помощью команд mount в созданную директорию:

sudo mount /dev/sda1 /mnt/usb/backup_boot/
sudo mount /dev/sda2 /mnt/usb/backup_root/ 

Можем просмотреть что находится на резервной карте памяти

sudo ls -l /mnt/usb/backup_root/

Создаем файл исключений, того, что не стоит резервировать:

nano /home/pi/not_backup

Со Следующим содержимым:

/boot/*
/debootstrap/*
/dev/*
/media/*
/mnt/*
/proc/*
/sys/*
/tmp/*
/run/*
/var/tmp/*
/var/cache/*
/var/log/*
/var/run/*

И запустим команду на синхронизацию данных (при этом измененные и новые файлы копируются на резервную карту памяти, если на ней есть неактуальные директории и файлы, то они удаляются).

sudo rsync -aHv --delete --delete-after --exclude-from=/home/pi/not_backup / /mnt/usb/backup_root/ 
sudo rsync -aHv --delete --delete-after /boot/  /mnt/usb/backup_boot/

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

Включение резервного копирования в MajorDoMo

Перейдём к нашему " Умному дому".
Открываем Панель управления - Сценарии и создадим новый со следующим содержимым (его я включил в раздел Режимы работы)

$filename  = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
exec ("sudo mkdir -p /mnt/usb/backup_boot");
exec ("sudo mkdir -p /mnt/usb/backup_root");
exec ("sudo mount -p /dev/sda1 /mnt/usb/backup_boot/");
exec ("sudo mount -p /dev/sda2 /mnt/usb/backup_root/");  
exec ("sudo rsync -aHv --delete --delete-after --exclude-from=/home/pi/not_backup / /mnt/usb/backup_root/ 2>&1 &");
exec ("sudo rsync -aHv --delete --delete-after /boot/  /mnt/usb/backup_boot/2>&1 &");
say("Сохранение выполнено",2);

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

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

После этого у нас появится в разделе на главной странице сервис новая кнопка, BackUpToFlash

При нажатии на которую будет выполнена синхронизация данных. В качестве иллюстрации на скрине для проверки приведён htop.
Последнее действие - проверка актуальной версии. Выключаем питание, меняем местами карточки в малинке. При загрузке видим пункт резервного копирования в меню. Значит способ заработал ))

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

umount /dev/sda2

Вот и пока всё, немного добавлю:
у меня работает уже несколько недель, при этом разница с копированием boot раздела не заметил, поэтому этот пункт я осознно пропустил, работает и без него.

Изменение от 2022-05-13

В связи с большими обновлениями Debian после выхода заметки, рекомендую обновлять и загрузочный раздел.
При обновлении только корневого раздела, после резервирования данных рабочего на базовый образ (проверено на v 4_44) появляется большое количество проблем (не определяется WiFi, не подключается переферия через usb порты и т.д.)
Второй вариант исправления ситуации - загрузиться с образа и выполнить обновление ОС (sudo apt-get update sudo apt-get upgrade).

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

Discuss (4) (13)

See also:
2023-11-03 Пару мыслей о совместном применении SIP телефонии и систем «Умного Дома», а также немного об организации независимого от Internet канала связи с УД.
2023-10-14 Контроль SystemD и инструмент работы с системными логами через веб браузер
2023-10-10 Установка SIP сервера FreeSWITCH 1.10.10 на Raspberry Pi OS Lite (Debian11)
2023-01-03 Установка MajorDoMo с помощью скрипта от SergeJey на Raspberry Pi
2022-12-09 Где Телефон?
2022-05-30 Вариант установки Majordomo на Windows 10 с использованием пакета XAMPP. Немного о переносе и создании тестовой копии системы с Raspberry PI на Windows
2022-03-09 Небольшие заметки по подключению и использованию сервиса CONNECT
2022-02-27 Zigbee2mqtt, немного о стиках CC2531 и Sonoff USB Zigbee 3.0 Dongle Plus (сравнение, подключение, тестирование).
2021-09-23 Второй раз в первый класс. Часть 1: начало работы c базовым образом для RPi.
2020-12-31 Возможность создания канала управления через телефонные сети для системы домашней автоматизации.
2020-07-06 Чтение файлов из образа img Операционной системы. Возможность записи образа на меньшую по размеру SD карту памяти
2020-05-07 Установка VoIP сервера FreeSWITCH с частичной интеграцией в систему MajorDoMo
2020-04-28 Установка базового образа MajorDoMo на Raspberry Pi. Начало первые шаги.
2019-10-07 Возможность создания видео звонков у MajorDoMo (RPI +WebCam)
2019-09-11 Создание голосового оповещения MajorDoMo
2019-08-21 Установка USB аудиокарты и настройка звука в Raspberry Pi
2019-04-04 Сертификация в Z-Wave
2019-03-11 RPI Monitor полезное ПО для Raspberry PI и Orange Pi
2019-02-04 Тестирование пропускной способности канала Ethernet (Wi-Fi) с помощью утилиты IPerf
2018-12-23 Пошаговая инструкция с картинками по установки MajorDoMo на Raspberry Pi 3 с помощью скрипта от Immortal
2018-10-20 Установка Freeswitch 1.8.2 на Debian 9 (Raspbian Stretch) на базовый образ системы «Умного дома» MajorDomo
2018-08-14 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение первого устройства Z-Wave и первые шаги по автоматизации
2018-07-08 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение контроллера RaZberry и первые шаги по Z-Wave
2018-06-29 Пошаговая инструкция по установке образа Majordomo на Raspberry Pi
2018-06-21 Удаленное наблюдение за близкими, но к сожалению, больными людьми.

Минск, Беларусь

На форуме: udvnl