Протокол rsync може бути досить простим у використанні для звичайних завдань резервного копіювання / синхронізації, але деякі його більш розширені функції можуть вас здивувати. У цій статті ми покажемо, як навіть найбільші накопичувачі даних та ентузіасти резервного копіювання можуть використовувати rsync як єдине рішення для всіх своїх потреб у надмірності даних.
Попередження: Лише для досвідчених вундеркіндів
Якщо ви сидите там і думаєте: "Що, чорт візьми, це rsync?" або "Я використовую rsync лише для дуже простих завдань", можливо, ви захочете ознайомитися з нашою попередньою статтею як використовувати rsync для резервного копіювання даних у Linux , який дає вступ до rsync, проводить вас під час встановлення та демонструє його основні функції. Як тільки ви чітко зрозумієте, як користуватися rsync (чесно кажучи, це не так складно) і вам зручно користуватися терміналом Linux, ви готові перейти до цього вдосконаленого посібника.
Запуск rsync у Windows
По-перше, давайте розмістимо наші читачі Windows на тій самій сторінці, що і наші гуру Linux. Незважаючи на те, що rsync створений для роботи на Unix-подібних системах, немає жодної причини, що ви не зможете використовувати його так само легко в Windows. Cygwin створює чудовий API для Linux, який ми можемо використовувати для запуску rsync, тому перейдіть на їх веб-сайт і завантажте 32-розрядна або 64-розрядна версії, залежно від вашого комп'ютера.
Установка проста; Ви можете підтримувати всі параметри за замовчуванням, поки не дійдете до екрана «Вибір пакетів».
Тепер вам потрібно зробити ті самі кроки для Vim і SSH, але пакети будуть виглядати дещо інакше, коли ви підете їх вибирати, тому ось кілька скріншотів:
Встановлення Vim:
Встановлення SSH:
Після того, як ви вибрали ці три пакети, продовжуйте клацати далі, поки не завершите встановлення. Потім ви можете відкрити Cygwin, клацнувши на піктограму, яку установник розмістив на вашому робочому столі.
Команди rsync: прості для вдосконалених
Тепер, коли користувачі Windows перебувають на одній сторінці, давайте розглянемо просту команду rsync і покажемо, як використання деяких вдосконалених комутаторів може швидко ускладнити її.
Скажімо, у вас є купа файлів, для яких потрібно створити резервну копію - хто цього не робить сьогодні? Ви підключаєте свій портативний жорсткий диск, щоб мати змогу робити резервні копії файлів комп’ютерів, і видайте таку команду:
rsync -a / home / geek / files / / mnt / usb / files /
Або, як би це виглядало на комп’ютері з ОС Windows із Cygwin:
rsync -a / cygdrive / c / files / / cygdrive / e / files /
Досить просто, і на той момент насправді немає потреби використовувати rsync, оскільки ви можете просто перетягувати файли. Однак, якщо на вашому іншому жорсткому диску вже є деякі файли і йому потрібні лише оновлені версії, а також файли, створені після останньої синхронізації, ця команда зручна, оскільки вона лише надсилає нові дані на жорсткий диск. З великими файлами, і особливо з передачею файлів через Інтернет, це велика справа.
Резервне копіювання файлів на зовнішній жорсткий диск, а потім зберігання жорсткого диска в тому самому місці, де і ваш комп’ютер, є дуже поганою ідеєю, тому давайте подивимось, що потрібно для того, щоб почати надсилати файли через Інтернет на інший комп’ютер ( орендованого вами, члена сім'ї тощо).
rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
Вищевказана команда надсилатиме ваші файли на інший комп'ютер з IP-адресою 10.1.1.1. Це призведе до видалення сторонніх файлів із пункту призначення, які більше не існують у вихідному каталозі, виведення переданих імен файлів, щоб ви мали уявлення про те, що відбувається, та тунелювання rsync через SSH на порту 12345.
-а -в -е --делете
перемикачі є одними з найбільш простих і часто використовуваних; Ви вже повинні добре знати про них, якщо читаєте цей посібник. Давайте розглянемо деякі інші перемикачі, які іноді ігноруються, але неймовірно корисні:
--прогрес
- Цей перемикач дозволяє нам бачити хід передачі кожного файлу. Це особливо корисно при передачі великих файлів через Інтернет, але може видавати безглуздий обсяг інформації, просто переносячи невеликі файли через швидку мережу.
Команда rsync з
--прогрес
перемикач, оскільки виконується резервне копіювання:
- частково
- Це ще один перемикач, який особливо корисний при передачі великих файлів через Інтернет. Якщо rsync переривається з будь-якої причини в середині передачі файлу, частково переданий файл зберігається в цільовому каталозі, і передача продовжується там, де вона зупинилася, після повторного виконання команди rsync. Під час передачі великих файлів через Інтернет (скажімо, пару гігабайт) немає нічого гіршого, ніж кілька секунд відключення Інтернету, синій екран або помилка людини, що перешкоджає передачі файлів, і потрібно починати все спочатку.
-P
- цей вимикач поєднує
--прогрес
і
- частково
, тому використовуйте його замість цього, і це зробить вашу команду rsync трохи охайнішою.
-з
або
- стиснути
- Цей перемикач змусить rsync стискати дані файлу під час їх передачі, зменшуючи обсяг даних, які потрібно відправити до місця призначення. Насправді це досить поширений перемикач, але далеко не важливий, він дійсно корисний для вас при передачі між повільними з'єднаннями, і він нічого не робить для наступних типів файлів: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-ч
або
- людиночитабельні
- Якщо ви використовуєте
--прогрес
перемикач, ви точно захочете використовувати і цей. Тобто, якщо ви не хочете перетворювати байти в мегабайти на льоту.
-ч
switch перетворює всі виведені числа в формат, зручний для читання, так що ви можете зрозуміти обсяг переданих даних.
-н
або
- сухий біг
- Цей перемикач важливий, щоб знати, коли ви вперше пишете скрипт rsync і тестуєте його. Він виконує пробний запуск, але насправді не вносить жодних змін - можливі зміни все одно виводяться як зазвичай, тому ви можете прочитати все і переконатися, що це виглядає нормально, перш ніж запускати ваш сценарій у виробництво.
-R
або
- відносний
- Цей перемикач потрібно використовувати, якщо цільовий каталог ще не існує. Далі в цьому посібнику ми використаємо цю опцію, щоб ми могли створювати каталоги на цільовій машині із позначками часу в іменах папок.
--exclude-from
- Цей перемикач використовується для посилання на список виключень, що містить шляхи до каталогів, резервне копіювання яких не потрібно. Для цього просто потрібен звичайний текстовий файл із каталогом або шляхом до файлу в кожному рядку.
--include-from
- Схожий на
--exclude-from
, але він посилається на файл, що містить каталоги та шляхи до файлів даних, для яких потрібно створити резервну копію.
--статистика
- Це насправді не важливий перемикач, але якщо ви сисадмін, вам може бути зручно знати детальну статистику кожного резервного копіювання, щоб ви могли стежити за обсягом трафіку, що надсилається через вашу мережу тощо.
--log-файл
- Це дозволяє надсилати вихідні дані rsync у файл журналу. Ми однозначно рекомендуємо це для автоматизованих резервних копій, у яких ви не там, щоб самостійно прочитати результати. Завжди переглядайте файли журналів у вільний час, щоб переконатися, що все працює належним чином. Крім того, це ключовий перемикач для використання системного адміністратора, тому вам не залишається цікаво, як не вдалося створити резервні копії, поки ви залишали відповідального стажера.
Давайте подивимось на нашу команду rsync тепер, коли ми додали ще кілька перемикачів:
rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /
Команда все ще досить проста, але ми все ще не створили гідного рішення для резервного копіювання. Незважаючи на те, що наші файли зараз знаходяться у двох різних фізичних місцях, ця резервна копія нічим не захищає нас від однієї з основних причин втрати даних: людської помилки.
Резервні копії знімків
Якщо ви випадково видалите файл, вірус зіпсує будь-який з ваших файлів або трапиться щось інше, у результаті чого ваші файли будуть небажано змінені, а потім ви запустите скрипт резервної копії rsync, ваші резервні копії даних будуть перезаписані з небажаними змінами. Коли таке трапляється (не якщо, а коли), рішення для резервного копіювання нічим не захищало вас від втрати даних.
Творець rsync це зрозумів і додав
- резервна копія
і
- резервна копія-реж
аргументи, щоб користувачі могли запускати диференціальні резервні копії. Те саме
перший приклад на веб-сайті rsync
показує сценарій, де повне резервне копіювання виконується кожні сім днів, а потім зміни цих файлів щодня створюються резервні копії в окремих каталогах. Проблема цього методу полягає в тому, що для відновлення ваших файлів вам потрібно ефективно відновити їх сім разів. Більше того, більшість вундеркіндів виконують свої резервні копії кілька разів на день, тому ви можете легко мати 20+ різних каталогів резервного копіювання в будь-який момент часу. Відновлення ваших файлів тепер не лише боляче, але навіть просто перегляд резервних копій даних може зайняти дуже багато часу - вам доведеться знати, коли файл востаннє змінювався, щоб знайти останню резервну копію. До всього іншого, неефективно запускати лише щотижневі (або навіть рідше в деяких випадках) додаткові резервні копії.
Резервні копії знімків на допомогу! Резервні копії знімків - це не що інше, як покрокові резервні копії, але вони використовують жорсткі посилання, щоб зберегти структуру файлів оригінального джерела. Спочатку важко обернути голову, тож давайте розглянемо приклад.
Прикиньтесь, що у нас запущений сценарій резервного копіювання, який автоматично робить резервну копію наших даних кожні дві години. Щоразу, коли rsync робить це, він називає кожну резервну копію у форматі: Резервне копіювання місяць-день-рік-час.
Отже, наприкінці типового дня у нас буде список папок у нашому каталозі призначення, такий:
Під час обходу будь-якого з цих каталогів ви побачите кожен файл із вихідного каталогу саме таким, яким він був у той час. Тим не менше, не було б дублікатів у будь-яких двох каталогах. rsync досягає цього за допомогою використання жорстких посилань через
--link-dest = DIR
аргумент.
Звичайно, для того, щоб мати ці красиво і акуратно датовані назви каталогів, нам доведеться трохи вдосконалити наш rsync-скрипт. Давайте подивимося, що потрібно для створення такого рішення для резервного копіювання, а потім ми детальніше пояснимо сценарій:
#! / Bin / Bash
# скопіюйте старий time.txt до time2.txt
так | cp ~ / backup / time.txt ~ / backup / time2.txt
# перезаписати старий файл time.txt новим часом
echo `date +”% F-% I% p ”`> ~ / backup / time.txt
#make файл журналу
echo “”> ~ / backup / rsync-`date + ”% F-% I% p” `.log
Команда #rsync
rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = ~ / backup / rsync-`date + ”% F-% I% p ”` .log --exclude-from '~ / 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. Трубка так підтверджує, що ми хочемо перезаписати файл. Далі беремо поточний час і поміщаємо його у time.txt. Ці файли стануть в нагоді пізніше.
Наступний рядок робить файл журналу rsync, називаючи його rsync-date.log (де дата - це фактична дата та час).
Тепер складна команда rsync, про яку ми попереджали вас:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest
- Тільки перемикачі, про які ми говорили раніше; прокрутіть угору, якщо вам потрібне оновлення.
--- ch також d = zu = rwx, D go = rx, fu = rw, F go = r
- Це дозволи для цільового каталогу. Оскільки ми робимо цей каталог в середині нашого скрипта rsync, нам потрібно вказати дозволи, щоб наш користувач міг писати до нього файли.
Використання команд date та cat
Ми розглянемо кожне використання дати та команд cat у команді rsync у тому порядку, в якому вони відбуваються. Примітка: ми усвідомлюємо, що існують інші способи досягнення цієї функціональності, особливо із використанням оголошень змінних, але для цілей цього посібника ми вирішили застосувати цей метод.
Файл журналу визначається як:
~ / backup / rsync-`date + ”% F-% I% p” `.log
Як варіант, ми могли б вказати це як:
~ / backup / rsync-`cat ~ / backup / time.txt`.log
У будь-якому випадку,
--log-файл
Команда повинна мати можливість знайти раніше створений файл журналу та записати в нього.
Файл призначення посилання вказаний як:
--link-dest = / home / geek2 / files / `cat ~ / backup / time2.txt`
Це означає, що
--link-dest
команда отримує каталог попереднього резервного копіювання. Якщо ми запускаємо резервні копії кожні дві години, і це 16:00 на момент запуску цього сценарію, тоді
--link-dest
команда шукає каталог, створений о 14: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. Якщо вам цікаво, чому ми вирішили встановити cat.txt замість того, щоб просто використовувати команду date, це тому, що під час роботи команди rsync могло статися багато часу, тому, щоб переконатися, що у нас є правильний час, ми просто котуємо текстовий документ, який ми створили раніше.
Автоматизація
Використовуйте Cron на Linux або Планувальник завдань у Windows для автоматизації вашого скрипта rsync. Одного, з чим потрібно бути обережним, - це переконатися, що ви закінчуєте будь-які запущені в даний час процеси rsync, перш ніж продовжувати новий. Здається, Планувальник завдань автоматично закриває всі запущені екземпляри, але для Linux вам потрібно бути трохи більш креативними.
Більшість дистрибутивів Linux можуть використовувати команду pkill, тому просто не забудьте додати наступне на початок вашого скрипта rsync:
pkill -9 rsync
Шифрування
Ні, ми ще не закінчили. Нарешті у нас є фантастичне (і безкоштовне!) Рішення для резервного копіювання, але всі наші файли все ще піддаються крадіжці. Сподіваємось, ви створюєте резервну копію своїх файлів у якомусь місці за сотні миль. Яким би надійним не було це далеке місце, крадіжка та злом завжди можуть бути проблемою.
У наших прикладах ми проклали весь наш rsync-трафік через SSH, що означає, що всі наші файли зашифровані під час передачі до місця призначення. Однак нам потрібно переконатися, що пункт призначення настільки ж безпечний. Майте на увазі, що rsync шифрує ваші дані лише під час їх передачі, але файли широко відкриваються, як тільки вони досягають місця призначення.
Однією з найкращих функцій rsync є те, що він передає лише зміни у кожному файлі. Якщо у вас є всі ваші файли зашифровані та внесено одну незначну зміну, весь файл доведеться повторно передавати в результаті шифрування, повністю рандомізуючи всі дані після будь-яких змін.
З цієї причини найкраще / найпростіше використовувати якийсь тип шифрування диска, наприклад BitLocker для Windows або dm-склеп для Linux. Таким чином, ваші дані захищаються у випадку крадіжки, але файли можна передавати за допомогою rsync, і ваше шифрування не заважатиме його роботі. Є й інші варіанти, які працюють подібно до rsync або навіть реалізують якусь його форму, наприклад, Duplicity, але їм не вистачає деяких функцій, які пропонує rsync.
Після того, як ви налаштували свої резервні копії знімків в іншому місці та зашифрували свої жорсткі диски джерела та призначення, погладьте себе по спині для освоєння rsync та впровадження максимально надійного рішення для резервного копіювання даних.