Головна » як » Посібник із несинхронізації для синхронізації даних з Rsync

    Посібник із несинхронізації для синхронізації даних з Rsync

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

    Попередження

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

    Запуск rsync у Windows

    По-перше, давайте читачам Windows на тій же сторінці, що й наші гуру Linux. Хоча rsync побудований для роботи на Unix-подібних системах, немає жодної причини, щоб ви не могли використовувати його так само легко у Windows. Cygwin створює чудовий Linux API, який ми можемо використовувати для запуску rsync, тому перейдіть на їх веб-сайт і завантажте 32-бітну або 64-розрядну версію, залежно від вашого комп'ютера.

    Установка проста; Ви можете зберегти всі параметри за замовчуванням, доки не перейдете до екрана “Вибір пакунків”.

    Тепер потрібно виконати ті самі кроки для Vim і SSH, але пакунки будуть виглядати трохи інакше, коли ви виберете їх, так що ось деякі скріншоти:

    Встановлення Vim:

    Встановлення SSH:

    Після вибору цих трьох пакунків продовжуйте натискати кнопку далі, доки не завершите встановлення. Потім ви можете відкрити Cygwin, натиснувши на іконку, яку інсталятор розмістив на робочому столі.

    Команди rsync: Прості до розширених

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

    Припустимо, у вас є купа файлів, які потребують резервного копіювання - хто не в ці дні? Підключіть свій портативний жорсткий диск, щоб створити резервну копію файлів комп'ютерів, і виконати таку команду:

    rsync -a / home / geek / files / / mnt / usb / файли /

    Або, як це буде виглядати на комп'ютері з ОС Windows з Cygwin:

    rsync -a / cygdrive / c / файли / / cygdrive / e / файли /

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

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

    rsync -av --видалення -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

    Наведена вище команда передає ваші файли на інший комп'ютер з IP-адресою 10.1.1.1. Це призведе до видалення сторонніх файлів з місця призначення, які більше не існують у вихідній директорії, виведення перенесених файлів, тому ви маєте уявлення про те, що відбувається, і тунель rsync через SSH на порт 12345.

    The -a -v -e - вилучити перемикачі є одними з найосновніших і найчастіше використовуваних; Ви повинні вже знати багато про них, якщо читаєте цей підручник. Перейдемо до деяких інших перемикачів, які іноді ігноруються, але надзвичайно корисні:

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

    Команда rsync з --прогресу перемикач у процесі резервного копіювання:

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

    -P - цей комутатор об'єднує --прогресу і --частковий, тому використовуйте його замість, і це зробить вашу команду rsync трохи акуратнішою.

    -z або --стиснути - Цей перемикач змусить rsync стискати файлові дані при його передачі, зменшуючи кількість даних, які необхідно надіслати до місця призначення. Насправді це досить поширений перемикач, але це далеко не найважливіше, тільки реально виграє від передачі між повільними з'єднаннями, і він нічого не робить для наступних типів файлів: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

    -h або --читається людиною - Якщо ви використовуєте --прогресу перемикач, ви обов'язково захочете використовувати цей, а також. Тобто, якщо ви не хочете конвертувати байти в мегабайти на льоту. The -h Перемикач перетворює всі виведені числа в читабельний формат, так що ви можете реально зрозуміти обсяг переданих даних.

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

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

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

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

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

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

    Давайте подивимося на нашу команду rsync тепер, коли ми додали ще кілька перемикачів:

    rsync -avzhP - вилучити --stats --log-file = / home / geek / rsynclogs / backup.log - вилучити-з '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

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

    Резервні копії знімків

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

    Творець rsync зрозумів це і додав --резервне копіювання і --backup-dir аргументи, щоб користувачі могли запускати диференціальні резервні копії. Перший приклад на сайті rsync показує скрипт, де повна резервна копія виконується кожні сім днів, а потім зміни в цих файлах щодня резервуються в окремих каталогах. Проблема з цим методом полягає в тому, що для відновлення файлів потрібно ефективно відновлювати їх сім різних часів. Більше того, більшість виродків виконують свої резервні копії кілька разів на день, так що ви можете легко мати 20 + різних резервних каталогів у будь-який момент часу. Не тільки відновлення файлів тепер боляче, але навіть просто переглядаючи ваші резервні копії даних може бути надзвичайно трудомістким - ви повинні були б знати, коли останній файл був змінений, щоб знайти його останню резервну копію. Крім того, неефективно використовувати лише щотижневі (або навіть рідше в деяких випадках) додаткові резервні копії.

    Зберігання резервних копій! Резервні копії знімків є не більш ніж інкрементними резервними копіями, але вони використовують жорсткі посилання для збереження файлової структури вихідного джерела. Це може бути важко обернути голову навколо на перший, так що давайте поглянемо на приклад.

    Уявіть, що у нас є скрипт резервного копіювання, який автоматично копіює наші дані кожні дві години. Якщо rsync робить це, він називає кожну резервну копію у форматі: Backup-month-day-year-time.

    Отже, наприкінці типового дня ми маємо список папок у нашому каталозі призначення так:

    Коли ви перетинаєте будь-який з цих каталогів, ви побачите кожен файл з каталогу джерела саме так, як він був у той час. Тим не менш, не буде дублікатів у будь-яких двох каталогах. rsync виконує це з використанням hardlinking через --link-dest = DIR аргумент.

    Звичайно, для того, щоб мати ці красиво і акуратно назви каталогів, нам доведеться трохи посилити наш скрипт rsync. Давайте подивимося, що потрібно для виконання такого резервного рішення, і тоді ми детальніше розберемо сценарій:

    #! / bin / bash

    #copy old time.txt до time2.txt

    так | cp ~ / backup / time.txt ~ / backup / time2.txt

    #overwrite старий файл time.txt з новим часом

    echo 'date + ”% F-% I% p”'> ~ / backup / time.txt

    #make файл журналу

    echo “”> ~ / backup / rsync-'date + ”% F-% I% p”.

    #rsync команда

    rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - вилучити --stats --log-файл = ~ / backup / rsync-'date + '% F-% I% p ''. log - виключення з '~ / exclude.txt' --link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files / 'date +'% F-% I% p '' /

    # не забудьте скопіювати файл журналу і помістити його в резервну копію

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / backup / time.txt'.log

    Це був би типовий скрипт rsync. У випадку, якщо ми тебе де-небудь загубимо, давайте розберемо його по частинах:

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

    Наступний рядок створює файл журналу rsync, називаючи його rsync-date.log (де дата - дата і час).

    Тепер складна команда rsync, про яку ми попереджали:

    -avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Просто перемикачі, про які ми говорили раніше; прокрутіть вгору, якщо вам потрібен переподготовка.

    --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - Це дозволи для каталогу призначення. Оскільки ми створюємо цей каталог в середині нашого сценарію rsync, нам потрібно вказати дозволи, щоб наш користувач міг записувати файли до нього.

    Використання команд дати і кішки

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

    Файл журналу вказано як:

    ~ / backup / rsync-'date + ”% F-% I% p”

    Крім того, ми могли б вказати його як:

    ~ / backup / rsync-'cat ~ / backup / time.txt'.log

    У будь-якому випадку, --лог-файл Команда повинна мати можливість знайти раніше створений файл журналу і записати в нього.

    Файл призначення посилання вказано як:

    --link-dest = / home / geek2 / files / "cat ~ / backup / time2.txt"

    Це означає, що --link-dest Команда задається каталогом попередньої резервної копії. Якщо ми виконуємо резервні копії кожні дві години, і це 4:00 вечора в той час, коли ми запускали цей сценарій, то --link-dest команда шукає каталог, створений у 2:00 вечора, і передає лише ті дані, які з того часу змінилися (якщо такі є).

    Щоб повторити, саме тому time.txt копіюється до time2.txt на початку скрипта, тому --link-dest команда може посилатися на цей час пізніше.

    Каталог призначення визначається як:

    [email protected]: / home / geek2 / files / 'date +'% F-% I% p ''

    Ця команда просто поміщає вихідні файли в каталог, який має назву поточної дати і часу.

    Нарешті, ми переконуємося, що копія файлу журналу розміщена всередині резервної копії.

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / backup / time.txt'.log

    Ми використовуємо захищену копію на порт 12345, щоб взяти журнал rsync і помістити його у відповідний каталог. Щоб вибрати правильний лог-файл і переконайтеся, що він закінчується в потрібному місці, на файл time.txt має бути посилання через команду cat. Якщо вам цікаво, чому ми вирішили котити time.txt замість того, щоб просто використовувати команду date, це тому, що багато часу могло проходити під час запуску команди rsync, тому, щоб переконатися, що у нас є правильний час, ми просто кота текстовий документ, який ми створили раніше.

    Автоматизація

    Використовуйте Cron на Linux або Task Scheduler у Windows для автоматизації вашого rsync сценарію. Будьте обережні, переконавшись, що ви завершуєте всі поточні запущені процеси rsync, перш ніж продовжити новий. Планувальник завдань, здається, автоматично закриває будь-які вже запущені екземпляри, але для Linux потрібно бути трохи більш творчим.

    Більшість дистрибутивів Linux можуть використовувати команду pkill, тому обов'язково додайте до початку вашого сценарію rsync наступне:

    pkill -9 rsync

    Шифрування

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

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

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

    З цієї причини краще / легше використовувати певний тип шифрування диска, наприклад BitLocker для Windows або dm-crypt для Linux. Таким чином, ваші дані будуть захищені в разі крадіжки, але файли можуть бути передані за допомогою rsync, і ваше шифрування не буде перешкоджати його продуктивності. Є й інші варіанти, які працюють аналогічно rsync або навіть реалізують певну форму, наприклад, Duplicity, але їм бракує деяких функцій, які rsync може запропонувати..

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