Rsync — утилита для резервного копирования, которая упрощает синхронизацию данных между серверами и локальными машинами. В статье вы найдёте инструкции по установке Rsync, создании резервных копий, в том числе баз данных, автоматизации копирования и восстановлении данных.
VPS (Virtual Private Server) — изолированная виртуальная среда, где размещаются веб-приложения, базы данных и сервисы пользователя. Сбои оборудования, ошибки администрирования и атаки могут привести к потере данных, остановке сервисов и прямым убыткам. Резервное копирование — единственный способ гарантировать восстановление системы в таких ситуациях.
Установка Rsync
Rsync — утилита для синхронизации файлов, которая копирует только изменённые части данных, что экономит время и трафик. В отличие от простых cp или scp, она поддерживает инкрементальные бекапы, сохранение прав доступа и работу через SSH. В этой статье мы разберём, как настроить автоматическое резервное копирование с помощью Rsync, восстановить данные после сбоя и избежать частых ошибок.
Rsync предустановлен в большинстве дистрибутивов Linux. Если его нет, установите через пакетный менеджер.
Для Debian/Ubuntu:
sudo apt update && sudo apt install rsync -y
Для CentOS/RHEL:
sudo yum install rsync -y
Для Arch Linux:
sudo pacman -S rsync
После установки проверьте версию:
rsync --version
Вывод должен быть похож на rsync version 3.2.3. Если версия ниже 3.0, обновите пакеты — старые релизы могут не поддерживать современные опции.
Базовый синтаксис Rsync
Стандартная команда Rsync выглядит так:
rsync [ОПЦИИ] ИСТОЧНИК НАЗНАЧЕНИЕ
Источник и назначение — это пути на локальной машине или удалённом сервере (через user@host:/path). Опции управляют поведением копирования.
Ключевые опции:
- -a (archive) — включает группу параметров:
- -r — рекурсивное копирование директорий.
- -l — сохраняет символические ссылки.
- -p — сохраняет права доступа.
- -t — сохраняет время модификации файлов.
- -g и -o — сохраняют группу и владельца.
- -v (verbose) — выводит детали операции.
- -z (compress) — сжимает данные при передаче.
- --delete — удаляет файлы в назначении, которых нет в источнике.
- --exclude — исключает файлы по шаблону (например, --exclude="*.log").
Резервное копирование локальных данных. Предположим, вам нужно создать бекап директории /var/www в /backups. Выполните:
sudo rsync -avz /var/www/ /backups/www_backup
Слеш в конце источника (/var/www/) важен: он копирует содержимое директории, а не саму папку. Если слеша нет, в назначении появится поддиректория www_backup/var/www. Флаг -avz — стандартный набор опций для сохранения метаданных и сжатия.
Проверка резервной копии. Убедитесь, что файлы скопированы корректно:
diff -r /var/www /backups/www_backup
Если вывод пуст — различий нет.
Резервное копирование на удалённый сервер. Для синхронизации данных между серверами используйте SSH. Пример копирования локальной папки /home/user/data на удалённый VPS:
rsync -avz -e "ssh -p 2222" /home/user/data/ user@backup-server:/backups/data
Здесь -e "ssh -p 2222" указывает SSH-порт удалённого сервера (если он нестандартный), а user@backup-server:/backups/data — путь на удалённой машине.
Авторизация по ключу. Чтобы избежать ввода пароля при каждом копировании, настройте SSH-ключи. Сгенерируйте ключ на локальной машине:
ssh-keygen -t ed25519
Скопируйте публичный ключ на удалённый сервер:
ssh-copy-id -p 2222 user@backup-server
Теперь Rsync будет подключаться без пароля.
Автоматизация резервного копирования
Запускать Rsync вручную неудобно, поэтому настройте регулярные бекапы через cron.
Создайте скрипт — файл /usr/local/bin/backup.sh:
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_DIR="/backups/www_$(date +\%Y\%m\%d)"
REMOTE_HOST="user@backup-server"
# Локальная копия
rsync -avz --delete $SOURCE_DIR/ $BACKUP_DIR
# Копия на удалённый сервер
rsync -avz -e "ssh -p 2222" --delete $SOURCE_DIR/ $REMOTE_HOST:/backups/www
Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/backup.sh
Затем добавьте задачи в cron. Откройте планировщик:
crontab -e
Добавьте строку для ежедневного бекапа в 2:00:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Оператор >> /var/log/backup.log сохраняет стандартный вывод, а 2>&1 добавляет в тот же файл сообщения об ошибках.
Резервное копирование баз данных
Rsync не подходит для прямого копирования файлов живых баз (например, MySQL или PostgreSQL), так как данные могут изменяться во время переноса. Добавьте этап дампа БД.
Для MySQL:
mysqldump -u root -pPASSWORD --all-databases > /backups/mysql_dump.sql
rsync -avz /backups/mysql_dump.sql user@backup-server:/backups/
Для PostgreSQL:
pg_dumpall -U postgres > /backups/pg_dump.sql
rsync -avz /backups/pg_dump.sql user@backup-server:/backups/
Убедитесь, что дампы создаются до синхронизации через Rsync, и удаляйте их после копирования.
Проверка целостности бекапов
После передачи файлов убедитесь, что они не повреждены. Используйте sha256sum.
Сгенерируйте контрольную сумму (хеш):
sha256sum backup.tar.gz > backup.sha256
rsync -avz backup.tar.gz backup.sha256 user@backup-server:/backups/
После загрузки перейдите в директорию с бекапом и выполните:
sha256sum -c backup.sha256
Утилита сравнит текущий хеш backup.tar.gz с сохранённым в backup.sha256. Если вывод содержит OK, файл цел. Если хеши не совпадают, вы увидите сообщение FAILED — это значит, архив повреждён и его нельзя использовать для восстановления.
Восстановление данных
Локальное восстановление. Чтобы вернуть файлы из /backups/www_backup в /var/www, выполните:
sudo rsync -avz --delete /backups/www_backup/ /var/www
--delete удалит файлы в /var/www, которых нет в бекапе. Если пропустить этот флаг, останутся «лишние» файлы, что может привести к конфликтам.
Важно
Флаг --delete удаляет файлы в целевой директории, которых нет в источнике. Если бекап повреждён или содержит неполные данные, это приведёт к потере информации, поэтому всегда проверяйте бекап перед использованием --delete.
Чтобы провести проверку перед восстановлением, добавьте к команде флаг --dry-run — вы увидите, какие файлы будут изменены, без реального копирования.
Восстановление с удалённого сервера. Скопируйте данные обратно:
rsync -avz -e "ssh -p 2222" user@backup-server:/backups/www/ /var/www
Выборочное восстановление. В некоторых случаях нужно восстановить отдельные файлы. Для этого укажите полный путь к ним:
rsync -avz user@backup-server:/backups/www/config.yml /var/www/
Расширенные настройки
Инкрементальные бекапы с хардлинками. Используйте rsnapshot — надстройку над Rsync, которая создаёт инкрементальные копии с минимальным расходом места. При таком методе копирования к исходной копии добавляются только изменённые файлы, что экономит место и время:
sudo apt install rsnapshot
Конфигурация в /etc/rsnapshot.conf:
backup /var/www/ localhost/
backup user@backup-server:/backups/ remote/
Мониторинг бекапов. Настройте уведомления о завершении задач. Модифицируйте скрипт backup.sh:
#!/bin/bash
...
if [ $? -eq 0 ]; then
echo "Backup успешно завершён: $(date)" | mail -s "Backup Report" admin@example.com
else
echo "Ошибка резервного копирования: $(date)" | mail -s "Backup Error" admin@example.com
fi
Шифрование бекапов. Для защиты данных используйте шифрование. Например, сжатие через gpg перед отправкой:
tar czf - /var/www | gpg -c --batch --passphrase "ваш_пароль" > backup.tar.gz.gpg
rsync -avz backup.tar.gz.gpg user@backup-server:/backups/
Частые ошибки и их решение
«Permission denied»:
- Rsync требует прав на чтение источника и на запись в папке назначения. Проверьте, верно ли выставлены права.
- Если копируете системные файлы, используйте sudo.
- Убедитесь, что удалённый пользователь имеет доступ к директориям.
Файлы не синхронизируются:
- Проверьте опцию --delete — если она не указана, Rsync не удаляет «старые» файлы.
- Убедитесь, что в исключениях (--exclude) нет нужных данных.
Ошибка SSH. Если Rsync не подключается по SSH:
- Проверьте правильность IP и порта, которые указаны в команде.
- Убедитесь, что SSH-ключ добавлен в authorized_keys.
- Проверьте настройки файрвола: убедитесь, что указанный порт открыт на удалённом сервере и разрешён для входящих соединений.
Полезные советы
Применяйте правило 3-2-1. 3 копии данных, 2 разных типа носителей (например, HDD и облако) и 1 копия в другом географическом регионе.
Тестируйте восстановление. Раз в месяц проверяйте, что бекапы работоспособны.
Создавайте версионные резервные копии. Храните несколько версий бекапов. Rsync с опцией --link-dest позволяет создавать «снимки» с общими файлами:
rsync -avz --link-dest=/backups/previous /var/www/ /backups/current
Не копируйте временные файлы. Чтобы исключить кеш, логи и временные данные:
rsync -avz --exclude="tmp/" --exclude="*.log" /var/www/ /backups
Заключение
Вы научились настраивать автоматическое резервное копирование VPS с помощью Rsync, восстанавливать данные после сбоев и защищать их шифрованием. Основные принципы — регулярность, проверка и избыточность. Для сложных сценариев используйте специальные инструменты, такие как rsnapshot или BorgBackup, а для облачных бекапов — Rclone или AWS S3. Помните: резервная копия бесполезна, если её нельзя восстановить. Проверяйте свои бекапы, документируйте процессы и не храните все копии в одном месте.
Читайте в блоге:
- Бекап сайта на CMS WordPress: лучшие плагины
- Как сделать бекап сайта на WordPress
- Что такое снапшот VPS-сервера, его отличия от бекапа и что лучше выбрать