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

9 хв читання - 24 травня 2025 р.

hero section cover
Зміст
  • Rsync для Linux: як синхронізувати, копіювати та створювати резервні копії файлів як професіонал
  • Що таке rsync?
  • Чому краще використовувати rsync, а не cp або scp
  • Поширені прапори rsync
  • Приклади Rsync
  • Автоматизація rsync за допомогою cron
  • Заключні думки
Поділитися

Як використовувати rsync в Linux для інкрементного перенесення, віддаленої синхронізації по SSH, резервного копіювання за розкладом за допомогою cron та уникнення пастки кінцевої косої риски.

Rsync для Linux: як синхронізувати, копіювати та створювати резервні копії файлів як професіонал

Rsync — це стандартний інструмент для копіювання файлів між системами Linux. Він працює швидше, ніж cp або scp для будь-яких операцій, які ви виконуєте більше ніж один раз, відновлює дані після зривів мережі та передає лише те, що насправді змінилося. У цій публікації розглядається, що робить rsync, які прапори варто знати, приклади, до яких ви будете звертатися найчастіше, та як запланувати його за допомогою cron.


 

Що таке rsync?

Rsync — це утиліта командного рядка для копіювання та синхронізації файлів між різними локаціями. Вона працює локально, через SSH на віддаленому хості або з демоном rsync. Ключова відмінність від cp або scp: rsync спочатку порівнює джерело та місце призначення, а потім передає лише зміни. У каталозі розміром 100 ГБ, де змінилося 200 МБ, rsync переміщує 200 МБ. cp а scp переносять усе.

Вона входить до складу кожного сучасного дистрибутива Linux. Якщо її немає: apt install rsync або dnf install rsync.

Чому краще використовувати rsync, а не cp або scp

Три причини, чому rsync виграє у будь-якому нетривіальному копіюванні:

  • Він інкрементний. Наступні запуски передають лише змінені байти, а не цілі файли. Для резервних копій та дзеркал це перетворює нічну роботу на кілька хвилин.
  • Він витримує переривання. З --partial, файл розміром 50 ГБ, переданий наполовину, відновлюється з того місця, де зупинився, а не починається спочатку.
  • Він зберігає метадані. Режим архівування (-a) зберігає права доступу, власника, символічні посилання та часові мітки. Це критично важливо для системних файлів, дерев вихідного коду та всього, де атрибути мають значення.

Для одноразового копіювання невеликих файлів scp підійде. Для всього, що повторюється, вимагає великої пропускної здатності або може знадобитися відновлення, використовуйте rsync.

Поширені прапори rsync

Прапори, які вам дійсно знадобляться:

ПрапорецьЩо робить
-aРежим архівування. Зберігає права доступу, власність, символічні посилання, часові мітки. Еквівалент -rlptgoD.
-vVerbose. Виводить список файлів, що передаються.
-zСтиснення під час передачі. Корисно для повільних або дорогих з'єднань, менш корисно в локальній мережі або для вже стисненого вмісту.
-PПоєднує --partial та --progress. Відновлення перерваних передач, відображення поточного прогресу.
--deleteВидаляє файли у місці призначення, яких немає у джерелі. Необхідно для справжнього дзеркалу.
--excludeПропускати файли, що відповідають шаблону.
--exclude-from=FILEЧитати шаблони виключення з файлу. Чистіше, ніж ланцюгове використання багатьох --exclude прапорців.
--dry-runПоказати, що сталося б, якби нічого не передавалося.
--bwlimit=KBPSОбмежити використання пропускної здатності в кілобайтах на секунду. Корисно для резервного копіювання, яке виконується у робочий час.
--checksumПорівнювати файли за контрольною сумою замість розміру та часу модифікації. Працює повільніше, але виявляє крайні випадки.
-e sshВикористовувати SSH для передачі. За замовчуванням у більшості сучасних установок.

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

Приклади Rsync

Копіювання каталогу локально:

