From 17b1a70b759a11931296d3e4c37f35bb5509a0c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BE=D0=BB=D0=B3=D0=B8=D0=B9=20=D0=90=D1=80=D1=82?= =?UTF-8?q?=D1=91=D0=BC?= Date: Fri, 17 Nov 2023 16:09:38 +0300 Subject: [PATCH] ad opi --- orangepi5plus_backup.md | 147 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 orangepi5plus_backup.md diff --git a/orangepi5plus_backup.md b/orangepi5plus_backup.md new file mode 100644 index 0000000..6be5911 --- /dev/null +++ b/orangepi5plus_backup.md @@ -0,0 +1,147 @@ +# Описание процесса создания резервной копии eMMC OrangePi 5 Plus + +В OrangePi 5 Plus нельзя изменить приоритет загрузки, в первую очередь загрузка происходит с SD карты, если загрузчик на SD карте не находится, производится попытка загрузки с eMMC и т.д. Таким образом, для того, чтобы создать образ диска eMMC достаточно загрузиться с SD карты и средствами команды `dd` выполнить создание образа диска eMMC. + +1. Обеспечить подключение к хранилищу резервных копий по SSH на основе ключа пользователю root, т.к. скрипт будет выполняться от его имени + +```bash +root@host-usb:~ $ ssh-keygen +root@host-usb:~ $ ssh-copy-id da2001@nas.dav.lan +``` + +5. Создать конфигурационный файл EEPROM, который вернёт загрузку на SD + +```bash +pi@host-usb:~ $ sudo mkdir /opt/backup_rpi && sudo vim /opt/backup_rpi/sd_eeprom.conf +``` + +```bash +pi@host-usb:~ $ cat /opt/backup_rpi/sd_eeprom.conf +[all] +BOOT_UART=0 +WAKE_ON_GPIO=1 +POWER_OFF_ON_HALT=0 +BOOT_ORDER=0xf1 +``` + +6. Подготовить основной скрипт, который выполнит создание образа SD-карты и передаст его по SSH в сетевое хранилище + +```bash +pi@host-usb:~ $ sudo vim /opt/backup_rpi/rpi_backup.sh +``` + +```bash +#!/bin/bash + +################################################################################################### + +# Скрипт создаёт образ SD-карты Raspberry PI и отправляет его на удалённый сервер по SSH, +# при этом на удалённом сервере происходит сжатие образа для экономии места. +# Сжатие происходит на удалённом сервере, чтобы минимизировать операции записи на Flash память, +# с которой произведена загрузка RPI. +# После создания образа, происходит обновление конфигурации EEPROM Raspberry PI для загрузки с SD карты. +# В директории с этим скриптом должен находится конфигурационный файл EEPROM - $eeprom_conf + +# Для корректной работы скрипта, EEPROM RPI должен поддерживать режим переключения загрузки SD<=>USB. + +################################################################################################### + +# Убедиться, что запуск происходит от root +if [ "$EUID" -ne 0 ] + then echo "Скрипт необходимо запускать от администратора" + exit +fi + +# Удалённый сервер. Необходимо предварительно обеспечить доступ по ключам - ssh-keygen && ssh-sopy-id user@server +server=da2001@nas.dav.lan + +# Путь сохранения на удалённом сервре +remote_path=/mnt/main/data/Backup/bastion_rpi + +# Директория, в которой хранится конфигурационный файл EEPROM +eeprom_conf_path=/opt/backup_rpi + +# Необходимо убедиться, что в папке присутствует конфиг EEPROM для изменения порядка загрузки +eeprom_conf="sd_eeprom.conf" + +if [ ! -e "$eeprom_conf_path/$eeprom_conf" ]; then + ssh $server "echo Файл настроек EEPROM $eeprom_conf не найден" > $remote_path/lastlog 2>&1 + exit +fi + +# Необходимо синхронизировать время, т.к. сейчас оно отстаёт на неделю. +# Для этого используем утилиту ntpdate, Её необходимо заранее установить sudo apt install ntpdate. +ntpdate ntp1.vniiftri.ru + +# Имя образа +name=$(echo $(date +%Y-%m-%d)_${HOSTNAME}_image.img.gz | sed 's/-usb//') + +# Имя диска, над которым будем работать. SD в RPI называется mmcblk0 +disk=/dev/mmcblk0 + +# запишем в переменную последний сектор последнего раздела диска +last_sector=$(fdisk -l -o end $disk | tail -1) + +# Считаем, что размер сектора составляет 512 Байт, тогда необходимо сохранить ($last_sector+1)*512 Байт. +# Или ($last_sector+1)*512/1024/1024 Мб. +count=$(($(($last_sector+1))*512/1024/1024)) + +# Команда создания образа +dd if=$disk bs=1M count=$count conv=noerror,sync | ssh $server "gzip -c > $remote_path/$name 2>> $remote_path/lastlog" && \ +ssh $server "echo `date +"%A, %d %B %Y"` - Образ создан успешно >> $remote_path/log" || \ +ssh $server "echo `date +"%A, %d %B %Y"` - При создании образа произошла ошибка >> $remote_path/log" + +# Необходимо хранить только последние 20 строк в файле log +ssh $server 'echo "$(tail -5 $remote_path/log)" > $remote_path/log' + +# Необходимо хранить только последние 3 резервные копии +count_copies=3 +ssh $server "find $remote_path -type f -name '*_image.img.gz' -printf '%T@ %p\n' | sort -nr | cut -d' ' -f 2- | tail -n +$(($count_copies+1)) | xargs rm -f --" + +# Необходимо переключить EEPROM на загрузку с SD карты +rpi-eeprom-config -a $eeprom_conf_path/$eeprom_conf + +# Перезагрузка +/usr/sbin/reboot + +``` + +Добавить права на выполнение + +```bash +pi@host-usb:~ $ sudo chmod +x /opt/backup_rpi/rpi_backup.sh +``` + +7. Обеспечить выполнение скрипта при загрузке с USB. Сервис systemd + +Для этого вам нужно создать скрипт запуска systemd и поместить его в каталог `/etc/systemd/system/`. + +```bash +pi@host-usb:~ $ sudo vim /etc/systemd/system/rpi_backup.service +``` + +```bash +pi@host-usb:~ $ cat /etc/systemd/system/rpi_backup.service +[Unit] +Description=Run a Backup Script at Startup +After=default.target + +[Service] +ExecStart=/opt/backup_rpi/rpi_backup.sh + +[Install] +WantedBy=default.target +``` + +Перечитать скрипты и активировать созданный сервис + +```bash +pi@host-usb:~ $ sudo systemctl daemon-reload +pi@host-usb:~ $ sudo systemctl enable rpi_backup.service +``` + +*** + + + +