notes/orangepi5plus_backup.md

112 lines
5.0 KiB
Markdown
Raw Normal View History

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