If-Koubou

Ръководството за синхронизиране на данни с Rsync, които не са начинаещи

Ръководството за синхронизиране на данни с Rsync, които не са начинаещи (Как да)

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

Предупреждение: Само за напреднали

Ако сте седи там мислейки "Какво е дяволът е rsync?" Или "Използвам rsync само за много прости задачи", може да поискате да проверите нашата предишна статия за това как да използвате rsync, за да архивирате данните си на Linux, въведение в rsync, ви води през инсталацията и визуализира основните му функции. След като сте твърдо разбрали как да използвате rsync (честно, не е толкова сложен) и се чувствате комфортно с терминал за Linux, вие сте готови да преминете към това разширено ръководство.

Стартиране на rsync на Windows

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

Инсталацията е проста; можете да запазите всички опции на техните стойности по подразбиране, докато стигнете до екрана "Select Packages".

Сега трябва да направите същите стъпки за Vim и SSH, но пакетите ще изглеждат малко по-различни, когато отидете да ги изберете, така че ето някои скрийншотове:

Инсталиране на Vim:

Инсталиране на SSH:

След като сте избрали тези три пакета, продължете да щраквате до следващата, докато не приключите инсталацията. След това можете да отворите Cygwin, като кликнете върху иконата, поставена от инсталатора на вашия работен плот.

rsync Команди: Прости до напреднали

Сега, когато потребителите на Windows се намират на една и съща страница, нека да разгледаме простата команда rsync и да покажем как използването на някои разширени ключове може бързо да стане сложно.

Да речем, че имате куп файлове, които трябва да бъдат архивирани - кой не прави тези дни? Включвате портативния твърд диск, за да архивирате файловете на компютъра си и дайте следната команда:

rsync -a / home / geek / файлове / / mnt / usb / файлове /

Или начинът, по който би изглеждал на компютър с Windows с Cygwin:

rsync -a / cygdrive / c / файлове / / cygdrive / e / файлове /

Доста проста и в този момент наистина няма нужда да използвате rsync, тъй като можете просто да влачите и пускате файловете. Ако обаче другият ви твърд диск вече има някои от файловете и просто се нуждае от актуализираните версии, плюс файловете, създадени след последната синхронизация, тази команда е удобна, защото изпраща новите данни само на твърдия диск. С големи файлове, и по-специално прехвърляне на файлове по интернет, това е голяма работа.

Архивирането на файловете на външен твърд диск и запазването на твърдия диск на същото място като компютъра ви е много лоша идея, така че нека да разгледаме какво ще е необходимо, за да започнете да изпращате файловете си през интернет до друг компютър ( един, който сте наели, член на семейството и т.н.).

rsync -av - изтриване -e 'ssh -p 12345' / home / geek / файлове / [email protected]: / home / geek2 / файлове /

Горната команда ще изпрати вашите файлове на друг компютър с IP адрес от 10.1.1.1. Той би изтрил външни файлове от местоназначението, които вече не съществуват в директорията с изход, извежда файловете, които се прехвърлят, за да имате представа за това какво се случва и да тунилирате rsync през SSH на порт 12345.

Най- -a -v -e --задаване ключове са едни от най-основните и често използвани; би трябвало вече да знаете много за тях, ако четете този урок. Нека да преминем някои други ключове, които понякога са игнорирани, но невероятно полезни:

--progress - Този превключвател ни позволява да виждаме напредъка на прехвърлянето на всеки файл. Това е особено полезно при прехвърлянето на големи файлове през интернет, но може да изведе безсмислено количество информация само когато прехвърляте малки файлове през бърза мрежа.

Команда rsync с --progress превключвате като резервно копие е в ход:

--partial - Това е друг ключ, който е особено полезен при прехвърляне на големи файлове по интернет. Ако rsync се прекъсне по някаква причина в средата на прехвърлянето на файлове, частично прехвърленият файл се съхранява в директорията на местоназначението и прехвърлянето се възобновява, когато то се преустанови, след като командата rsync бъде изпълнена отново. Когато прехвърляте големи файлове през интернет (например, няколко гигабайта), няма нищо по-лошо от това, че има няколко секунди прекъсване на интернет, син екран или човешка грешка, които прекъсват прехвърлянето на файлове и трябва да започнат отново.

- този превключвател се комбинира --progress и --partial, така че използвайте го вместо това и ще направи вашата rsync команда малко по-чист.

-Z или --compress - Този превключвател ще направи rsync да компресира файловите данни, докато се прехвърля, като намалява количеството данни, които трябва да бъдат изпратени до местоназначението. Всъщност това е доста често срещано превключване, но далеч не е от съществено значение, само че наистина ви се възползва от трансферите между бавните връзки и не прави нищо за следните типове файлове: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h или --human четима - Ако използвате --progress превключвател, определено ще искате да използвате и този. Това означава, че ако не искате да конвертирате байтове в мегабайти в движение. Най- -h превключва всички изходящи числа в формат, който може да се чете от човек, така че всъщност можете да осмислите количеството прехвърлени данни.

