Резервное копирование для «чайников»: надёжный бекап конфигов и данных с помощью rsync и cron

Проблема

«А у нас сервер упал. Диск сдох. Восстановим? А бекапы были?» — диалог, который никто не хочет слышать. Особенно страшно, когда понимаешь, что на кону — конфиги веб-сервера, настройки заказчиков или база данных за месяц работы.

Многие новички либо вообще не делают бэкапы (надеясь на авось), либо лепят «копии» вручную, забывая, что последний бэкап был две недели назад. А когда случается беда выясняется, что копировать надо было по-другому.

Но есть простое, надёжное и бесплатное решение, которое используют даже старые сисадмины: rsync + cron. Никакого дорогого софта, только консоль и немного прямых рук.

Решение

Мы настроим автоматическое резервное копирование важных данных на другой сервер (или в другую папку) с помощью rsync. Эта утилита умеет копировать только изменения (дифференциально), экономя место и время. А cron будет запускать её по расписанию — ежедневно, еженедельно, как вам нужно.

Что будем делать:

  1. Выберем, что копировать (например, /etc/home, папку с сайтами).
  2. Настроим rsync для первой копии.
  3. Добавим задание в cron, чтобы оно повторялось автоматически.
  4. Проверим, что всё работает и (важно!) восстанавливается.

Пошаговая инструкция

Шаг 0. Давайте сразу договоримся

  • Откуда копируем: сервер с данными (источник).
  • Куда копируем: другой сервер, внешний диск или сетевая папка (цель). В идеале физически другое устройство.
  • Что копируем: в примере будем сохранять папку /etc (конфиги) и /var/www (сайты).

Шаг 1. Установка rsync

Скорее всего, rsync уже установлен в вашей системе. Проверим:

bash

rsync --version

Если не установлен:

bash

# Debian/Ubuntu
sudo apt update && sudo apt install rsync -y

# CentOS/RHEL
sudo yum install rsync -y

# Alpine
apk add rsync

На целевом сервере тоже нужен rsync, но если вы копируете на внешний диск, достаточно локальной версии.

Шаг 2. Создаём скрипт резервного копирования

Чтобы не писать длинную команду каждый раз, создадим файл скрипта. Например, /usr/local/bin/backup.sh.

bash

sudo nano /usr/local/bin/backup.sh

Вставляем туда следующий код:

bash

#!/bin/bash
# Скрипт резервного копирования важных данных через rsync

# Параметры
SOURCE="/etc /var/www"   # что копируем (через пробел)
DEST="/mnt/backup"       # куда копируем (локальная папка или удалённый сервер)
LOG="/var/log/backup.log" # файл лога
DATE=$(date "+%Y-%m-%d %H:%M:%S")

# Начинаем логирование
echo "===== $DATE =====" >> $LOG

# Запускаем rsync
rsync -avz --delete $SOURCE $DEST >> $LOG 2>&1

# Проверяем результат
if [ $? -eq 0 ]; then
    echo "Резервное копирование завершено успешно" >> $LOG
else
    echo "ОШИБКА при резервном копировании!" >> $LOG
fi
echo "" >> $LOG

Что означают ключи rsync:

  • -a (archive) сохраняет права, владельцев, временные метки.
  • -v (verbose) подробный вывод (в лог).
  • -z (compress) сжимает данные при передаче (экономит трафик).
  • --delete  удаляет на целевой папке файлы, которых нет в источнике. Так бэкап всегда точная копия.

Варианты для DEST:

  • Локальная папка: /mnt/backup
  • Удалённый сервер: user@192.168.1.100:/backup (потребуется настройка SSH-ключей, чтобы не вводить пароль).

Делаем скрипт исполняемым:

bash

sudo chmod +x /usr/local/bin/backup.sh

Шаг 3. Тестируем скрипт вручную

Перед тем как добавлять в cron, запустим скрипт и проверим, нет ли ошибок.

bash

sudo /usr/local/bin/backup.sh

Смотрим лог:

bash

cat /var/log/backup.log

Проверяем целевую папку — должны появиться скопированные данные.

Шаг 4. Настройка автоматического запуска через cron

cron  это планировщик задач в Linux. Открываем его для редактирования:

bash

sudo crontab -e

Если открываете впервые, выберите редактор (nano проще). Добавляем строку. Например, для ежедневного запуска в 2 часа ночи:

0 2 * * * /usr/local/bin/backup.sh

Расшифровка: минута 0, час 2, каждый день, каждый месяц, каждый день недели запускать скрипт.

Другие примеры:

  • Каждый час: 0 * * * * ...
  • Каждое воскресенье в 3:00: 0 3 * * 0 ...
  • Каждые 5 минут: */5 * * * * ...

Сохраняем и выходим. Проверить, что cron принял задание, можно командой:

bash

sudo crontab -l

Шаг 5. Важно: проверка восстановления!

Самый главный шаг, который 90% людей пропускают. Бекап, который нельзя восстановить, — это мусор.

Попробуйте «восстановить» какой-нибудь файл из бэкапа в другое место и убедитесь, что он открывается. Например:

bash

# Скопировать файл обратно из бэкапа в /tmp для проверки
sudo rsync -av /mnt/backup/etc/ssh/sshd_config /tmp/sshd_config_test

Если файл успешно скопировался — вы молодец.

Шаг 6. Дополнительные плюшки (ротация, уведомления)

Со временем бэкапы будут занимать всё больше места. Можно настроить ротацию — хранить, например, 7 ежедневных копий. Это делается либо с помощью опции --backup и --backup-dir у rsync, либо отдельным скриптом с find.

Также полезно добавить отправку уведомлений в Telegram при ошибках. Но это уже тема отдельной статьи.

Итог: шпаргалка

Что нужно сделатьКоманда / Действие
Установить rsyncsudo apt install rsync (или аналог для вашего дистрибутива)
Создать скрипт бэкапаnano /usr/local/bin/backup.sh, вставить код, chmod +x
Проверить скриптsudo /usr/local/bin/backup.sh и проверить лог /var/log/backup.log
Добавить задание в cronsudo crontab -e, добавить 0 2 * * * /usr/local/bin/backup.sh
Проверить наличие задания в cronsudo crontab -l
Самое важное — протестировать восстановлениеСкопировать любой файл из бэкапа обратно и убедиться, что он открывается

Заключение

Теперь у вас есть простое, но надёжное решение для резервного копирования, которое будет работать годами. Никаких забытых ручных копий, никакого дорогого софта только честный rsync и пунктуальный cron. А главное вы теперь спите спокойно, зная, что ваши конфиги и данные под защитой.

И помните: сисадмин — это не тот, кто умеет ставить Linux, а тот, у кого всегда есть рабочий бэкап.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu