Начална » как да » Ръководство за синхронизиране на данни с Rsync

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

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

    Предупреждение: Разширено Geeks Само

    Ако седите там и си мислите „Какво, по дяволите, е 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 / файлове / / 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.

    Най- -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.

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

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

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

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

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

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

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

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

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

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

    Резервни копия на снимките

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

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

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

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

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

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

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

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

    #copy old time.txt към time2.txt

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

    #overwrite old 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' / начало / 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 ~ / архивиране / time.txt'.log

    Това би било типичен скрипт за моментна снимка. В случай, че те загубим някъде, нека го разделим на парче:

    Първият ред на нашия скрипт копира съдържанието на time.txt в time2.txt. Да е тръба да потвърди, че искаме да презапишем файла. След това вземаме текущото време и го поставяме в time.txt. Тези файлове ще станат полезни по-късно.

    Следващият ред прави лог файла rsync, именувайки го rsync-date.log (където датата е действителната дата и час).

    Сега сложната команда rsync, за която ви предупреждаваме:

    -avzhPR, -e, --deele, --stats, --log-file, --exclude-from, --link-dest - Само ключовете, за които говорихме по-рано; превъртете нагоре, ако имате нужда от опресняване.

    --коригират = Du = rwx, DGO = Rx, фу = 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"

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

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

    Целевата директория е посочена като:

    [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 ~ / архивиране / time.txt'.log

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

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

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

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

    pkill -9 rsync

    Encryption

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

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

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

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

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