Автоматизиране на копиране и изпращане на Бекъп (backup)

В днешния свят на технологиите е от съществено значение да се гарантира сигурността на данните. Една от основните практики за сигурност е правилното резервно копиране и архивиране на важна информация. В този контекст ефективното изпращане на backup от един сървър на друг е ключово за осигуряване на защита на данните. За да улесним този процес, можем да използваме Bash скриптове за автоматизиране на копирането и изпращането на бекъпове.

В тази статия ще разгледаме как да създадем и изпълним такъв скрипт, като ще използваме конкретен случай за пример.

Определяне на изискванията

Преди да започнем да пишем нашия скрипт, трябва да определим ясно изискванията за това, какво точно искаме да постигнем. В нашия случай, ние искаме да копираме и изпращаме последния бекъп от един сървър на друг всеки ден около обяд.

Важно е да отбележим, че бекъпът е под номер 106 и се намира в директорията /mnt/pve/backup-external/dump на източника. Нашата цел е да копираме този бекъп на дестинацията root@10.110.110.60:/mnt/pve/flashka2/dump/ и след това да изтрием предишния бекъп на дестинацията.

Реализация на баш скрипт

След като сме определили изискванията, можем да преминем към създаването на нашия Bash скрипт. Ето стъпките, които ще следваме:

  1. Определяне на променливи – Ще дефинираме променливи за пътя до SSH ключа и за дестинацията, на която искаме да копираме бекъпа.
SSH_KEY="/root/.ssh/tablet.id_rsa"
DESTINATION="root@10.110.110.60:/mnt/pve/flashka2/dump/"

2. Намиране на последния бекъп – Ще напишем функция, която да ни помогне да намерим последния бекъп, като търсим в директорията с бекъповете и избираме последния според дата и час на създаване.

find_latest_backup() {
    BACKUP_DIR="/mnt/pve/backup-external/dump"
    latest_backup=$(ls -t ${BACKUP_DIR}/vzdump-lxc-106-*.tar.zst | head -1)
    echo "$latest_backup"
}

3. Копиране и изпращане на бекъпа – След като намерим последния бекъп, копираме го на дестинацията със scp командата, като използваме SSH ключа за оторизация.

copy_and_send_backup() {
    latest_backup=$(find_latest_backup)
    scp -i "$SSH_KEY" "$latest_backup" "$DESTINATION"
}

4. Изтриване на предишния бекъп от дестинацията – Накрая, изтриваме предишния бекъп от дестинацията, за да освободим място за новия.

delete_previous_backup() {
    ssh -i "$SSH_KEY" "$DESTINATION" "rm -f ${latest_backup##*/}"
}

Ето и целият скрипт:

#!/bin/bash

# Променлива с пътя до SSH ключа
SSH_KEY="/root/.ssh/tablet.id_rsa"

# Променлива с IP адреса на втория проксмокс
DESTINATION_HOST="10.110.110.60"
# Променлива с пътя до директорията на втория проксмокс
DESTINATION_PATH="/mnt/pve/flashka2/dump/"

# Функция за намиране на последния бекъп
find_latest_backup() {
    # Променлива с пътя до директорията с бекъповете
    BACKUP_DIR="/mnt/pve/backup-external/dump"

    # Намираме последния бекъп по номер
latest_backup=$(find "${BACKUP_DIR}" -maxdepth 1 -name 'vzdump-lxc-106-*.tar.zst' -printf "%T@ %p\n" | sort -rn | head -n 1 | awk '{print $2}')


    echo "$latest_backup"
}

# Функция за копиране и преместване на последния бекъп
copy_and_send_backup() {
    # Намираме последния бекъп
    latest_backup=$(find_latest_backup)

    # Копираме и изпращаме последния бекъп
    scp -i "$SSH_KEY" "$latest_backup" "${DESTINATION_HOST}:${DESTINATION_PATH}"

    # Трием предишния бекъп от дестинацията
    ssh -i "$SSH_KEY" "${DESTINATION_HOST}" "rm -f ${latest_backup##*/}"
}

# Изпълняваме копирането и изпращането на бекъпа
copy_and_send_backup

Уверете се, че правите скрипта изпълним с chmod +x script.sh, където script.sh е името на вашия скрипт.

Изпълнение на скрипта

Сега, когато имаме написан скрипт, можем да го изпълним, за да копираме и изпратим бекъпа. Можем да го изпълним ръчно или можем да използваме инструмента cron, за да го планираме да се изпълнява автоматично всеки ден около обяд.

За да стартирате задача на cron, можете да използвате следната командата:

crontab -e

Тази команда ще отвори редактора по подразбиране, в който можете да добавите задачата.

0 12 * * * /път/до/ваш/скрипт.sh

Примерно:

0 12 * * * /root/backup.sh

Този cron запис ще изпълни скрипта в 12 часа всеки ден.

Заключение

С този Bash скрипт ние успешно сме автоматизирали копирането и изпращането на бекъпове от един сървър на друг. Този процес ни позволява да осигурим сигурност и резервно копие на важната информация с няколко реда код. Този подход е не само ефективен, но и ни спестява време и усилия, като ни позволява да се фокусираме върху други задачи.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: