udvnl

 
<<< Назад

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, так и самой ОС, сторонних сервисов и программ .

Обсуждение (4) (13)

Смотрите так же:
21.06.2024 Послеустановочные заметки
21.05.2024 RHVoice установка, проверка и прочее
03.11.2023 Пару мыслей о совместном применении SIP телефонии и систем «Умного Дома», а также немного об организации независимого от Internet канала связи с УД.
14.10.2023 Контроль SystemD и инструмент работы с системными логами через веб браузер
10.10.2023 Установка SIP сервера FreeSWITCH 1.10.10 на Raspberry Pi OS Lite (Debian11)
03.01.2023 Установка MajorDoMo с помощью скрипта от SergeJey на Raspberry Pi
09.12.2022 Где Телефон?
30.05.2022 Вариант установки Majordomo на Windows 10 с использованием пакета XAMPP. Немного о переносе и создании тестовой копии системы с Raspberry PI на Windows
09.03.2022 Небольшие заметки по подключению и использованию сервиса CONNECT
27.02.2022 Zigbee2mqtt, немного о стиках CC2531 и Sonoff USB Zigbee 3.0 Dongle Plus (сравнение, подключение, тестирование).
23.09.2021 Второй раз в первый класс. Часть 1: начало работы c базовым образом для RPi.
31.12.2020 Возможность создания канала управления через телефонные сети для системы домашней автоматизации.
06.07.2020 Чтение файлов из образа img Операционной системы. Возможность записи образа на меньшую по размеру SD карту памяти
07.05.2020 Установка VoIP сервера FreeSWITCH с частичной интеграцией в систему MajorDoMo
28.04.2020 Установка базового образа MajorDoMo на Raspberry Pi. Начало первые шаги.
07.10.2019 Возможность создания видео звонков у MajorDoMo (RPI +WebCam)
11.09.2019 Создание голосового оповещения MajorDoMo
21.08.2019 Установка USB аудиокарты и настройка звука в Raspberry Pi
04.04.2019 Сертификация в Z-Wave
11.03.2019 RPI Monitor полезное ПО для Raspberry PI и Orange Pi
04.02.2019 Тестирование пропускной способности канала Ethernet (Wi-Fi) с помощью утилиты IPerf
23.12.2018 Пошаговая инструкция с картинками по установки MajorDoMo на Raspberry Pi 3 с помощью скрипта от Immortal
20.10.2018 Установка Freeswitch 1.8.2 на Debian 9 (Raspbian Stretch) на базовый образ системы «Умного дома» MajorDomo
14.08.2018 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение первого устройства Z-Wave и первые шаги по автоматизации
08.07.2018 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение контроллера RaZberry и первые шаги по Z-Wave
29.06.2018 Пошаговая инструкция по установке образа Majordomo на Raspberry Pi
21.06.2018 Удаленное наблюдение за близкими, но к сожалению, больными людьми.

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

На форуме: udvnl