notes/orangepi5plus_backup.md

112 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Описание процесса создания резервной копии eMMC OrangePi 5 Plus
В OrangePi 5 Plus нельзя изменить приоритет загрузки, в первую очередь загрузка происходит с SD карты, если загрузчик на SD карте не находится, производится попытка загрузки с eMMC и т.д. Таким образом, для того, чтобы создать образ диска eMMC достаточно загрузиться с SD карты и средствами команды `dd` выполнить создание образа диска eMMC.
1. Обеспечить подключение к хранилищу резервных копий по SSH на основе ключа пользователю root, т.к. скрипт будет выполняться от его имени
```bash
root@opisd:~# ssh-keygen
root@opisd:~# ssh-copy-id da2001@nas.dav.lan
```
1. Подготовить скрипт, который выполнит создание образа eMMC и передаст его по SSH в сетевое хранилище
```bash
da2001@opisd:~$ sudo vim /opt/backup_opi/opi_backup.sh
```
```bash
#!/bin/bash
###################################################################################################
# Скрипт создаёт образ eMMC OrangePI 5 Plus и отправляет его на удалённый сервер по SSH,
# при этом на удалённом сервере происходит сжатие образа для экономии места.
# Сжатие происходит на удалённом сервере, чтобы минимизировать операции записи на Flash память,
# с которой произведена загрузка OrangePI.
###################################################################################################
# Убедиться, что запуск происходит от 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/opi1
# Необходимо синхронизировать время
chronyc -a makestep
# Имя образа
name=$(echo $(date +%Y-%m-%d)_${HOSTNAME}_image.img.gz | sed 's/-emmc//')
# Имя диска, над которым будем работать. SD в RPI называется mmcblk0
disk=/dev/mmcblk1
# запишем в переменную последний сектор последнего раздела диска
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 --"
# Перезагрузка
/usr/sbin/reboot
```
Добавить права на выполнение
```bash
da2001@opisd:~$ sudo chmod +x /opt/backup_opi/opi_backup.sh
```
**!!Актуализировать!!**
7. Обеспечить выполнение скрипта при загрузке с SD. Сервис systemd
Для этого вам нужно создать скрипт запуска systemd и поместить его в каталог `/etc/systemd/system/`.
```bash
da2001@opisd:~$ sudo vim /etc/systemd/system/rpi_backup.service
```
```bash
da2001@opisd:~$ 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
```
***