Проблема
«А у нас сервер упал. Диск сдох. Восстановим? А бекапы были?» — диалог, который никто не хочет слышать. Особенно страшно, когда понимаешь, что на кону — конфиги веб-сервера, настройки заказчиков или база данных за месяц работы.
Многие новички либо вообще не делают бэкапы (надеясь на авось), либо лепят «копии» вручную, забывая, что последний бэкап был две недели назад. А когда случается беда выясняется, что копировать надо было по-другому.
Но есть простое, надёжное и бесплатное решение, которое используют даже старые сисадмины: rsync + cron. Никакого дорогого софта, только консоль и немного прямых рук.
Решение
Мы настроим автоматическое резервное копирование важных данных на другой сервер (или в другую папку) с помощью rsync. Эта утилита умеет копировать только изменения (дифференциально), экономя место и время. А cron будет запускать её по расписанию — ежедневно, еженедельно, как вам нужно.
Что будем делать:
- Выберем, что копировать (например,
/etc,/home, папку с сайтами). - Настроим
rsyncдля первой копии. - Добавим задание в
cron, чтобы оно повторялось автоматически. - Проверим, что всё работает и (важно!) восстанавливается.
Пошаговая инструкция
Шаг 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 при ошибках. Но это уже тема отдельной статьи.
Итог: шпаргалка
| Что нужно сделать | Команда / Действие |
|---|---|
| Установить rsync | sudo apt install rsync (или аналог для вашего дистрибутива) |
| Создать скрипт бэкапа | nano /usr/local/bin/backup.sh, вставить код, chmod +x |
| Проверить скрипт | sudo /usr/local/bin/backup.sh и проверить лог /var/log/backup.log |
| Добавить задание в cron | sudo crontab -e, добавить 0 2 * * * /usr/local/bin/backup.sh |
| Проверить наличие задания в cron | sudo crontab -l |
| Самое важное — протестировать восстановление | Скопировать любой файл из бэкапа обратно и убедиться, что он открывается |
Заключение
Теперь у вас есть простое, но надёжное решение для резервного копирования, которое будет работать годами. Никаких забытых ручных копий, никакого дорогого софта только честный rsync и пунктуальный cron. А главное вы теперь спите спокойно, зная, что ваши конфиги и данные под защитой.
И помните: сисадмин — это не тот, кто умеет ставить Linux, а тот, у кого всегда есть рабочий бэкап.







