Rsync копіювання та синхронізація файлів з віддаленим сервером

утиліту Rsync можна використовувати для копіювання і синхронізації файлів і папок з локального сервера Linux на віддалений і навпаки. Rsync дозволяє копіювати ваші дані між серверами всередині захищеного SSH з'єднання. так само, rsync, підтримує стиснення даних на льоту, що підвищує продуктивність системи.

Щоб виключити втрату інформації при відправці файлів, rsync спочатку копіює всю передану інформацію в тимчасовий файл. Інша важлива особливість rsync - файли передаються в один потік, не створюється окремий потік для кожного файлу (що може спричинити проблеми з передачі великої кількості маленьких файлів в інших утиліти).

У даній статті ми розглянемо варіанти використання rsync для синхронізації і копіювання каталогів і файлів, і наведемо приклади його розширених налаштувань.

зміст:

  • Установка і основні параметр rsync
  • Rsync: локальне копіювання / синхронізація каталогів
  • Rsync: настройка синхронізації з віддаленим сервером
  • Інші приклади використання rsync
  • Резервне копіювання в Linux за допомогою rsync

Установка і основні параметр rsync

установка rsync не відрізняється від установки, будь-якого іншого пакета. У CentOS пакет rsync присутній в базовому репозиторії і встановлюється через yum (або dnf в CentOS 8):

# Yum install rsync -y

Синтаксис команди виглядає наступним чином:

# Rsync опції джерело приймач

Як джерело і приймача можна вказати локальну або віддалену директорію на іншому сервері.

Опції:

  • -v - вивести детальну інформацію про процес
  • -c - перевірка контрольних сум файлів
  • -q - мінімальна інформація
  • -a - режим архівування
  • -R - відносні шляхи
  • -y - НЕ перезаписувати новіші файли
  • -b - створення резервної копії
  • -l - копіювати симлінк
  • -L - копіювати вміст посилань
  • -H - копіювати жорсткі посилання
  • -g - зберігати групу
  • -p - зберігати права для файлів
  • -t - зберігати час модифікацій
  • -x - працювати тільки в цій ФС
  • -e - використовувати інший транспортний протокол (наприклад, ssh)
  • -z - стискати файли перед передачею
  • -delete - видаляти файли яких немає в джерелі
  • -exclude - виключити файли
  • -recursive - перебирати директорії рекурсивно
  • -no-recursive - відключити рекурсию
  • -progress - виводити прогрес передачі файлів
  • -stat - показати статистику передачі
  • -max-size - максимальний розмір файлу для передачі
  • -bwlimit - обмеження швидкості для передачі файлів
  • -version - версія утиліти

Rsync: локальне копіювання / синхронізація каталогів

Rsync можна використовувати для копіювання файлів між локальними директоріями сервера. Якщо вам потрібно скопіювати файли з однієї директорії в іншу, виконайте команду:

# Rsync /var/www/html/package.zip / var / www / tmp /

У цьому випадку файл package.zip був просто скопійований в директорію / var / www / tmp /.

Можна додати кілька опцій для виконання копіювання. Наприклад, щоб перед виконанням копіювання попередньо стиснути файл, вивести докладну інформацію і прогрес копіювання файлу, виконайте:

# Rsync -vz --progress /var/www/html/package.zip / var / www / tmp /

Ви можете використовувати rsync для синхронізації вмісту локальних каталогів. Наприклад, rsync зручно використовувати, коли вам потрібно скопіювати файли з робочої директорії, на сховище, яке примонтировать до якогось розділу. Кілька прикладів команд:

# Rsync -zvr / var / www / site / backup /

Ми скопіювали директорію / var / www / site в директорію для резервних копій, опція -r дозволила рекурсивно скопіювати всі вкладені директорії і файли.

Щоб зберегти всі атрибути файлів при копіюванні, наприклад, дату зміни і дату створення файлів, додайте ключ -a:

# Rsync -zvra / var / www / site / backup /

Якщо ви хочете скопіювати тільки змінені файли, додайте опцію -c:

# Rsync -zvrac / var / www / site / backup /

Я змінив тільки один файл і запустив команду. В результаті в цільову директорію, був скопійований лише змінений файл.

Дуже зручно використовувати таку опцію, якщо файли змінюються не часто. Таким чином ви економите час на копіювання / синхронізацію директорії.

Щоб не захаращувати директорію для бекапів, можна додати опцію -delete, це дозволить порівняти файли з джерелом і в разі присутності файлу в цільової директорії і відсутність його у вихідній директорії, видалити його автоматично. Але закликаю використовувати дану опцію з обережністю, так як якщо ви налаштуєте копіювання директорії по крону, в разі збою або втручання ззовні в робочу директорію, з подальшим видаленням робочих файлів, у вас затреться інформація і в бекапіть, що не дозволить вам відновити ваші дані . приклад:

