Резервное копирование файлов в Ubuntu с помощью rsync
Пошаговая настройка резервного копирования каталогов в Ubuntu с помощью rsync: локальная копия, удалённый сервер, исключения и проверка результата.
rsync — стандартный инструмент Linux для копирования и синхронизации файлов. Он передаёт только изменившиеся данные, сохраняет права и подходит как для локальных, так и для удалённых резервных копий.
В этой инструкции рассматривается только резервное копирование файлов и каталогов с помощью rsync.
Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: начальный
Время выполнения: около 15 минут
Требуемый доступ: пользователь с правами чтения исходных данных
Что будет настроено
В результате будет понятно, как:
- создать локальную резервную копию каталога;
- скопировать данные на удалённый сервер;
- исключить временные файлы;
- удалить устаревшие файлы в копии;
- проверить результат;
- автоматизировать запуск через cron.
Установка rsync
Проверьте наличие программы:
rsync --version
Если команда не найдена:
sudo apt update
sudo apt install -y rsync
Базовый синтаксис
Общий формат:
rsync [опции] ИСТОЧНИК НАЗНАЧЕНИЕ
Пример локального копирования:
rsync -a /srv/data/ /backup/data/
Обратите внимание на завершающий / у источника:
/srv/data/
Он означает копирование содержимого каталога, а не самого каталога целиком.
Локальная резервная копия
Создайте каталог назначения:
sudo mkdir -p /backup/data
Скопируйте данные:
sudo rsync -a /srv/data/ /backup/data/
Параметр -a включает архивный режим и сохраняет:
- структуру каталогов;
- права;
- владельцев;
- группы;
- временные метки;
- символические ссылки.
Подробный вывод
Для отображения процесса добавьте -v:
sudo rsync -av /srv/data/ /backup/data/
Для отображения прогресса:
sudo rsync -av --progress /srv/data/ /backup/data/
Для общей статистики:
sudo rsync -av --stats /srv/data/ /backup/data/
Предварительная проверка без копирования
Перед реальным запуском используйте --dry-run:
sudo rsync -av --dry-run /srv/data/ /backup/data/
Команда покажет, какие действия будут выполнены, но не изменит файлы.
Исключение файлов и каталогов
Исключить один каталог:
sudo rsync -av --exclude 'cache/' /srv/data/ /backup/data/
Исключить несколько шаблонов:
sudo rsync -av --exclude 'cache/' --exclude '*.tmp' --exclude '*.log' /srv/data/ /backup/data/
Файл исключений
Создайте файл:
sudo tee /etc/rsync-backup-excludes.txt >/dev/null <<'EOF'
cache/
*.tmp
*.log
lost+found/
EOF
Используйте его:
sudo rsync -av --exclude-from=/etc/rsync-backup-excludes.txt /srv/data/ /backup/data/
Удаление устаревших файлов
Чтобы копия полностью соответствовала источнику:
sudo rsync -av --delete /srv/data/ /backup/data/
Параметр --delete удаляет из назначения файлы, которых больше нет в источнике.
Важно: перед первым запуском с
--deleteобязательно используйте--dry-run.
Проверка:
sudo rsync -av --delete --dry-run /srv/data/ /backup/data/
Резервное копирование на удалённый сервер
В примерах используются универсальные значения:
BACKUP_USER
BACKUP_SERVER
/backup/server01/
Копирование по SSH:
rsync -av /srv/data/ BACKUP_USER@BACKUP_SERVER:/backup/server01/
Если SSH работает на нестандартном порту:
rsync -av -e 'ssh -p 2222' /srv/data/ BACKUP_USER@BACKUP_SERVER:/backup/server01/
Проверка SSH-доступа
Перед запуском проверьте подключение:
ssh BACKUP_USER@BACKUP_SERVER
Для автоматизации рекомендуется использовать SSH-ключи.
Проверка без интерактивного ввода:
ssh -o BatchMode=yes BACKUP_USER@BACKUP_SERVER true
Если команда завершается без запроса пароля, автоматический запуск возможен.
Ограничение пропускной способности
Для медленного канала:
rsync -av --bwlimit=10240 /srv/data/ BACKUP_USER@BACKUP_SERVER:/backup/server01/
Значение указывается в КиБ/с. В примере ограничение составляет примерно 10 МиБ/с.
Сжатие при передаче
Для удалённой передачи можно добавить -z:
rsync -avz /srv/data/ BACKUP_USER@BACKUP_SERVER:/backup/server01/
Сжатие полезно для текстовых файлов, но почти не помогает для уже сжатых архивов, видео и образов.
Проверка результата
Сравните объём:
sudo du -sh /srv/data
sudo du -sh /backup/data
Проверьте различия:
sudo rsync -av --dry-run --checksum /srv/data/ /backup/data/
Если вывод пустой, содержимое совпадает.
Параметр --checksum читает содержимое всех файлов и может заметно увеличить время проверки.
Скрипт резервного копирования
Создайте скрипт:
sudo tee /usr/local/sbin/backup-data.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -Eeuo pipefail
SOURCE="/srv/data/"
DESTINATION="/backup/data/"
LOG_FILE="/var/log/backup-data.log"
printf '%s Начало резервного копирования
' "$(date '+%Y-%m-%d %H:%M:%S')" >>"$LOG_FILE"
rsync -a --delete --exclude-from=/etc/rsync-backup-excludes.txt "$SOURCE" "$DESTINATION" >>"$LOG_FILE" 2>&1
printf '%s Резервное копирование завершено
' "$(date '+%Y-%m-%d %H:%M:%S')" >>"$LOG_FILE"
EOF
Сделайте файл исполняемым:
sudo chmod 750 /usr/local/sbin/backup-data.sh
Проверьте вручную:
sudo /usr/local/sbin/backup-data.sh
Проверьте журнал:
sudo tail -50 /var/log/backup-data.log
Автоматический запуск через cron
Откройте crontab root:
sudo crontab -e
Добавьте ежедневный запуск в 03:30:
30 3 * * * /usr/local/sbin/backup-data.sh
Проверьте:
sudo crontab -l
Защита от параллельного запуска
Если предыдущая копия может не успеть завершиться, используйте flock:
30 3 * * * flock -n /run/lock/backup-data.lock /usr/local/sbin/backup-data.sh
Так новый процесс не запустится, пока предыдущий ещё работает.
Типичные проблемы
Permission denied
Проверьте права на источник и каталог назначения:
namei -l /srv/data
namei -l /backup/data
No such file or directory
Проверьте путь:
ls -ld /srv/data /backup/data
Host key verification failed
Подключитесь к серверу вручную:
ssh BACKUP_USER@BACKUP_SERVER
Подтвердите fingerprint и повторите rsync.
Копируются лишние файлы
Проверьте файл исключений:
cat /etc/rsync-backup-excludes.txt
Выполните тест:
sudo rsync -av --dry-run --exclude-from=/etc/rsync-backup-excludes.txt /srv/data/ /backup/data/
Ошибочное удаление файлов
Если используется --delete, сначала всегда запускайте:
rsync -av --delete --dry-run ИСТОЧНИК НАЗНАЧЕНИЕ
Что не является полноценной резервной копией
Обычная синхронизация с --delete повторяет текущее состояние источника. Если файл был удалён или повреждён, это изменение может попасть и в копию.
Для полноценной защиты дополнительно нужны:
- версии по датам;
- отдельное хранилище;
- политика хранения;
- проверка восстановления;
- защита копий от изменения;
- резервная копия вне основного сервера.
Итог
После выполнения инструкции:
- настроено копирование каталогов через
rsync; - добавлены исключения;
- выполнена предварительная проверка;
- при необходимости включена синхронизация с удалением;
- настроено копирование по SSH;
- создан скрипт;
- добавлен автоматический запуск.
rsync удобен для файловых копий и синхронизации, но критически важные данные следует хранить с версионностью и регулярно проверять восстановление.