или --суха тренировка - Този ключ е от съществено значение, за да знаете кога за първи път пишете rsync скрипта и го изпробвате. Извършва пробно пускане, но всъщност не прави никакви промени - евентуалните промени все още се извеждат нормално, така че можете да прочетете всичко и да сте сигурни, че изглежда добре, преди да влезете в производствения сценарий.

-R или --relative - Този превключвател трябва да се използва, ако директорията на местоназначението все още не съществува. Ще използваме тази опция по-късно в това ръководство, така че да можем да създадем директории на целевата машина с времеви марки в имената на папките.

--exclude-от - Този ключ се използва за свързване към списък за изключване, който съдържа директории, които не искате да се архивират. Тя просто се нуждае от обикновен текстов файл с директория или файлов път на всеки ред.

включете този, от - Подобен на --exclude-от, но той се свързва с файл, който съдържа директории и файлови пътища на данните, които искате да бъдат архивирани.

--stats - Не е наистина важен ключ по никакъв начин, но ако сте sysadmin, може да е полезно да се запознаете с подробните статистики за всеки архив, така че да можете да наблюдавате размера на трафика, който се изпраща през вашата мрежа и такива.

--log-файл - Това ви позволява да изпратите изхода rsync до лог файл. Определено препоръчваме това за автоматизирани резервни копия, в които не сте там, за да прочетете изхода сами. Винаги давайте регистрационните файлове веднъж в свободното си време, за да се уверите, че всичко работи правилно. Също така, това е ключов превключвател за използване на sysadmin, така че не ви оставя да се чудите как архивите ви са се провалили, докато сте напуснали стажанта.

Нека да разгледаме командата rsync, след като добавим още няколко превключватели:

rsync -avzhP - изтриване на --stats --log-file = / home / geek / rsynclogs / backup.log - изключване от '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / файлове / [email protected]: / home / geek2 / файлове /

Командата все още е доста проста, но все още не сме създали прилично резервно решение. Въпреки че файловете ни сега са в две различни физически местоположения, това архивиране не прави нищо, за да ни предпази от една от основните причини за загуба на данни: човешка грешка.

Резюмета на моментното състояние

Ако случайно изтриете файл, вирус корумпира някой от файловете ви или се случва нещо друго, при което файловете ви са нежелателно променени, а след това изпълнявате скрипта за резервно копие на rsync, резервните ви данни се презаписват с нежеланите промени. Когато възникне такова нещо (не, ако, но кога), резервното ви решение не направи нищо, за да ви защити от загубата на данни.

Създателят на rsync осъзна това и добави --backup и --backup-реж аргументи, така че потребителите да могат да изпълняват диференцирани архиви. Първият пример на уебсайта на rsync показва скрипт, в който се изпълнява пълен архив на всеки седем дни, а промените в тези файлове се архивират ежедневно в отделни директории. Проблемът с този метод е, че за да възстановите файловете си, трябва ефективно да ги възстановите седем пъти. Нещо повече, повечето геймъри използват архивите няколко пъти на ден, така че лесно можете да имате 20+ различни директории за резервно копиране във всеки един момент. Не само възстановяването на файловете ви сега е болка, но дори и само да преглеждате резервно копие на данните си, може да е изключително отнемащо време - трябва да знаете последния път, когато даден файл е бил променен, за да намерите последното му копие. Освен всичко това, е неефективно да се изпълняват само седмични (или дори по-рядко в някои случаи) постепенни резервни копия.

Резюмета на снимките за спасяване! Резервните копия на моментното състояние не са нищо повече от допълнителните резервни копия, но използват твърди връзки, за да запазят файловата структура на оригиналния източник. Това може да е трудно да обвиете главата си отначало, така че нека да разгледаме един пример.

Предполагам, че имаме скрипт за резервно копие, който автоматично архивира данните ни на всеки два часа. Всеки път, когато rsync прави това, той записва всеки архив във формат: Backup-month-day-year-time.

Така че, в края на един типичен ден, ще имаме списък с папки в нашата директория за целта по следния начин:

Когато препращате някоя от тези директории, ще видите всеки файл от директорията на източника, точно както е бил по това време. И все пак, няма да има дубликати във всички две директории. rsync осъществява това с помощта на твърди връзки през --link-Цел = DIR аргумент.

Разбира се, за да имаме тези имена на директории, добре и с лекота, ще трябва да наблегнем малко на нашия rsync скрипт. Нека да разгледаме какво ще е необходимо, за да се постигне подобно резервно решение, след което ще обясним по-подробно сценария:

