Синхронизация файлов между серверами с помощью rsync

rsync — это мощная утилита для синхронизации файлов и директорий между двумя серверами или между локальной машиной и удаленным сервером. Она отличается высокой эффективностью, так как копирует только измененные файлы и поддерживает различные параметры для тонкой настройки.

Основные возможности rsync

  • Синхронизация файлов и директорий: Локально или между серверами.

  • Сжатие данных при передаче: Уменьшает объем передаваемых данных.

  • Сохранение прав доступа и атрибутов файлов.

  • Рекурсивное копирование: Поддержка копирования целых директорий.

Установка rsync

На большинстве Linux-дистрибутивов rsync уже установлен. Если нет, установите его:

  • На Debian/Ubuntu:

    sudo apt-get install rsync
  • На CentOS/Fedora/RHEL:

    sudo yum install rsync

Основной синтаксис rsync

Базовая команда rsync выглядит следующим образом:

rsync [options] source destination
  • source — исходная директория или файл.

  • destination — директория или файл назначения.

Примеры использования rsync

Пример 1: Синхронизация файлов между локальными директориями

Синхронизация директории /source/directory/ с директорией /destination/directory/:

rsync -avh /source/directory/ /destination/directory/
  • -a (archive) — включает рекурсивное копирование и сохраняет все атрибуты файлов (права, владельцы, временные метки и т.д.).

  • -v (verbose) — выводит подробную информацию о процессе копирования.

  • -h (human-readable) — делает вывод более читаемым, например, показывает размеры файлов в КБ, МБ и т.д.

Пример 2: Синхронизация файлов с удаленного сервера на локальную машину

Чтобы синхронизировать директорию /remote/directory/ с удаленного сервера example.com на локальную машину в директорию /local/directory/:

rsync -avh username@example.com:/remote/directory/ /local/directory/

Здесь:

  • username — это имя пользователя на удаленном сервере.

  • example.com — доменное имя или IP-адрес удаленного сервера.

  • :/remote/directory/ — путь к директории на удаленном сервере.

Пример 3: Синхронизация файлов с локальной машины на удаленный сервер

Если вам нужно синхронизировать локальную директорию /local/directory/ с удаленным сервером:

rsync -avh /local/directory/ username@example.com:/remote/directory/

Пример 4: Синхронизация с удаленным сервером с использованием сжатия

Вы можете использовать сжатие для уменьшения объема передаваемых данных:

rsync -avzh /local/directory/ username@example.com:/remote/directory/
  • -z (compress) — сжимает данные при передаче.

Пример 5: Удаление файлов на целевом сервере, если их нет на исходном

Для удаления файлов на целевом сервере, которых нет в исходной директории, добавьте флаг --delete:

rsync -avzh --delete /local/directory/ username@example.com:/remote/directory/

Использование rsync через SSH

По умолчанию rsync использует SSH для передачи данных между серверами, что обеспечивает безопасное соединение. Однако, если вам нужно явно указать использование SSH:

rsync -avz -e "ssh -p 22" /local/directory/ username@example.com:/remote/directory/

Здесь -e "ssh -p 22" указывает использование SSH на порту 22. Если SSH-сервер на удаленной машине работает на нестандартном порту, его можно указать здесь.

Использование rsync для инкрементной резервной копии

rsync можно использовать для создания инкрементных резервных копий. Это означает, что каждый запуск rsync будет копировать только измененные файлы:

rsync -av --progress /local/directory/ /backup/directory/
  • --progress — показывает прогресс копирования файлов.

Планирование синхронизации с помощью cron

Для регулярной синхронизации файлов можно использовать планировщик задач cron. Например, чтобы синхронизировать директорию каждый день в 2:00 ночи:

  1. Откройте cron для редактирования:

    crontab -e
  2. Добавьте строку:

    0 2 * * * rsync -avzh /local/directory/ username@example.com:/remote/directory/

Теперь rsync будет запускаться автоматически в указанное время.

Проверка перед выполнением

Если вы хотите сначала проверить, какие файлы будут скопированы или изменены, можно использовать флаг --dry-run:

rsync -avzh --dry-run /local/directory/ username@example.com:/remote/directory/

Этот флаг позволит увидеть изменения без их фактического применения.

Оптимизация производительности

  • Сжатие (-z): Использование сжатия для уменьшения объема передаваемых данных.

  • Исключение файлов (--exclude): Исключение ненужных файлов из синхронизации, например:

    rsync -av --exclude "*.log" /local/directory/ username@example.com:/remote/directory/

Теперь вы знаете, как использовать rsync для синхронизации файлов между серверами. Этот инструмент эффективен, гибок и широко применяется для резервного копирования и управления файлами в среде Linux.

Last updated