# Rsync -zvrac --delete / var / www / site / backup /

Rsync: настройка синхронізації з віддаленим сервером

Найчастіше копіювання / синхронізація rsync з віддаленим сервером використовується для резервного копіювання або синхронізації конфігурації нод кластера. Можна виконувати автоматичну синхронізацію даних з робочого сервера на резервний, і в разі проблем на продуктивному півночі швидко все перевести на резервний. Це досить зручний і простий в налаштуванні варіант.

У сучасних версіях rsync протокол SSH використовується для передачі файлів за замовчуванням. Однак ви можете використовувати і демон rsyncd. Для цього клієнт rsync повинен бути встановлений на віддаленому комп'ютері, і його демон доданий в автозавантаження:

# Systemctl enable rsyncd

Конфігураційний файл rsync - /etc/rsyncd.conf. У цьому файлі можна налаштувати параметри rsync і настройки для синхронізації для різних ресурсів.

Для синхронізації через демона rsync адреса віддаленого сервера вказується так rsync: //. наприклад:

# Rsync -av /var/www/site/package.zip rsync: //192.168.1.32/backup

Щоб скопіювати файл на віддалений сервер, використовуйте команду:

# Rsync -az /var/www/site/package.zip root @ IP: / backup /

Де IP, це адреса віддаленого сервера. Після запуску команди, віддалений сервер запросить пароль користувача (якщо включена авторизація по паролю). Для автоматичної авотрізаціі потрібно налаштувати SSH ключі.

Скопіюємо директорію з локального сервера на віддалений:

# Rsync -zvra / var / www / site root @ IP: / backup /

Тобто, все те ж саме, що і з локальними директоріями, тільки ми вказуємо адресу віддаленого сервера.

Так само ви можете синхронізувати файли і з віддаленого сервера на локальний, команда для цього трохи зміниться:

# Rsync -zvra root @ IP: / backup / / backup

Для примусового використання SSH протоколу для копіювання файлів, вкажіть це у вашій команді (для вибору транспортного протоколу копіювання файлів використовується опція -e):

# Rsync -zvrae ssh root @ IP: / backup / / backup

Якщо віддалений SSH сервер має відмінний від стандартного порт, його так само можна вказати:

# Rsync -zvrae "ssh -p 2222" root @ IP: / backup / / backup

Інші приклади використання rsync

Якщо в рамках сесії синхронізації ви передаєте багато інформації і важливо обмежити швидкість передачі, задайте це додатковою опцією -bwlimit (вказується швидкість в КБ / с):

# Rsync -zvra --bwlimit = 100 / var / www / site root @ IP: / backup /

При передачі файлів на віддалений сервер, ви можете обмежити максимальний розмір файлів, які потрібно скопіювати. Наприклад, ви хочете скопіювати всі файли, крім файлів розміром більше 1 Мб:

# Rsync -zvra --max-size = '1m' / var / www / site root @ IP: / backup /

Якщо у вас на сервері потрібна одностороння синхронізація і після перенесення файлів на віддалений сервер потрібно видалити файли з вихідного сервера, скористайтеся опцією --remove-source-files:

# Rsync -zvra --remove-source-files --progress /var/www/site/package.zip root @ IP: / backup /

Після виконання команди, файл був скопійований на віддалений сервер і видалений на джерелі:

Так само дуже зручний опції -include і -exclude, за допомогою цих опцій, можна робити виключення з копіювання директорій або файлів:

# Rsync -zvra --exclude = administrator / / var / www / site root @ IP: / backup /

В даному випадку ми виключили директорію "administrator" при копіюванні на віддалений сервер.

# Rsync -zvra --include = '*. Php' --exclude = '*' / var / www / site / administrator / root @ IP: / backup /

додаванням опції -include ми змогли поставити фільтр по файлах, скопіювали тільки файли з розширенням php.

Резервне копіювання в Linux за допомогою rsync

У своїй рабое я частина використовую rsync для автоматичних завдань резервного копіювання в Linux. Можна написати прості bash скрипти або просто додати команду rsync в cron і виконувати за розкладом.

Наприклад, можна додати в cron команду:

01 30 * * * rsync -zvra root @ IP: / backup / / backup

У резульатате кожен день в 1-30 ночі, буде виконуватися синхронізація каталогів локального і віддаленого серверів.

Варто врахувати, що для виконання команди rsync на віддаленому сервер через cron, бажано налаштувати авторизацію серверів по SSH ключу. Приклади скриптів для бекапа, ми приводили в статті "Скрипти для бекапа файлів з Linux в хмару", там якраз використовується rsync для копіювання файлів в підключені хмарні сховища.