Резервные копии — это как страховка: они не нужны каждый день, но когда случается беда, например, случайное удаление файла, сбой диска или атака программы-вымогателя, этого достаточно, чтобы всё разрушить, если вы не готовы. Вот тут-то и приходит на помощь грамотное планирование резервного копирования.
В этом руководстве я покажу вам, как запланировать инкрементное резервное копирование с помощью rsync и cron. Мы объясним, что такое инкрементное резервное копирование, как работает rsync и как автоматизировать весь процесс с помощью cron.
Что такое инкрементное резервное копирование?
Инкрементное резервное копирование означает, что вы создаёте резервную копию только тех файлов, которые изменились с момента последнего резервного копирования. Таким образом, вместо того чтобы каждый раз копировать всё целиком, что может быть медленным процессом и занимать много места, вы сохраняете только новые или обновлённые файлы.
Допустим, у вас в папке 10 000 файлов, и только 20 из них изменились сегодня. При инкрементном резервном копировании 9 980 неизменных файлов будут пропущены, и будут скопированы только 20 файлов, которые действительно изменились. Это эффективно и идеально подходит для ежедневного резервного копирования.
Зачем использовать rsync?
rsync — это мощный и надёжный инструмент, используемый для копирования файлов и каталогов в Linux. Особенностью rsync
является его способность синхронизировать только различия между источником и местом назначения.
Он работает локально (из одной папки в другую в той же системе) или удалённо (через SSH на другой сервер). Он также сохраняет права доступа к файлам, временные метки, символические ссылки и даже поддерживает удаление удалённых файлов, что делает его быстрым, гибким и уже установленным в большинстве дистрибутивов Linux.
Если rsync
не установлен, вы можете установить его с помощью:
sudo apt install rsync # Debian/Ubuntu sudo yum install rsync # CentOS/RHEL
Запасной план
Допустим, у вас есть несколько важных файлов, хранящихся в /home/andreyex/documents/
, и вы хотите создать их резервную копию в /backup/documents/
. Мы напишем простой сценарий командной оболочки, который использует rsync
для копирования изменённых файлов в каталог резервных копий. Затем мы будем использовать cron
для запуска этого сценария каждый день в 14:00.
Шаг 1. Напишите сценарий резервного копирования
Сначала давайте создадим сценарий оболочки для резервного копирования.
sudo nano /usr/local/bin/rsync-backup.sh
Вставьте в него следующий скрипт:
#!/bin/bash SOURCE="/home/andreyex/documents/" DEST="/backup/documents/" LOGFILE="/var/log/rsync-backup.log" DATE=$(date +"%Y-%m-%d %H:%M:%S") rsync -av --delete "$SOURCE" "$DEST" >> "$LOGFILE" 2>&1 echo "Backup completed at $DATE" >> "$LOGFILE"
Этот скрипт сообщает rsync
о необходимости синхронизации файлов из исходного каталога с целевым. Флаг -a
указывает на то, что скрипт должен работать в режиме архивации, сохраняя разрешения и метаданные.
-v
делает вывод подробным (чтобы мы могли записывать происходящее), а --delete
удаляет файлы из резервной копии, если они больше не существуют в исходном файле. Весь вывод записывается в файл журнала в /var/log/rsync-backup.log
так, чтобы мы могли позже проверить, не пошло ли что-то не так.
Теперь сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/rsync-backup.sh
Шаг 2. Запланируйте выполнение скрипта с помощью Cron
Далее нам нужно убедиться, что сценарий резервного копирования запускается автоматически каждый день в 2 часа ночи. Для этого вам нужно отредактировать задания cron и ввести:
crontab -e
Добавьте эту строку внизу:
0 2 * * * /usr/local/bin/rsync-backup.sh
Чтобы подтвердить, что ваше задание cron было добавлено:
crontab -l
Шаг 3. Проверка настройки резервного копирования
Прежде чем позволить системе автоматически выполнять резервное копирование, важно протестировать скрипт вручную, чтобы убедиться, что всё работает должным образом. Это поможет вам выявить любые проблемы с путями, ошибки в разрешениях или опечатки до того, как cron запустит его в фоновом режиме.
Сначала запустите сценарий резервного копирования вручную, чтобы немедленно запустить процесс резервного копирования. Вы увидите список копируемых или пропускаемых файлов.
sudo /usr/local/bin/rsync-backup.sh
После завершения работы скрипта перейдите в каталог с резервными копиями и убедитесь, что файлы скопированы правильно:
ls -lh /backup/documents/
Теперь проверьте файл журнала, чтобы убедиться, что скрипт выполнился без ошибок и зафиксировал время резервного копирования:
cat /var/log/rsync-backup.log
Вы должны увидеть примерно такой результат:
sending incremental file list ./ file1.txt folder2/ folder2/file2.pdf Backup completed at 2025-06-16 14:00:01
Это подтверждает, что скрипт не только скопировал файлы, но и записал событие с указанием времени.
Шаг 4. Создавайте ежедневные резервные копии
Если вы хотите пойти дальше и делать ежедневные резервные копии данных (а не просто хранить одну резервную папку), вы можете использовать опцию --link-dest
в rsync, которая позволяет создавать резервные копии с жёсткими ссылками, по сути, создавая новые папки, которые выглядят как полные резервные копии, но используют место только для изменённых файлов.
В первый день создайте начальное полное резервное копирование:
rsync -a /home/andreyex/documents/ /backup/daily.0/
На следующий день используйте папку за предыдущий день в качестве ссылки для создания инкрементного резервного копирования:
rsync -a --link-dest=/backup/daily.0/ /home/andreyex/documents/ /backup/daily.1/
Файлы, которые не изменились, будут связаны жёсткими ссылками, что сэкономит место. Вы даже можете менять местами эти папки с помощью простого скрипта, который переименовывает старые и каждый день создаёт новый снимок.
Вот базовый сценарий ротации на 7 дней:
#!/bin/bash rm -rf /backup/daily.7 mv /backup/daily.6 /backup/daily.7 mv /backup/daily.5 /backup/daily.6 mv /backup/daily.4 /backup/daily.5 mv /backup/daily.3 /backup/daily.4 mv /backup/daily.2 /backup/daily.3 mv /backup/daily.1 /backup/daily.2 mv /backup/daily.0 /backup/daily.1 rsync -a --delete --link-dest=/backup/daily.1 /home/andreyex/documents/ /backup/daily.0/
Вы можете запланировать выполнение этого скрипта с помощью cron, как и базового скрипта резервного копирования. Например, чтобы запускать его каждый день в 2 часа ночи:
0 2 * * * /usr/local/bin/daily-rsync-rotate.sh
Дополнительный совет: резервное копирование на удалённый сервер
Если вы хотите создать резервную копию своих данных на другом компьютере (например, на сервере резервного копирования), вы можете использовать rsync
через SSH, но убедитесь, что ключи SSH настроены для входа без пароля, а затем выполните что-то вроде этого:
rsync -av -e ssh /home/andreyex/documents/ andreyex@backup-server:/backup/andreyex/
Вы можете добавить приведенную выше команду в свой скрипт или создать отдельный скрипт только для удаленного резервного копирования.
Заключение
Резервное копирование может показаться скучным занятием, но потеря данных — это точно не весело. Как только вы настроите инкрементное резервное копирование с помощью rsync
и cron
, вы сможете расслабиться, зная, что ваши файлы защищены каждый день.
Всегда проверяйте резервные копии, убедитесь, что ваши скрипты работают, и не забывайте время от времени проверять журналы. Если вам когда-нибудь понадобится что-то восстановить, вы будете рады, что у вас есть такая система.