ad opi
parent
73c8d04e2f
commit
17b1a70b75
|
@ -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
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
<https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-bootloader-configuration>
|
||||
<https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-boot-eeprom>
|
||||
<https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_ORDER>
|
Loading…
Reference in New Issue