Резервное копирование – это как страховка: оно не нужно каждый день, но когда случается катастрофа, например, случайное удаление файлов, сбой диска или атака вымогателей, оно может разрушить все, если вы не будете готовы. Вот тут-то и приходит на помощь грамотное планирование резервного копирования.
В этом руководстве мы покажем вам, как планировать инкрементное резервное копирование с помощью 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/ravi/documents/
, и вы хотите сделать их резервную копию в /backup/documents/
. Напишем простой shell-скрипт, который будет использовать rsync
для копирования измененных файлов в каталог резервного копирования. Затем с помощью cron
запустите этот скрипт каждый день в 2:00 ночи.
Шаг 1: Написание сценария резервного копирования
Сначала создадим сценарий оболочки для выполнения резервного копирования.
sudo nano /usr/local/bin/rsync-backup.sh
Вставьте в него следующий сценарий:
#!/bin/bash SOURCE="/home/ravi/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:00, поэтому вам нужно отредактировать задания 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/ravi/documents/ /backup/daily.0/
На следующий день используйте папку предыдущего дня в качестве ссылки для создания инкрементной резервной копии:
rsync -a --link-dest=/backup/daily.0/ /home/ravi/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/ravi/documents/ /backup/daily.0/
Вы можете запланировать этот скрипт с помощью cron, как и базовый скрипт резервного копирования. Например, чтобы запускать его каждый день в 2:00 AM:
0 2 * * * /usr/local/bin/daily-rsync-rotate.sh
Бонусный совет: резервное копирование на удаленный сервер
Если вы хотите создать резервную копию данных на другой машине (например, на сервере резервного копирования), вы можете использовать rsync
по SSH, но убедитесь, что ключи SSH настроены для входа без пароля, а затем выполните что-то вроде этого:
rsync -av -e ssh /home/ravi/documents/ ravi@backup-server:/backup/ravi/
Вы можете добавить приведенную выше команду в свой сценарий или сделать отдельный сценарий только для удаленного резервного копирования.
Заключение
Бэкапы, возможно, и не кажутся захватывающими, но потеря данных – это точно. Настроив инкрементное резервное копирование с помощью rsync
и cron
, вы сможете расслабиться, зная, что ваши файлы защищены каждый день.
Всегда тестируйте свои резервные копии, убедитесь, что ваши скрипты работают, и не забывайте время от времени проверять журналы. Если вам когда-нибудь понадобится что-то восстановить, вы будете рады, что у вас есть такая система.
Комментарии (0)