rsync -av /source/path/ /destination/path/

Синхронізація з віддаленим сервером через SSH:

rsync -avz /local/dir/ user@remote:/remote/dir/

Проведіть пробний запуск, перш ніж робити щось руйнівне:

rsync -avz --dry-run /local/dir/ user@remote:/dir/

Дзеркальне копіювання двох каталогів, включаючи видалення на місці призначення:

rsync -av --delete /source/ /destination/

Виключення логів та тимчасового каталогу:

rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/

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

rsync -avP user@remote:/backups/big.img /local/

Якщо сесія SSH обривається, запустіть ту саму команду знову. З -P, rsync продовжить з того місця, де зупинився, замість того, щоб починати з нуля.

Обмежте пропускну здатність до 50 МБ/с для резервного копіювання в непіковий час, щоб не перевантажувати висхідний канал:

rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/

Підступ з кінцевою косою рискою

Найпоширеніша помилка при використанні rsync:

rsync -av /source  /destination/    # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/    # copies the CONTENTS of /source into /destination

Коса риска в кінці шляху до джерела означає «все, що знаходиться в цьому каталозі». Відсутність косої риски означає «сам цей каталог». Якщо ви не впевнені, запускайте спочатку з --dry-run першим, якщо ви не впевнені, особливо в поєднанні з --delete.

Автоматизація rsync за допомогою cron

Для запланованого резервного копіювання вам потрібні три речі:

  1. Безпарольний доступ SSH до місця призначення. Задачі cron не можуть вводити паролі. Створіть ключ і скопіюйте його на хост резервного копіювання:

    ssh-keygen -t ed25519
    ssh-copy-id user@backup-host
  2. Скрипт, а не однорядковий запис у crontab. Простіше тестувати, простіше вести журнал:

    #!/bin/bash
    LOG=/var/log/rsync-backup.log
    rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1

    Зробіть його виконуваним за допомогою chmod +x.

  3. Запис у cron для його запуску. Відредагуйте за допомогою crontab -e:

    0 2 * * * /usr/local/bin/rsync-backup.sh

    Це запускає скрипт щоночі о 02:00.

Два вдосконалення, які варто внести в робочу версію: оберніть скрипт у flock , щоб довготривале завдання не перекривалося з запуском наступної ночі, та перенаправте вихідні дані через logger , щоб помилки потрапляли в системний журнал, де їх може виявити система моніторингу.

Заключні думки

Rsync — це один із небагатьох інструментів Linux, де час, витрачений на вивчення опцій, окупається майже миттєво. Основні моменти:

  • Інкрементальні передачі та підтримка відновлення роблять rsync правильним вибором для будь-чого, що ви запускаєте більше ніж один раз
  • -a для режиму архівування, -z для стиснення, -P для відновлення та відстеження прогресу, --delete для справжніх дзеркал
  • Зверніть увагу на кінцеву косу риску в шляху до джерела, особливо з --delete
  • Поєднайте це з cron та SSH-ключами для автоматичного резервного копіювання за розкладом

Для великих завдань резервного копіювання, що переміщують дані між об'єктами, запуск rsync на VPS з необмеженою пропускною здатністю означає, що вікна резервного копіювання не обмежуються лімітами на передачу даних.

Блог

На цьому тижні

Більше статей
Цифрова втома очей: як захистити зір у світі, де ми проводимо багато часу перед екранами

Цифрова втома очей: як захистити зір у світі, де ми проводимо багато часу перед екранами

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

4 хв читання - 21 травня 2025 р.

Чому важливо мати потужний VPS без обмежень трафіку

8 хв читання - 9 травня 2025 р.

Більше статей
background image

Маєте запитання або потребуєте індивідуального рішення?

icon

Гнучкі варіанти

icon

Глобальне охоплення

icon

Миттєве розгортання

icon

Гнучкі варіанти

icon

Глобальне охоплення

icon

Миттєве розгортання