#! / Хамбар / Баш

#copy старото време.txt към time2.txt

да | cp ~ / backup / time.txt ~ / backup / time2.txt

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

echo 'дата + "% F-% I% p"'> ~ / backup / time.txt

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

echo ""> ~ / backup / rsync-getate + "% F-% I% p" '

#rsync команда

rsync -avzhPR -chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r --delete --stats --log-file = 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 / файлове / 'дата +'% F-% I% p '

# не забравяйте да сканирате файла с журнала и да го поставите с архива

scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / файлове / 'cat ~ / backup / time.txt' / rsync -cat ~ / архивиране / 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 - Само превключвателите, за които говорихме по-рано; превъртете нагоре, ако имате нужда от опреснителя.

--chmod = Du = rwx, DGO = Rx, фу = RW, Fgo = R - Това са разрешенията за целевата директория. Тъй като правим тази директория в средата на нашия rsync скрипт, трябва да посочим разрешенията, така че нашият потребител да може да пише файлове в него.

Използване на команди за дата и котка

Ще преминем всяка употреба на командата за дата и котка в командата rsync, в реда, в който се намират. Забележка: Съзнаваме, че има други начини да постигнете тази функционалност, особено с използването на деклариращи променливи, но за целите на това ръководство решихме да използваме този метод.

Журналът се определя като:

~ / backup / rsync-getate + "% F-% I% p"

Алтернативно, бихме могли да го определим като:

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

Така или иначе, --log-файл командата трябва да може да намери създадения по-рано даден файл с данни и да го напише.

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

--link-dest = / home / geek2 / файлове / 'cat ~ / backup / time2.txt'

Това означава, че --link-Цел командата получава директорията на предишното архивиране. Ако работим на резервни копия на всеки два часа, и това е 4:00 PM в момента, когато изпълнява този скрипт, а след това --link-Цел команда търси директорията, създадена в 14:00 ч. и прехвърля само променените оттогава данни (ако има такива).

За да повторим, затова time.txt се копира в time2.txt в началото на скрипта, така че --link-Цел командата може да посочи това време по-късно.

Директорията на местоназначението е посочена като:

[email protected]: / home / geek2 / файлове / 'дата +'% F-% I% p ''

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

И накрая, се уверяваме, че копие от лог файла е поставено в архива.

scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / файлове / 'cat ~ / backup / time.txt' / rsync -cat ~ / архивиране / time.txt'.log

Използваме защитено копие на порт 12345, за да вземем регистрационния файл на rsync и да го поставим в правилната директория. За да изберете правилния журнален файл и да се уверите, че той завършва на правилното място, файлът time.txt трябва да бъде препратен чрез командата cat. Ако се чудите защо решихме да котка time.txt, вместо просто да използвате командата за дата, това е така, защото много време може да се е появило, докато командата rsync работи, за да се уверим, че имаме точното време, текстовия документ, който създадохме по-рано.

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

Използвайте Cron на Linux или Task Scheduler на Windows, за да автоматизирате вашия rsync скрипт. Едно нещо, което трябва да бъдете внимателни, е да се уверите, че приключвате всички текущи rsync процеси, преди да продължите с нов. Задачата Scheduler изглежда, че автоматично затваря всички вече изпълнявани потребителски интерфейси, но за Linux ще трябва да бъдете малко по-креативни.

Повечето Linux дистрибуции могат да използват командата pkill, така че не забравяйте да добавите следното към началото на вашия rsync скрипт:

pkill-9 rsync

Encryption

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

В нашите примери сме tunnelled целия си rsync трафик чрез SSH, така че това означава, че всички наши файлове са криптирани, докато са в транзита до тяхното предназначение. Трябва обаче да се уверим, че дестинацията е също толкова сигурна. Имайте предвид, че rsync криптира само данните ви, докато се прехвърля, но файловете са широко отворени, когато стигнат до местоназначението си.

Една от най-добрите функции на rsync е, че прехвърля само промените във всеки файл. Ако имате всичките си файлове, шифровани и направите една малка промяна, целият файл ще трябва да бъде препредаден в резултат на криптирането напълно случайно всички данни след всяка промяна.

По тази причина е най-лесно / най-лесно да използвате някакво шифроване на диска, като например BitLocker за Windows или dm-crypt за Linux. По този начин вашите данни са защитени в случай на кражба, но файловете могат да се прехвърлят с rsync и вашето криптиране няма да възпрепятства изпълнението му. Има и други опции, които работят подобно на rsync или дори изпълняват някаква форма, като Duplicity, но им липсват някои от функциите, които rsync може да предложи.

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