modified: rpi_backup.md

master
Долгий Артём 2022-08-09 20:00:28 +03:00
parent faecab5940
commit 92099b62de
1 changed files with 36 additions and 16 deletions

View File

@ -32,13 +32,13 @@ Raspberry Pi 4, 400 и Compute Module 4 используют EEPROM для за
сохранить текущие настройки EEPROM во внешний файл сохранить текущие настройки EEPROM во внешний файл
```bash ```bash
pi@sdboot:~ $ sudo rpi-eeprom-config -o ~/eeprom.conf pi@host:~ $ sudo rpi-eeprom-config -o ~/eeprom.conf
``` ```
применить конфигурацию EEPROM из файла применить конфигурацию EEPROM из файла
```bash ```bash
pi@sdboot:~ $ sudo rpi-eeprom-config -a ~/eeprom.conf pi@host:~ $ sudo rpi-eeprom-config -a ~/eeprom.conf
``` ```
Осталось окончательно сформировать архитектуру нашего решения по созданию образа. Осталось окончательно сформировать архитектуру нашего решения по созданию образа.
@ -48,7 +48,11 @@ pi@sdboot:~ $ sudo rpi-eeprom-config -a ~/eeprom.conf
1. Необходимо создать конфигурационный файл EEPROM, который установит загрузку на USB 1. Необходимо создать конфигурационный файл EEPROM, который установит загрузку на USB
```bash ```bash
pi@sdboot:~ $ cat usb_eeprom.conf pi@host:~ $ sudo mkdir /opt/backup_from_usb && sudo vim /opt/backup_from_usb/usb_eeprom.conf
```
```bash
pi@host:~ $ cat /opt/backup_from_usb/usb_eeprom.conf
[all] [all]
BOOT_UART=0 BOOT_UART=0
WAKE_ON_GPIO=1 WAKE_ON_GPIO=1
@ -59,7 +63,7 @@ BOOT_ORDER=0xf4
2. Создать скрипт, который будет выполнять обновление конфигурации EEPROM 2. Создать скрипт, который будет выполнять обновление конфигурации EEPROM
```bash ```bash
pi@sdboot:~ $ vim rpi_usb_boot.sh pi@host:~ $ vim /opt/backup_from_usb/rpi_usb_boot.sh
``` ```
```bash ```bash
@ -98,7 +102,7 @@ reboot
Добавить права на выполнение Добавить права на выполнение
```bash ```bash
pi@sdboot:~ $ chmod +x rpi_usb_boot.sh pi@host:~ $ chmod +x /opt/backup_from_usb/rpi_usb_boot.sh
``` ```
3. Выполнить настройку запуска скрипта по расписанию. 3. Выполнить настройку запуска скрипта по расписанию.
@ -106,28 +110,34 @@ pi@sdboot:~ $ chmod +x rpi_usb_boot.sh
*т.к. обновление конфигурации EEPROM необходимо выполнять с привилегиями root, настраивать расписание нужно также пользователя root, чтобы скрипт запускался с повышенными привилегиями.* *т.к. обновление конфигурации EEPROM необходимо выполнять с привилегиями root, настраивать расписание нужно также пользователя root, чтобы скрипт запускался с повышенными привилегиями.*
```bash ```bash
pi@sdboot:~ $ sudo crontab -e pi@host:~ $ sudo crontab -e
``` ```
например, для запуска скрипта каждую среду в 2 часа ночи, необходимо добавить строку например, для запуска скрипта каждую среду в 2 часа ночи, необходимо добавить строку
```bash ```bash
0 2 * * 3 /opt/scripts/rpi_usb_boot.sh 0 2 * * 3 /opt/backup_from_usb/rpi_usb_boot.sh
``` ```
**На системе загруженной с USB** **На системе загруженной с USB**
*для этого нужно запустить скрипт `/opt/backup_from_usb/rpi_usb_boot.sh` от рута или вручную переопределить загрузочный носитель с помощью `sudo rpi-eeprom-config -a /opt/backup_from_usb/usb_eeprom.conf` и перезагрузиться*
4. Обеспечить подключение к хранилищу по SSH на основе ключа 4. Обеспечить подключение к хранилищу по SSH на основе ключа
```bash ```bash
pi@usbboot:~ $ ssh-keygen pi@host-usb:~ $ ssh-keygen
pi@usbboot:~ $ ssh-copy-id user@nas pi@host-usb:~ $ ssh-copy-id user@nas
``` ```
5. Создать конфигурационный файл EEPROM, который вернёт загрузку на SD 5. Создать конфигурационный файл EEPROM, который вернёт загрузку на SD
```bash ```bash
pi@usbboot:~ $ cat sd_eeprom.conf 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] [all]
BOOT_UART=0 BOOT_UART=0
WAKE_ON_GPIO=1 WAKE_ON_GPIO=1
@ -137,6 +147,10 @@ BOOT_ORDER=0xf1
6. Подготовить основной скрипт, который выполнит создание образа SD-карты и передаст его по SSH в сетевое хранилище 6. Подготовить основной скрипт, который выполнит создание образа SD-карты и передаст его по SSH в сетевое хранилище
```bash
pi@host-usb:~ $ sudo vim /opt/backup_rpi/rpi_backup.sh
```
```bash ```bash
#!/bin/bash #!/bin/bash
@ -163,7 +177,7 @@ fi
server=user@nas server=user@nas
# Путь сохранения на удалённом сервре # Путь сохранения на удалённом сервре
remote_path=/mnt/disk2/Backup/rpi remote_path=/mnt/main/data/Backup/bastion_rpi
# Необходимо убедиться, что в папке присутствует конфиг EEPROM для изменения порядка загрузки # Необходимо убедиться, что в папке присутствует конфиг EEPROM для изменения порядка загрузки
eeprom_conf="sd_eeprom.conf" eeprom_conf="sd_eeprom.conf"
@ -174,7 +188,7 @@ if [ ! -e "./$eeprom_conf" ]; then
fi fi
# Имя образа # Имя образа
name=$(date +%Y-%m-%d)_rpi_image.img.gz name=$(echo $(date +%Y-%m-%d)_${HOSTNAME}_image.img.gz | sed 's/-usb//')
# Имя диска, над которым будем работать. SD в RPI называется mmcblk0 # Имя диска, над которым будем работать. SD в RPI называется mmcblk0
disk=/dev/mmcblk0 disk=/dev/mmcblk0
@ -205,6 +219,12 @@ rpi-eeprom-config -a ./$eeprom_conf
reboot reboot
``` ```
Добавить права на выполнение
```bash
pi@host-usb:~ $ sudo chmod +x /opt/backup_rpi/rpi_backup.sh
```
7. Обеспечить выполнение скрипта при загрузке с USB. Рассмотрим 3 способа. 7. Обеспечить выполнение скрипта при загрузке с USB. Рассмотрим 3 способа.
7.1. /etc/rc.d/rc.local 7.1. /etc/rc.d/rc.local
@ -212,7 +232,7 @@ reboot
Для выполнения пользовательского скрипта при загрузке, достаточно указать к нему полный путь в файле `/etc/rc.d/rc.local`. Затем необходимо добавить права на выполнение Для выполнения пользовательского скрипта при загрузке, достаточно указать к нему полный путь в файле `/etc/rc.d/rc.local`. Затем необходимо добавить права на выполнение
```bash ```bash
pi@usbboot:~ $ chmod +x /etc/rc.d/rc.local pi@host-usb:~ $ chmod +x /etc/rc.d/rc.local
``` ```
7.2. crontab 7.2. crontab
@ -220,7 +240,7 @@ pi@usbboot:~ $ chmod +x /etc/rc.d/rc.local
Добавить задание в crontab с параметром `@reboot` Добавить задание в crontab с параметром `@reboot`
```bash ```bash
@reboot /opt/scripts/rpi_backup.sh @reboot /opt/backup_rpi/rpi_backup.sh
``` ```
7.3. Сервис systemd 7.3. Сервис systemd
@ -228,11 +248,11 @@ pi@usbboot:~ $ chmod +x /etc/rc.d/rc.local
Для этого вам нужно создать скрипт запуска systemd и поместить его в каталог `/etc/systemd/system/`. Для этого вам нужно создать скрипт запуска systemd и поместить его в каталог `/etc/systemd/system/`.
```bash ```bash
pi@usbboot:~ $ vim /etc/systemd/system/rpi_backup.service pi@host-usb:~ $ vim /etc/systemd/system/rpi_backup.service
``` ```
```bash ```bash
pi@usbboot:~ $ cat /etc/systemd/system/rpi_backup.service pi@host-usb:~ $ cat /etc/systemd/system/rpi_backup.service
[Unit] [Unit]
Description=Run a Backup Script at Startup Description=Run a Backup Script at Startup
After=default.target After=default.target