Резервное копирование файлов в 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 удобен для файловых копий и синхронизации, но критически важные данные следует хранить с версионностью и регулярно проверять восстановление.

← Предыдущая статья Базовый мониторинг Ubuntu штатными средствами Следующая статья → Отключение парольного входа SSH в Ubuntu